delphi identity değeri yakalama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
mahir
Üye
Mesajlar: 82
Kayıt: 11 Mar 2008 12:13

delphi identity değeri yakalama

Mesaj gönderen mahir »

benim şu şekilde sp üm var .
ALTER PROCEDURE [dbo].[kayitekle] (@ad varchar(25), @soyad varchar(25))
AS
INSERT INTO kayit (ad, soyad) VALUES (@ad,@soyad) select @@identity as yeni
return

ben bu sp yi TSQLStoredProc ile çağırıyorum. ve kodların şöyle

//
x:integer;

sp.ParamByName('@ad').AsString:=edad.text;
sp.ParamByName('@soyad').AsString:=edsoy.text;
sp.ExecProc; // buraya kadar çalışıyor.
x:= sp.FieldByName('yeni').asinteger ;

benim yapmak istediğim geriye dönen identity değerini bir değişkene aktarmak

x integer değişkenine aktaramıyorum. forumlarda cok araştırdım hep sql kısmını bahse almışlar. geriye dönen değeri bir değişkene aktarmam lazım yardım larınızı bekliyorum . 2 gündür gezmediğim forum kalmadı ama hala bulamadım
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Re: delphi identity değeri yakalama

Mesaj gönderen adelphiforumz »

Merhabalar

aynı soruyu ben 29 Nisanda MS SQL SERVER kısmında "parametre döndürme hatası" başlığı altında sormuştum
orada verilen cevaplar işini görecektir.
yinede halledemezsen yaptığım örnekten bir kod gönderebilirim.
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Re: delphi identity değeri yakalama

Mesaj gönderen adelphiforumz »

ayrıca işin asıl kısmı delphi tarafında
sp.ExecProc;
yerine
Sp.open
kullanmanda yatıyor bilgin olsun
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
akdatilla
Üye
Mesajlar: 292
Kayıt: 02 Nis 2006 06:04
Konum: Antalya

Re: delphi identity değeri yakalama

Mesaj gönderen akdatilla »

Merhaba
SP'ye değer döndüren bir parametre ekle. Sp'yi çalıştırdıktan sonra çıkış parametresini oku ve gerekli işler için kullan.

Kod: Tümünü seç

ALTER PROCEDURE [dbo].[kayitekle] (@ad varchar(25), @soyad varchar(25),@NEWREC INT OUTPUT) 
AS 
BEGIN
	INSERT INTO kayit (ad, soyad) VALUES (@ad,@soyad) 
	select @NEWREC=@@identity
	return
END

Kod: Tümünü seç

sp.ParamByName('@ad').AsString:=edad.text;
sp.ParamByName('@soyad').AsString:=edsoy.text;
sp.ExecProc; // buraya kadar çalışıyor.
x:= sp.ParamByName('@NEWREC').asinteger ;
mahir
Üye
Mesajlar: 82
Kayıt: 11 Mar 2008 12:13

Re: delphi identity değeri yakalama

Mesaj gönderen mahir »

mehabalar. sql kısmını şoyle yaptım

Kod: Tümünü seç

ALTER PROCEDURE     [dbo].[kayitekle]    (@ad  varchar(25),    @soyad  varchar(25), @id int output)  
  AS 
INSERT INTO kayit (ad, soyad)  VALUES (@ad,@soyad) select @id= @@identity
delphi kısmını şöyle yaptım

Kod: Tümünü seç

sp.params.ParamByName('@ad').AsString:=edad.text;
  sp.params.ParamByName('@soyad').AsString:=edsoy.text;
  EDNO.TEXT:=sp.params.ParamByName('@id').AsString;
  sp.ExecProc;
sorunsuz calışıyor ama bir önceki kayıtın id sini dönderiyor. birde TSQLStoredProc de parametre için EXECPROC iyerine open kullanamıyosun. hata alıyosun.
yukarıdaki kodlar calıştığında ilk önce sıfır değerini gönderiyo. tekrar çalıştığında bir önceki kaydın id sini dönderiyor. adelphiforumz siz nasıl yaptınız??
akdatilla
Üye
Mesajlar: 292
Kayıt: 02 Nis 2006 06:04
Konum: Antalya

Re: delphi identity değeri yakalama

Mesaj gönderen akdatilla »

Kod: Tümünü seç

sp.params.ParamByName('@ad').AsString:=edad.text;
  sp.params.ParamByName('@soyad').AsString:=edsoy.text;
  EDNO.TEXT:=sp.params.ParamByName('@id').AsString;
  sp.ExecProc;
kardeş, yukarıdaki gibi yaparsan EDNO.Text boş veya son çalıştırdığın execproc'un değerini alır.
@id bir çıkış parametresi.
execproc komutu sp'yi çalıştırır. Sana bir örnek de gönderdim,
sp'yi çalıştırmadan nasıl çıktı almayı düşünüyorsun.
Benim gönderdiğim kod ile ilgili bir sıkıntı varsa onu söyle.
mahir
Üye
Mesajlar: 82
Kayıt: 11 Mar 2008 12:13

Re: delphi identity değeri yakalama

Mesaj gönderen mahir »

abi kodlar çalışıyo ama ilk değer olarak sıfır dönüyor. tekrar sp yi çalıştırdığımda bir önceki kaydın id si dönüyo.
mahir
Üye
Mesajlar: 82
Kayıt: 11 Mar 2008 12:13

Re: delphi identity değeri yakalama

Mesaj gönderen mahir »

bu şekilde denediğimdede aynı sonuç . son kaydın id sinde önce sıfır değerinin dönmesi çok ilginç

Kod: Tümünü seç

 ALTER procedure   [dbo].[yeniID]  (@id int output) as
 select  @id= max(id)  from kayit
mahir
Üye
Mesajlar: 82
Kayıt: 11 Mar 2008 12:13

Re: delphi identity değeri yakalama

Mesaj gönderen mahir »

sorunu çözdüm

x:=yeniID.paramByName('@id').asinteger;
YeniId.ExecProc;
edno.text:=yeniID.paramByName('@id').asstring;
showmessage(yeniID.paramByName('@id').asstring);
Cevapla