MSSQL Kayit kilitleme ile ilgili bir soru..

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Glen
Üye
Mesajlar: 277
Kayıt: 12 Eki 2005 11:58

MSSQL Kayit kilitleme ile ilgili bir soru..

Mesaj gönderen Glen »

Merhaba,

Kayit kilitleme ile ilgili konular konu$ulmu$ ancak benim aradigm tipten degil ya da ben bulamadim.. Tekrar sorayim dedim..

İlk oncelikle $unu belirtmek istiyorum, MSSQL kullaniyorum. Her$eyi stored procedureler ve triggerlar ile yaptiriyorum (select, insert, delete vs. her$eyi) bu yuzden bazi $eyleri kafamda cözemedim..

Benim i$imi görücek kisim sanirim Veritabani kisminda kayitlara bir kilit koymak.. Yani $öyle diyim, MSSQL de kayitlara kilit koyma olayi varmi.. Bunu bir field olarak yapmak istemiyorum cunku mesela biri kaydi kilitledi ve o sirada bilgisayarinda bir sorun olu$tu ve serverdan baglanti kesildi.. O Field (ornegin tabloya LOCK diye bir alan tanimlasam vs. 1 olunca kilitli 0 olunca kilitli olmasa..) kilitli olsa ve sorun olu$tuktan sonra 0 olamayacagi icin bir takim sikintilar ya$anir sanirim.. Onun icin MSSQL de atiyorum bir field olarak degil de ba$ka bir yontemle kayit kilitleme olayi varmi, ve de o makinanin (bagli kullanicinin veya) baglantisi kesildikten sonra otomatikman kilitledigi tüm kayitlarin tekrar acilmasi... (Field olarak dedigm tabloya bir alan tanimlayip o alana 0 veya 1 degeri verdirip o satirin yani kaydin kilitli olup olmadigini belirlemek ordan cözmek vs. yani sagliksiz bir yontem sanirim)
Eger böyle bir özellik varsa i$imi cok görür.

Cünkü ben her$eyi ama her$eyi dedigim gibi stored procedureler ile yapiyorum yani a$agidaki gibi hic yapmiyorum..

Table1.Edit;
Table1ALANADI.text := Edit1.text;
Table1.Post;
(kodlar dogrudur umarim cünkü hic kullanmiyorum)..

Yaptigim atiyorum bir kaydi degi$tirmek istedigimde.. O kaydin PRIMARY KEY 'ini formda bir degi$kene atayip...

UPDATE TABLO
SET X = X, Y = Y
WHERE PRIMARYKEY = PrimayKeyDegiskeni

Yani bu $ekilde yaptigm icin kontrol yapamiyorum....

Table1.Edit diye bir yöntem kullanmak da pek i$ime gelmiyor. Çünkü atiyorum

Öğretmen ve Öğrenci tablosu..

Öğrenci eklerken.. Mesela öğrencinin bilgileri girilecek, ne girilebilir.. işte kayıtlı olduğu il, hangi öğretmenin altında vs...

Şimdi diyelim İl i seçtik il tablosundan sonra da öğretmen tablosundan öğretmeni seçtik.. Gittik 1 saat yemek yedik geldik o sirada (senaryoya bakin yalniz :p) biri geldi o ili sildi başka makinadan.. Bi de uyuzluk degilmi yetmedi öğretmeni de sildi...

Ben stored procedure'de kaydi gonderdigimde ilk olarak öğretmen kontrolunu yaptiriyorum eger varmi yokmu diye, sonra ili mesela.. il kontrolünü yaptiriyorum.. Eğer hepsi tamamsa yani kayitlar varsa INSERT veya UPDATE i$lemini gercekle$tiriyorum. Eger yoksa RAISERROR kullanarak veritabanindan hata verdirtip, try except blogunla da yakalayabiliyorum... İşte bu yüzden, yani bu kontrolü (kaydetmeden/değiştirmeden önce sp'nin yaptigi kontrol) ben Table1.Edit ile yapamadigim icin i$ime gelmiyor pek.. (Gerci yapamadigim diyorum ama varmi öyle bir kontrol? Delphiden degil veritabanindan kotnrol yapilacak)

Yani bana nasil bir çözüm önerebilirsiniz sonuç olarak..
Bu arada sorumun uzun oldugunun ve de biraz karma$ik göründügünün farkindayim. Anlayamadiginiz, daha dogrusu anlatamadigim bir nokta olduysa tekrar aciklayabilirim...

$imdiden te$ekkür ediyorum, kolay gelsin.
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

Merhaba;

sorunuzu okuyacak kadar şu güğnlerde pek kimse olacağını sanmıyorum lütfen daha kısa yazarsanzı okuma ve dolayısıyla yardım etme şansımız olsun.

Saygılarımla
Kolay gelsin.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@Glen

- Programınızda bir yetki sistemi oluştursanız daha faydalı olmaz mı ?

- Yetkiler tablosu oluşturun ve Görüntüleme, Silme, Kopyalama, Yazıcından çıktı alma, Ekleme gibi veritabanına yönelik işlemleri kişi yetkileri bazında kiliyleyip, projenizde oturum açmış kişilerin yetki sınırlarına göre bu işlemleri yapmadan sorgulayıp ona göre RAISERROR üreterek bu işlemengel koyabilir veya izin verebilirsiniz.

- Bu işleri yine storedprocedure içerisinde kullanıcı kodunu ve yetkilerini kontrol ederek yapabilirsiniz. Böylece yine istediğiniz şekilde veritabanı katmanında işi çözmüş olursunuz.
Resim
Resim ....Resim
Glen
Üye
Mesajlar: 277
Kayıt: 12 Eki 2005 11:58

Mesaj gönderen Glen »

mrmcop yazdı:@Glen

- Programınızda bir yetki sistemi oluştursanız daha faydalı olmaz mı ?

- Yetkiler tablosu oluşturun ve Görüntüleme, Silme, Kopyalama, Yazıcından çıktı alma, Ekleme gibi veritabanına yönelik işlemleri kişi yetkileri bazında kiliyleyip, projenizde oturum açmış kişilerin yetki sınırlarına göre bu işlemleri yapmadan sorgulayıp ona göre RAISERROR üreterek bu işlemengel koyabilir veya izin verebilirsiniz.

- Bu işleri yine storedprocedure içerisinde kullanıcı kodunu ve yetkilerini kontrol ederek yapabilirsiniz. Böylece yine istediğiniz şekilde veritabanı katmanında işi çözmüş olursunuz.
İlk oncelikle teşekkür ederim cevabınız için ancak. benim tam olarka bahsettigim bu değil yani kayıt kilitleme işlemi bir kişi bir kayıt üstünde işlem yaparken diğer kişinin o kaydı değiştirememesi.. Table nesnesi kullaninca sanirim bu yapilabiliyor ancak benim de table nesnesi kullanmak işime gelmiyor cünkü ben query ile stored procedureleri execute ederek bir takim kayitlari yapiyorum.. Yani kisacasi bir örnek veriyim..

Bir personel kaydı mesela..
Personelin nüfus bilgilerinin içinde atıyorum İl seçililiyor, departman seçiliyor ( bu il ve departmanlar hep daha önce kaydedilmiş bilgilerin seçilmesi yani departmanlar ve iller tablosundan il ve departman seçimi yapılıyor).

Kaydet butonuna bastığımda procedure e gerekli bilgiler gonderiliyor ve execute ediliyor. Procedure 'ün içinde ilk once seçili il'in hala olup olmadığı, seçilen departmanın hala durup durmadigi (yani silinip silinemdiği ) kontrol ediliyor ve herşey tamamsa kayıt yapılıyor. Yani o yuzden aklim karıştı birazcık..

@pro_imaj öneriniz için teşekkür ederim ancak kısa yazılınca da maalesef anlatılmak istenilen tam olarak karşı tarafa aktarılamıyor, en azından ben aktaramıyorum. Yine de sağolun öneriniz için.
Glen
Üye
Mesajlar: 277
Kayıt: 12 Eki 2005 11:58

Mesaj gönderen Glen »

arkadaslar hala bir cozum bulamadim :(

" SELECT * FROM TABLO WITH LOCK " gibi bir kullanim var bu kullanimi ayrintili bir $ekilde aciklayabilecek biri var mi acaba..

Teşekkürler
Cevapla