İlişkili Tablolarda Transaction

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
ozkandanaci
Üye
Mesajlar: 8
Kayıt: 07 Mar 2008 12:54

İlişkili Tablolarda Transaction

Mesaj gönderen ozkandanaci »

arkadaşlar herkese kolay gelsin
mesela benim iki tablom var.

birisi musteriler -> alanlar -->(id, adi)
ikincisi hareketler -> alanlar --> (id, musteri_id, miktar)
bu iki tablo birbiriyle ilişkili
Primary -> musteriler tablosunun id alanı
Foreign key -> hareketlerin musteri_id alanı

diyorum ki

birinci query penceresi----------------------------------------------
BEGIN TRAN
INSERT INTO musteriler (adi) VALUES ( 'ali veli' )
--commit ETMEDİM daha sonra olay tamamlanınca edilir...
------------------------------------------------------------------------

mesela buradan şimdiki musteriler tablosuna kayıtta -13- id değeri üretildi ama bu kayıt commit edilmedi ( Phantom Record )
ve buna bağlı olan müşteriler tabloma arkasından kayıt etmeye çalışıyorum. ama üstteki işlemden dönen -13- id değerini alacak
Yani musteriler tablosuna en son yaptığımız kayda ait kayıt , hareket tablosuna girmek istiyorum.(ama transaction ile birlikte )
(aslında programda müşteriler formundan sonra açılan hareket formunda bekleme olacak .
belki 10 dk belki 1 sa sonra müşteri commit edilip arkasından da hareketler commit olacak)

ikinci query penceresi ---------------------------------------------
BEGIN TRAN
INSERT INTO HAREKET ( musteri_id , miktar ) VALUES(13,10)
-----------------------------------------------------------------------

şimdi burası çakılıyor.

yukarısını(musteri tablosunu) commit eder etmez buranın işlemi de bitiyor.
ama olay o değil.

oradaki Phantom Record daki 13 değerini nasıl gördürüp transaction içinde hareketler tablosunu kaydettirebiliriz.

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED . Denedim olmadı.

yapabilen arkadaş paylaşırsa çok sevinirim.
çünkü çok büyük bir problemim haline geldi.
herkese iyi çalışmalar...
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: İLİŞKİLİ TABLOLARDA TRANSACTION

Mesaj gönderen aslangeri »

s.a.
ben genelde sp ile çözüyorum.
müşterinin bilgilerini ve hareket bilgilerini sp ye gönderiyorum. eğer müşteri id si olarak -1 göndermişsem yeni müşteri kaydı açıp id sini hareketlere veriyorum.
eğer müşteri id ye -1 den farklı ise zaten kayıtlı müşteri deyip sadece id lerini yazdırıyorum.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
akdatilla
Üye
Mesajlar: 292
Kayıt: 02 Nis 2006 06:04
Konum: Antalya

Re: İLİŞKİLİ TABLOLARDA TRANSACTION

Mesaj gönderen akdatilla »

ben bu gibi işlemlerde transaction kullanmayı tavsiye etmiyorum.
Bence kayıtları transaction kullanmadan tablolara ekle. Henüz kayıtları tamamlanmaış bilgileri ek bir alan kullanarak işaretle.
Örnek olarak HAREKET tablona NEWREC VARCHAR(1) şeklinde bir kolon ekle. Kayıtları tamamlanmamış olan satırları "E", kayıtları tamamlanmış olan satırları "H" olarak işaretle. Rapor vb işlemlerde HAREKET tablosundan okuma yaparken sürekli olarak ISNULL(NEWREC,"H")="H" şartı ile sorgula.
ozkandanaci
Üye
Mesajlar: 8
Kayıt: 07 Mar 2008 12:54

Re: İLİŞKİLİ TABLOLARDA TRANSACTION

Mesaj gönderen ozkandanaci »

arkadaşlar açıklamalarınız için çok teşekkür ediyorum.
iki cevaptada anlatılmak istenen aynı.
demekki bu tarz çalışmak gerekiyor transaction gerektiren işlemler için.
Cevapla