Where-IN sorgusunda parametre

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
eyalin
Üye
Mesajlar: 126
Kayıt: 09 May 2005 08:08

Where-IN sorgusunda parametre

Mesaj gönderen eyalin »

Merhaba,

Bir Sp içinde aşağıdaki gibi bir sorgum var.

Kod: Tümünü seç

select * from tablo where id in (:param)
Bu sorguda dizi olarak parametreyi nasıl gönderebilirim?

Teşekkürler.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7587
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Re: Where-IN sorgusunda parametre

Mesaj gönderen mussimsek »

Merhaba,

parametre ile yapamazsınız. Kendiniz SQL'i oluşturmalısınız.

SQL.Clear;
SQL.Add('select * from tablo where id in (' + QuotedStr(InIcindekiDegerler) + ')');
...

gibi. Tabi aradaki virgülleri vs.de ayarlamalısınız.

Kolay gelsin.
eyalin
Üye
Mesajlar: 126
Kayıt: 09 May 2005 08:08

Re: Where-IN sorgusunda parametre

Mesaj gönderen eyalin »

Mustafa Bey,

Cevap için teşekkür ederim.

İyi çalışmalar.
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: Where-IN sorgusunda parametre

Mesaj gönderen esistem »

Kod: Tümünü seç

create procedure sorgu (liste varchar(1024)) 
as
begin
  for execute statement
    SELECT * from TABLO where ID IN ('|| liste ||') into ....
  do begin
     suspend;
  end
end
şeklinde yapabilirsiniz.
kullanımı;

Kod: Tümünü seç

SELECT * FROM sorgu('1, 2, 12, 45, 75, 45')
eyalin
Üye
Mesajlar: 126
Kayıt: 09 May 2005 08:08

Re: Where-IN sorgusunda parametre

Mesaj gönderen eyalin »

Maalesef bu şekilde denediğimde "data type conversion" hatası alıyorum.
wr1924
Üye
Mesajlar: 1
Kayıt: 10 Tem 2009 10:24

Re: Where-IN sorgusunda parametre

Mesaj gönderen wr1924 »

create procedure sorgu (liste varchar(1024))
returns (
FIRMAADI VARCHAR(500))
as
begin
for execute statement
'SELECT FRM_UNVAN1 from tablo where FRM_KOD IN ('|| liste ||')' into :FIRMAADI
do begin
suspend;
end
end
ikra
Üye
Mesajlar: 900
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: Where-IN sorgusunda parametre

Mesaj gönderen ikra »

firebird tarafinda parametreyi varchar olarak ayarlayin.

delphi tarafinda bir stringlist olusturun. olusturdugunuz stringlist'in icerisine tüm id'leri MyStringList.Add(Value) seklinde ekleyin.
gönderdiginiz parametreyi stringlist.commatext olarak verin.
aradaki virgülleri kendisi olusturacaktir.

egerki baslangic ve bitis arasindaki degerler birbirini takip eden degerler ise, sorgunuzu

Kod: Tümünü seç

select * from tablo where id > parametre1 and id < parametre2
seklinde de yapabilirsiniz.
bu durumda baslangic ve bitis degerini iki ayri parametre olarak göndermeniz gerekecektir.

kolay gelsin.
kıdemsiz üye
eyalin
Üye
Mesajlar: 126
Kayıt: 09 May 2005 08:08

Re: Where-IN sorgusunda parametre

Mesaj gönderen eyalin »

Cevaplar için teşekkür ederim.

Sayın İkra Başlangıç,Bitiş değerleri birbirini takip etmiyor.Bu durumda stringlist oluşturduğumda ,firebird tarafında sorgum nasıl olmalı?
ikra
Üye
Mesajlar: 900
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: Where-IN sorgusunda parametre

Mesaj gönderen ikra »

Kod: Tümünü seç

for select isim, soyisim from tablo where id in (:parametre) into :isim, :soyisim do
Suspend;
Input parametresi olusturunuz ve türünü varchar olarak belirleyiniz. Daha sonra sorgunuzu yukaridaki sekilde kendinize göre uyarlayiniz. Delphi tarafinda ise

Kod: Tümünü seç

procedure doselect;
Begin
  With tstringlist.create do
  Try
    Add('1');
    Add('2');
    Query.sql.text := 'select * from sorgu('+quotedstr(commatext)+')';
    Query.open;
  Finally
    Free;
  End;
End;
Seklinde sorgunuzu calistiriniz.
Su an bilgisayar basinda olmadigim icin deneyemiyorum fakat yarin unutmaz isem Biiznillah test edip sonucu yazmaya calisirim.
kıdemsiz üye
ikra
Üye
Mesajlar: 900
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: Where-IN sorgusunda parametre

Mesaj gönderen ikra »

Firebird tarafinda yazdigim

Kod: Tümünü seç

CREATE PROCEDURE INSP (
    inparam varchar(10))
returns (
    outmusteri varchar(150))
as
begin
  for execute statement
  'select musteri from musteriTablosu where id in ('||:inparam||')'
  into :outmusteri do suspend;
end^

SET TERM ; ^
Delphi tarafinda yazdigim

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
  with TStringList.Create do
  try
    Add('1');
    Add('2');
    Add('3');
    Add('49');

    IBQuery1.SQL.Text := 'select * from insp('+QuotedStr(CommaText)+')';
    IBQuery1.Open;
  finally
    Free;
  end;
end;
test ettim calisiyor.
kıdemsiz üye
eyalin
Üye
Mesajlar: 126
Kayıt: 09 May 2005 08:08

Re: Where-IN sorgusunda parametre

Mesaj gönderen eyalin »

Sayın İkra,

Cevap için teşekkür ederim.
Cevapla