![]() |
|
Son id - Baskı Önizleme +- Delphi Can (https://www.delphican.com) +-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3) +--- Forum: Genel Programlama (https://www.delphican.com/forumdisplay.php?fid=6) +--- Konu Başlığı: Son id (/showthread.php?tid=1654) |
Son id - Dostk - 11-12-2017 Merhaba; Aşağıdaki kodlarla databasedeki en son kaydedilen id numarasını alabiliyorum, ancak databaseye hiç kayıt yapılmamışsa hata veriyor bu durumu nasıl çözebilirim?
Close;
SQL.Clear;
SQL.Add('Select MAX(PLID) AS PLID From SIRAPIS');
Prepared := True;
Open;
SonId := FieldByName('PLID').AsInteger + 1;
Cvp: Son id - Abdullah ILGAZ - 11-12-2017 (11-12-2017, Saat: 13:05)Dostk Adlı Kullanıcıdan Alıntı: Merhaba; Aşağıdaki kodlarla databasedeki en son kaydedilen id numarasını alabiliyorum, ancak databaseye hiç kayıt yapılmamışsa hata veriyor bu durumu nasıl çözebilirim? Select count(*), PLID from SIPARIS group by PLID işinizi görür mü? (Satır yoksa 0 gelir) Cvp: Son id - meko - 11-12-2017 coalesce fonksiyonu ile dener misiniz?
Close;
SQL.Clear;
SQL.Add('Select coalesce(MAX(PLID),0) AS PLID From SIRAPIS');
Prepared := True;
Open;
SonId := FieldByName('PLID').AsInteger + 1;
Cvp: Son id - Fesih ARSLAN - 11-12-2017 Merhaba, Alternatif bir çözüm yolu; if VarIsNull(FieldByName('PLID').Value) then
SonId := 0 + 1
else
SonId := FieldByName('PLID').AsInteger + 1;
Son id - Abdullah ILGAZ - 11-12-2017 Bonus: Eğer Pascal tarafında işlem yapılacaksa RecordCount kontrolü sağlanabilir. Son id - mcuyan - 11-12-2017 open dan sonra recordcount>0 kontrolü yaparsanız sorun çözülür.. Cvp: Son id - Dostk - 12-12-2017 Cevaplar için teşekkürler, bir çok kodu test ettim (coalesce) şimdilik sorun çıkmadı Son id - adelphiforumz - 12-12-2017 create Function [dbo].[fnx_Get_MaxID] () Returns int As Begin Declare @SonNo int Select @SonNo = Max(ID) From Satis If @SonNo = 0 Or @SonNo Is Null Set @SonNo = 1 Else Set @SonNo = @SonNo + 1 Return @SonNo End Cvp: Son id - uparlayan - 16-12-2017 (12-12-2017, Saat: 18:54)adelphiforumz Adlı Kullanıcıdan Alıntı:create Function [dbo].[fnx_Get_MaxID] () Returns int As Begin Declare @SonNo int Select @SonNo = Max(ID) From Satis If @SonNo = 0 Or @SonNo Is Null Set @SonNo = 1 Else Set @SonNo = @SonNo + 1 Return @SonNo End Merhaba, Bir UDF'nin içinde SELECT ile tablodan veri çekmek performans açısından çok sakıncalı. Bunun yerine aşağıdaki fonksiyonu doğrudan kullanmak performans açısından darboğaza düşmenize engel olur; SELECT IDENT_CURRENT ( 'SIRAPIS' ) as ID Eğer Tablo veritabanında varsa hiç bir zaman NULL değeri üretmez. Dolayısıyla ISNULL gibi uğraşılara girmenize gerek kalmaz. Bunu aşağıdaki şekilde Delphi üzerinde şöyle de kullanabilirsiniz;
Close;
SQL.Clear;
SQL.Add('SELECT IDENT_CURRENT ( ''SIRAPIS'' ) as ID');
//Prepared := True;
Open;
SonId := FieldByName( 'ID' ).AsInteger + 1;
Son id - dilo - 17-12-2017 Bence gözden kaçan mantık hatası var, dbye yeni bir kayıt ekledin sonra bu kayıtı sildin, bu kodlarda en son idnin numarasını alabilirsin. dbye yeni bir kayıt eklesen bile asla silinen idnin numarası verilmeyeceğinden paylaşılan bu kodlarla bir sonraki idnin numarasını hiç bir zaman doğruyu göstermez. |