Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Son id
#1
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;
Hayat bazen güzel olabiliyor.
Cevapla
#2
(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?


 
        Close;
            SQL.Clear;
            SQL.Add('Select MAX(PLID) AS PLID From SIRAPIS');
            Prepared := True;
            Open;
            SonId := FieldByName('PLID').AsInteger + 1;

Select count(*), PLID from SIPARIS group by PLID  işinizi görür mü? (Satır yoksa 0 gelir)
Cevapla
#3
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;
Cevapla
#4
Merhaba,
Alternatif bir çözüm yolu;
  if VarIsNull(FieldByName('PLID').Value) then
    SonId := 0 + 1
 else
   SonId := FieldByName('PLID').AsInteger + 1;
DelphiCan'dır!
Cevapla
#5
Bonus: Eğer Pascal tarafında işlem yapılacaksa RecordCount kontrolü sağlanabilir.
Cevapla
#6
open dan sonra recordcount>0 kontrolü yaparsanız sorun çözülür..
Cevapla
#7
Cevaplar için teşekkürler,
 
bir çok kodu test ettim (coalesce) şimdilik sorun çıkmadı
Hayat bazen güzel olabiliyor.
Cevapla
#8
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
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#9
(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;
YouTube Delphi Tips
"Mantıklı adam kendini dünyaya uyarlar; mantıksız adam ise dünyayı kendine uydurmakta inat eder. Bu nedenle, tüm ilerleme o inatçı adama bağlıdır." - George Bernard Shaw
WWW
Cevapla
#10
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.
Cevapla




Konuyu Okuyanlar: 1 Ziyaretçi