Tüm Platformlar için Hızlı Uygulama Geliştirme Kitabı... Delphi

Konuyu Paylaş : facebook gplus twitter

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ı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba; 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)
{ talk is cheap show me the code. }
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;
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#5
Bonus: Eğer Pascal tarafında işlem yapılacaksa RecordCount kontrolü sağlanabilir.
{ talk is cheap show me the code. }
Cevapla
#6
open dan sonra recordcount>0 kontrolü yaparsanız sorun çözülür..
WWW
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ı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
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;
Peyami Safa: "Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır". 
Can Yücel: "Toprak gibi olmalısın! Ezildikçe sertleşmelisin! Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı."
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 Paylaş : facebook gplus twitter





Konuyu Okuyanlar: 1 Ziyaretçi