Sayın Arkadaşlar şimdilik Firebird ü yeni yeni öğrendiğimiz için takıldığımız konular oluyor birtanesi şu
Önceleri paradox kullanırken işlem yapılacak kayıtın başkası tarafından açılıp açılmadığını kontrol ediyor ona göre erişim ihlalali falan gibisinden mesaj verip işlemi sonra yapmasını söylüyorduk . Firebird de böyle bir sorun yoktur gerçi ama yinede bu şekilde davranmak gerekirmi. Biraz ayrıntılı bilgi verirseniz sevinirim.
Bu arada araya hafta sonu giriyor iki gün kadar formda olamayacağım için hem soruyor hem ilgisiz kalıyor düşüncesi doğmasın. İyi hafta sonları
Database de Erişim Kontrolu
Database de Erişim Kontrolu
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Selamlar,
Locking mantıkları RDBM'lerde biraz farklıdır. Bu konu gerçekten geniş bir zaman alır (Anlatılması ve anlaşılması) Bu gibi durumlarda Transaction sistematiği devreye girer. Dirty Read, Read Committed gibi çeşitli şekilleri var.
Ancak şunu özetle söyleyebilirim. Row Bazında Lock yapmak istiyorsan bir table aç ve oraya şu kaydı şu kişi kilitledi gibi bir kayıt at. Sonra lock table'ına koyduğun kaydı işin bitince sil !...
Bu en basit ve bütün RDBMS'lerde kullanabileceğin atadan dededn kalma bir yöntemdir ve her zaman işe yarar !
Tabi gerçek çözüm bu bahsettiğim değil, transaction ve locking diye MSDN'de Oracle'da FFB / IB'de bir sürü dokuman var onları incelemelisin.
Kolay Gelsin.
Locking mantıkları RDBM'lerde biraz farklıdır. Bu konu gerçekten geniş bir zaman alır (Anlatılması ve anlaşılması) Bu gibi durumlarda Transaction sistematiği devreye girer. Dirty Read, Read Committed gibi çeşitli şekilleri var.
Ancak şunu özetle söyleyebilirim. Row Bazında Lock yapmak istiyorsan bir table aç ve oraya şu kaydı şu kişi kilitledi gibi bir kayıt at. Sonra lock table'ına koyduğun kaydı işin bitince sil !...
Bu en basit ve bütün RDBMS'lerde kullanabileceğin atadan dededn kalma bir yöntemdir ve her zaman işe yarar !

Tabi gerçek çözüm bu bahsettiğim değil, transaction ve locking diye MSDN'de Oracle'da FFB / IB'de bir sürü dokuman var onları incelemelisin.
Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kuri_TLJ ilgi ve açıklaman için Teşekkür ederim. Ben daha önce senin mantığının aynısını tabi farklı bir yöntem ile uygulardım tabi bu yöntemin Firebirdde işe yarayğınısanmam. Paradox kullanırken önce kayıtı edit etmeye çalışırdım edit ile ilgili bir hata verdiği zaman kullanıcı adınıda sistemden aldırarak bu kayıt şu kişi tarafından işlem görüyor . işleminizi daha sonra tekrar deneyin diye bir mesaj veriyordum tabi paradoxta bana hata mesajı olarak locked by user diye bir mesj verirdi ben bu mesaja dayanarak yapardım .
daha denemedim ancak eğerki Firebird de edit esnasında başka biri kullanırken bu hatayı vermiyecekse senin dediğini yapacağım arkadaşım. çok mantıklı yok eğer bu edit hatası firebird içinde geçerli ise benim yaptığım bana göre daha uydun çünkü table ye yazıp kontrol etmek ve daha sonra silmekten daha iyidir diye düşünüyorum .
Tekrar sağol teşekkür ederim
daha denemedim ancak eğerki Firebird de edit esnasında başka biri kullanırken bu hatayı vermiyecekse senin dediğini yapacağım arkadaşım. çok mantıklı yok eğer bu edit hatası firebird içinde geçerli ise benim yaptığım bana göre daha uydun çünkü table ye yazıp kontrol etmek ve daha sonra silmekten daha iyidir diye düşünüyorum .
Tekrar sağol teşekkür ederim
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Selamlar,
Denemek lazım ama daha önceden (tabi readcommitted, dirtyread) gibi kombinasyonlarla denemek lazım. Ama default olarak bir table veya query gönderdiğinde, Client/Server Mimaride o table'ı Client'ın belleğine çektiğin için serverda o anda bir başkası değişiklik yapabilir.
Sen de kayıtta değişiklik yapıp, server'a geri göndermeye çalıştığında (sana şuna benzer bir hata gelir) 'Record Changed by another user'
Bu da senin post veya commit işlemini yarıda keser ve update'ini yapamazsın.
Bu ayrıma dikkat edin. MS-SQL Server'da locking mantıklarında TableLockX ditye bir paremetre var (Select veya benzeri cümlelerde kullanılıyor) Bu Table'ı ben okuduğum andan itibaren Exclusive olarak aç ve kimseye ne okuttur, ne de değişiklik yapmasına izin ver.
Firebird'de de aşağı yukarı bu mantıkta transaction veya locking yapmak gerekir.
Kolay Gelsin.
Denemek lazım ama daha önceden (tabi readcommitted, dirtyread) gibi kombinasyonlarla denemek lazım. Ama default olarak bir table veya query gönderdiğinde, Client/Server Mimaride o table'ı Client'ın belleğine çektiğin için serverda o anda bir başkası değişiklik yapabilir.
Sen de kayıtta değişiklik yapıp, server'a geri göndermeye çalıştığında (sana şuna benzer bir hata gelir) 'Record Changed by another user'
Bu da senin post veya commit işlemini yarıda keser ve update'ini yapamazsın.
Bu ayrıma dikkat edin. MS-SQL Server'da locking mantıklarında TableLockX ditye bir paremetre var (Select veya benzeri cümlelerde kullanılıyor) Bu Table'ı ben okuduğum andan itibaren Exclusive olarak aç ve kimseye ne okuttur, ne de değişiklik yapmasına izin ver.
Firebird'de de aşağı yukarı bu mantıkta transaction veya locking yapmak gerekir.
Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/