sp hakkında

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
ZeynelAbidin
Üye
Mesajlar: 69
Kayıt: 02 Oca 2009 09:03

sp hakkında

Mesaj gönderen ZeynelAbidin »

Arkadaşlar benim aşağıda yazdığım kod çalışıyor.Ancak ben bu işlemi firebird sp ile yapmak istiyorum.Burada öğrenmek istediğim firebird gönderdiğim değişkenlere sql cümlesi ekleyebiliyormuyum.
mesela comboxta seçili ögem 0 ise firmaya göre arama işlemi yaptırıyorum ve ben bunu

Kod: Tümünü seç

if cb_kriter.ItemIndex=0 then sql.Add('WHERE UPPER(FIRMA.KODU)  LIKE UPPER('+quotedstr('%'+ed_ara.Text+'%')+')')
şeklinde yapıyorum.Sp içinde bunu bu şekilde yapabilirmiyim veya gönderdiğim combobox değerine göre bütün sql cümlesini sıfırdanmı yazmalıyım.Sıfırdan yazacak olursam aynı sql sadece where kısmı değişik olacak şekilde defalarca yazmam gerek buda bana mantıklı gelmiyor.Veya ne yapmalıyım işin içinden çıkamdım yardımcı olursanız sevinirim.

Kod: Tümünü seç

  with QrKargoListe do
  begin
    if active then
    begin
      sql.Clear;
      sql.Add('SELECT FIRMA.KODU,FIRMA.UNVAN,KARGO.TANIM,KARGO.TUR,KARGO.GOND_TAR,KARGO.GOND_ID,');
      sql.Add('KULLANICI.AD_SOYAD,KARGO.KAR_FIR_ID,KARGO.TEYIT_TAR,KARGO.TEYIT_ID,');
      sql.Add('KISI.AD_SOYAD,ADRES.TANIM FROM KARGO');
      sql.add('LEFT OUTER JOIN FIRMA ON KARGO.FIRMA_ID=FIRMA.FIRMA_ID');

      sql.add('LEFT OUTER JOIN KULLANICI ON KARGO.GOND_ID=KULLANICI.ID');
      sql.add('LEFT OUTER JOIN KISI ON KARGO.TEYIT_KISI_ID=KISI.KISI_ID');
      sql.add('LEFT OUTER JOIN ADRES ON KARGO.ADRES_ID=ADRES.ADRES_ID');

      if cb_kriter.ItemIndex=0 then sql.Add('WHERE UPPER(FIRMA.KODU)  LIKE UPPER('+quotedstr('%'+ed_ara.Text+'%')+')')
      else if cb_kriter.ItemIndex=1 then sql.Add('WHERE UPPER(FIRMA.UNVAN)  LIKE UPPER('+quotedstr('%'+ed_ara.Text+'%')+')')
      else if cb_kriter.ItemIndex=2 then sql.Add('WHERE UPPER(KARGO.TANIM)  LIKE UPPER('+quotedstr('%'+ed_ara.Text+'%')+')')
      else if cb_kriter.ItemIndex=3 then sql.Add('WHERE KARGO.TUR='+inttostr(RdTur.ItemIndex))
      else if cb_kriter.ItemIndex=4 then sql.Add('WHERE KARGO.GOND_TAR BETWEEN '+quotedstr(datetostr(DtTar1.Date))+' AND '+quotedstr(datetostr(DtTar2.Date)))
      else if (cb_kriter.ItemIndex=5)and(CbPersonel.Text<>'') then sql.Add('WHERE KARGO.GOND_ID='+inttostr(CbPersonel.EditValue))
      else if (cb_kriter.ItemIndex=6)and(CbKargo.Text<>'') then sql.Add('WHERE KARGO.KAR_FIR_ID='+inttostr(CbKargo.EditValue))
      else if cb_kriter.ItemIndex=7 then sql.Add('WHERE KARGO.TEYIT_TAR BETWEEN '+quotedstr(datetostr(DtTar1.Date))+' AND '+quotedstr(datetostr(DtTar2.Date)))
      else if (cb_kriter.ItemIndex=8)and(CbPersonel.Text<>'') then sql.Add('WHERE KARGO.TEYIT_ID='+inttostr(CbPersonel.EditValue));
      open;
    end;
  end;
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: sp hakkında

Mesaj gönderen aslangeri »

s.a.
sp ile rahatlıkla yapabilirsiniz.
where kısmını şu tarz bişey yaparsanız parametreyi de halletmiş olursunuz.

Kod: Tümünü seç

WHERE 
(
(UPPER(FIRMA.KODU)  LIKE UPPER(:ip_firmakodu))
or (:ip_firmakodu='')
)
böylelikle parametreyi boş gönderirsen o alana göre filitreleme olmaz.

kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: sp hakkında

Mesaj gönderen freeman35 »

Kod: Tümünü seç

......
AS
DECLARE VARIABLE SQL_MAIN_ VARCHAR(750) CHARACTER SET WIN1254;
DECLARE VARIABLE SQL_MAIN_WHR_ VARCHAR(254) CHARACTER SET WIN1254;
BEGIN
SQL_MAIN_='SELECT
       MST.MAK_SERI,
       MST.MAK_SIRA,
       MST.MAK_NO,
       MST.MAK_TARIH,
.........
    FROM MASTER_BLASTER MST
';
SQL_MAIN_WHR_ =' WHERE(MST.ID NOT IN(34,41,42) )';
 IF (:CARI_ID__     IS NOT NULL )THEN SQL_MAIN_WHR_ = SQL_MAIN_WHR_ || ' AND MST.CARI_ID=' || :CARI_ID__;
......
 FOR
   EXECUTE STATEMENT SQL_MAIN_ || SQL_MAIN_WHR_
   INTO :...............
Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
ZeynelAbidin
Üye
Mesajlar: 69
Kayıt: 02 Oca 2009 09:03

Re: sp hakkında

Mesaj gönderen ZeynelAbidin »

arkdaşlar dediğinizi yapmaya çalışıyorum.Ancak 1.kriter için kodum çalışıyor 2.kriter için in_edara değişkenime mesela 'abidin' değerini aktardığım zaman

Column Unknown abidin.

hatası ile karşılaşıyorum.Bu hata ile İb expertte karşılayorum(delphi de denemedim).Nedendir acaba

Kod: Tümünü seç

  sqltext='select tanim.tanim4,kullanici.ad_soyad,firma.kodu, firma.unvan,firma.sahis,
    kisi.ad_soyad,adres.tanim,randevu.tarih,randevu.saat,randevu.tanim,randevu.uyari,
    firma.tel1, firma.tel2,firma.fax,firma.il,firma.ilce from  randevu
    left outer join tanim on 3=tanim.id
    left outer join kullanici on randevu.pers_id=kullanici.id
    left outer join firma on randevu.firma_id=firma.firma_id
    left outer join kisi on randevu.kisi_id=kisi.kisi_id
    left outer join adres on randevu.adres_id=adres.adres_id';

    if (:in_kriter=0) then sqltext=sqltext||' where randevu.pers_id='||:in_pers;
    if (:in_kriter=1) then sqltext=sqltext||' where firma.kodu='||:in_edara;  
  for
    EXECUTE STATEMENT sqltext
    into :out_tip, :out_persadi,:out_frkodu,:out_frunvan,:out_sahisadi,:out_gorkisi,
    :out_randadres,:out_tarih,:out_saat,:out_Konu,:out_uyar,:out_tel1,:out_tel2,
    :out_fax,:out_il,:out_ilce
  do
spyide bu şekilde çağırıyorum

Kod: Tümünü seç

select * from GUNDEMOLUSTUR(1,'0','0',0,'abidin',0,0,0,0)
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: sp hakkında

Mesaj gönderen unicorn64 »

alan string ve sql i de kendin oluşturduğun için tırnak işareti eksik kalıyor....
ya sql de in_edara yı eklediğin yerin başına ve sonuna tırnak işareti koy yada parametreyi quotedstring le gönder...
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
ZeynelAbidin
Üye
Mesajlar: 69
Kayıt: 02 Oca 2009 09:03

Re: sp hakkında

Mesaj gönderen ZeynelAbidin »

Yazdığınızı eve gidince uygulayacağım.Peki ben firebirdde kullaanbileceğim komutları toplu halde görebileceğim bir makale,yazı vey adöküman varmı.Ben aradım bulamadım.Birde bu konuda yardımcı olursanız.Şimdiden teşekkürler.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: sp hakkında

Mesaj gönderen aslangeri »

forumda firebird forumunun ana sayfasında var hocam dikkatli bak. :wink:
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Cevapla