Eklediğim kaydın Auto Increment ile aldığı değer.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
unbelieving
Üye
Mesajlar: 4
Kayıt: 07 Eki 2008 09:07

Eklediğim kaydın Auto Increment ile aldığı değer.

Mesaj gönderen unbelieving »

Foruma selamlar,

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.
orhancc
Üye
Mesajlar: 585
Kayıt: 24 Ağu 2010 02:14
Konum: İstanbul / Kadıköy
İletişim:

Re: Eklediğim kaydın Auto Increment ile aldığı değer.

Mesaj gönderen orhancc »

Tablonun son identini bu şekilde alabilirsin.

Kod: Tümünü seç

SELECT IDENT_CURRENT(‘tablename’)
unbelieving
Üye
Mesajlar: 4
Kayıt: 07 Eki 2008 09:07

Re: Eklediğim kaydın Auto Increment ile aldığı değer.

Mesaj gönderen unbelieving »

Teşekkürler cevap için. Peki bu select için yeni bir ado bağlantısı mı kurmam gerekiyor. delphi içinde post işleminden hemen sonra ne şekilde kullanabilirim. Ayrı bir bağlantı mı kuracağım?
destiny24
Üye
Mesajlar: 131
Kayıt: 22 Tem 2010 09:42

Re: Eklediğim kaydın Auto Increment ile aldığı değer.

Mesaj gönderen destiny24 »

post işleminden hemen sonra aynı ado yu kullanarak bunu öğrenebilirsin.Başka bir ado kullanmana gerek yok.Tabi ado aktif olarak bir yere bağlı değilse.Mesela gride
unbelieving
Üye
Mesajlar: 4
Kayıt: 07 Eki 2008 09:07

Re: Eklediğim kaydın Auto Increment ile aldığı değer.

Mesaj gönderen unbelieving »

Teşekkürler destiny24. İşte sihirli sözcük bu ama nasıl? :)

DataMod.StokFis.Son_FisID_Degerini_Ver ?

ADO bir gride bağlı değil.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Eklediğim kaydın Auto Increment ile aldığı değer.

Mesaj gönderen sabanakman »

orhancc yazdı:Tablonun son identini bu şekilde alabilirsin.

Kod: Tümünü seç

SELECT IDENT_CURRENT(‘tablename’)
Nerede lazımsa bu sorgudan gelen değeri orada kullanacaksınız. Programda kullanılacaksa direkt ADOSQL ile sorgu çalıştırın. Eğer trigger içinde bir değişken olarak lazımsa

Kod: Tümünü seç

declare @SonDeger int
SELECT @SonDeger=IDENT_CURRENT(‘tablename’)
koduyla değer @SonDeger değişkeninde elinizin altındadır artık. Bu fonksiyon değerini değişkene atmadan da kullanabilirsiniz.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
unbelieving
Üye
Mesajlar: 4
Kayıt: 07 Eki 2008 09:07

Re: Eklediğim kaydın Auto Increment ile aldığı değer.

Mesaj gönderen unbelieving »

Çok teşekkür ederim tüm cevaplar için. Başta da dediğim gibi delphi (programcılık) alanım değil. O yüzden olayı çözemedim. Direk ADOSQL ile sorguyu çalıştırın demişsiniz. Bunun kullanımı ile ilgili örnek bir sayfa linki gönderebilir misiniz? Biraz inceleyeyim.
Cevapla