Bu ilk mesajım olacak, çünkü programlama ile fazla ilgilenmiyorum fakat çalıştığım kurumda delphi (7.0) ile yazılmış bir program var. Bunun üzerindeki sıkıntıyı aşmak bana düştü. Şöyleki;
Delphi'de VT işlemleri ADODB kullanılarak yapılmış. SQL 2000 üzerindeki bir StokFis tablosuna yeni bir kayıt ekleniyor. StokFis tablosundaki FisID değeri Auto Increment. Bu tabloya değerler post edildikten sonra StokDetay tablosuna fişdeki herbir kalem insert ediliyor. StokDetay tablosuna insert edilirken bir önceki post işleminde elde edilen FisID değeri de bu tablodaki her bir kayıt için ekleniyor. Kodlama şu şekilde.
DataMod.StokFis.Open;
DataMod.StokFis.Insert;
DataMod.StokFisAlan01 := Değer;
DataMod.StokFisAlan02 := Değer;
...
DataMod.StokFis.Post;
DataMod.StokFisDetay.Open;
DataMod.StokFisDetay.Insert;
While Not .... Do
Begin
DataMod.StokFisDetayAlan01 := Değer;
DataMod.StokFisDetayAlan02 := Değer;
...
DataMod.StokFisDetayFisID := DataMod.StokFisFisID;
End;
Anladığım kadarıyla olması gereken yöntem bu. Zaten bugüne kadar bir problemimiz yoktu. Taki ben SQL 2000 üzerinde, StokFis tablosuna insert edildiği zaman bu tablodaki bazı değerleri başka bir tabloya (StokRapor) insert edecek bir Trigger yazana kadar.

Bu trigger'ı aktif ettikten sonra şöyle bir sorunla karşılaştım. İlk post işleminden sonra (StokFis) trigger çalıştığı için, ikinci post işlemindeki (StokFisDetay) DataMod.StokFisFisID; değeri bana ilk post işlemindeki FisID vermek yerine Trigger'ı insert ettiğim StokRapor tablosundaki id (AI) değerini vermeye başladı. Dolayısıyla StokFisDetay tablosundaki FisID'ler yanlış değerlere sahip oldu. Şöyle bir tahmin yürüttüm. İlk post işleminden sonra trigger devreye girince, bu datatable'daki cursor'un yeri değişti. Yani trigger'ı insert ettiğim tablodaki id değeri 5 ise FisID değerim de 5 oldu. Bu biraz saçma gelebilir ama tüm bulgularım bu yönde. Çünkü ben trigger'ı doğal olarak SQL üzerinde yazdım ve düzgün çalışıyor. Tablolarımda bu FisID değerlerinin yanlış olduğunu görünce önce Trigger'ımı inceledim fakat bir terslik bulamadım. Zaten trigger, StokRapor tablosuna istediğim değerleri insert ediyor. Ben de delphi kodlarını inceledim ve böyle bir kanıya vardım. Tabi böyle olduğunu iddia etmiyorum. Sorunu şöyle çözebileceğimi düşündüm.
İlk StokFis tablosuna post ettiğim anda FisID edeğerini bir değişkene atarsam ikinci post işlemine başlamadan önce cursor'un yeri değişmeden o kayıt için FisID değerini saklamış olurum. Fakat o anki FisID değerini sağlıklı bir şekilde nasıl alabileceğimi çözemedim. Aynı tabloyu MAX(FisID) ile select edersem, başka bir client üzerinden o anda kayıt eklenirse onun değeri gelir mi acaba diye düşünüyorum. Yada SELECT IDENT_CURRENT('StokFis') desem bana AI ile artan değeri verir mi? Kısacası, post ettiğim anda tablodaki FisID hangi değeri aldı bunu nasıl tesbit ederim.
Umarım çok karmaşık anlatmamışımdır. Şimdiden ilgilenecek arkadaşlara teşekkürlerimi sunarım.