SP de paremetre değerine göre şart yazma.

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
serkan
Üye
Mesajlar: 666
Kayıt: 10 Tem 2003 12:08
Konum: bursa

SP de paremetre değerine göre şart yazma.

Mesaj gönderen serkan »

herke kolay gelsin...

bu SP işlerine bende merak saldım en azından raporlar için yalnız biyerde takıldım forumda 3-4 arkadş daha sormuş cevapları kendime uyarlayamadım yada farklı şeyler sormuşuz..
şimdi aşağıdaki gibikendime hello word :) SP si yazdım...

Kod: Tümünü seç

begin
select max(KAYIT_ID) FROM STOKHRKT

WHERE STOKKODU=:STOKKODU
AND tarih >= :tarih1
AND  tarih <= :tarih2

into :EN_BUYUK;
  suspend;
end
stok hareket tablosunda iki tarih arasındaki kodu verilen stok kartının en büyük kayit_id değerini getiriyor..güzel problem yok...fakat kullanıcı buradaki bütün parametreleri girmek zorunda kalıyor yani stok kodunu,ilk tarihi ve son tarihi..benim istediğim kullanıcı isterse stok koduna değer yazmayabilir o zaman tüm kartlardaki en büyük kayit_id yi getirsin veya tarih leri yazmasa tüm tarihlere baksın gibi..
bunun için where kısmını nasıl yazmam gerekli acaba..

şimdiden teşekkürler
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Kod: Tümünü seç

begin 
select max(KAYIT_ID) FROM STOKHRKT 

WHERE STOKKODU= COALESCE(:STOKKODU,  STOKKODU)
AND tarih >= :tarih1 
AND  tarih <= :tarih2 

into :EN_BUYUK; 
  suspend; 
end 
COALESCE veya CASE WHEN kullanarak istediğini yapabilirsin.

Bu kod için STOKKODU parametresine NULL girersen bütün stok kodlarına bakar.
serkan
Üye
Mesajlar: 666
Kayıt: 10 Tem 2003 12:08
Konum: bursa

Mesaj gönderen serkan »

WHEN.. CASE 'ede bir örnek verilirse benim koduma göre sevinirim..

coalesce ile olmadı..stok kodu yazmadan sp çalıştırılınca null değer veriyor
En son serkan tarafından 10 Eyl 2007 12:24 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

execute statement ile de yapabilirsin.

:ara execute statement

Kolay gelsin.
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

serkan yazdı:WHEN.. CASE 'ede bir örnek verilirse benim koduma göre sevinirim..

coalesce ile olmadı..stok kodu yazmadan sp çalıştırılınca null değer veriyor
Olmayan (hatalı sonuç döndüren) SP'yi ve nasıl çağırdığını belirtir misin?
serkan
Üye
Mesajlar: 666
Kayıt: 10 Tem 2003 12:08
Konum: bursa

Mesaj gönderen serkan »

Kod: Tümünü seç

qry.Close;
qry.SelectSQL.Clear;
qry.SelectSQL.Add('select * from SP_BASIT(:STOKKODU,:TARIH1,:TARIH2) ');
qry.ParamByName('STOKKODU').AsString:=cxTextEdit1.Text;
qry.ParamByName('TARIH1').AsString:=cxDateEdit1.Text;
qry.ParamByName('TARIH2').AsString:=cxDateEdit2.Text;
QRY.Open;
bu şekilde çağırıyorum delphi içinden cxtextedit1 boş ise sonuçta null oluyor..
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

qry.ParamByName('STOKKODU').AsString:=cxTextEdit1.Text;

yerine

qry.ParamByName('STOKKODU').Value:=NULL;

dersen istediğin olur.
serkan
Üye
Mesajlar: 666
Kayıt: 10 Tem 2003 12:08
Konum: bursa

Mesaj gönderen serkan »

eyvallah kardeş..

Kod: Tümünü seç

qry.Close;
qry.SelectSQL.Clear;
qry.SelectSQL.Add('select * from SP_BASIT(:STOKKODU,:TARIH1,:TARIH2) ');
if cxTextEdit1.Text='' then
qry.ParamByName('STOKKODU').Value:=NULL
else
qry.ParamByName('STOKKODU').AsString:=cxTextEdit1.Text;
if cxDateEdit1.Text='' then
qry.ParamByName('TARIH1').Value:=NULL else
qry.ParamByName('TARIH1').AsDate:=cxDateEdit1.Date;
if cxDateEdit2.Text='' then
qry.ParamByName('TARIH2').Value:=NULL else
qry.ParamByName('TARIH2').AsDate:=cxDateEdit2.Date;
QRY.Open;
Cevapla