ibquery ile sorgu yapma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

ibquery ile sorgu yapma

Mesaj gönderen bobasturk »

Merhaba arkadaşlar selam;

sorumun tüm kriterlerin girilerek yapılan sorgulama şekli makalelerde var ve az veya çok onu yapabiliyorum.

Benim sorunum altı kriter li olacak olan sorgulama sayfamda bu altı kriterden herhangi birine, ikisine veya hepsine kriter girilmesi durumunda sorguyu yapabilmesi. Yani boş edit olduğunda edit boş diyerek hata vermemeli. Bu olayı dbase ile çalışırken ADO yardımı ile gerçekleştirebiliyordum. Bir ara husonet abinin verdiği

Kod: Tümünü seç

procedure TFormArsivSorgu.Button1Click(Sender: TObject);
begin
query1.Close; 
query1.SQL.Clear; 
query1.SQL.Add('select*from Arsiv'); 
if ((Edit10.Text <> '') and (Edit9.Text <> '')) and (Edit8.text <> '') Then //Edit 3 den geriye doğru tek tek bak bakalım veri olan edit varmı yoksa en son edit1'e bak
Begin 
      query1.SQL.Add('where ADI =:PADI and SOYADI =:PSOYADI and BABA_ADI=:PBABA_ADI');      
      query1.ParamByName('PADI').AsString :=edit8.text;
      query1.ParamByName('PSOYADI').AsString :=edit9.text;
      query1.ParamByName('PBABA_ADI').AsString :=edit10.text;
      query1.Open; 
End 
Else 
if (Edit8.text <> '') and (Edit9.text <> '') Then
Begin 
      query1.SQL.Add('where ADI =:PADI and SOYADI =:PSOYADI');      
      query1.ParamByName('PADI').AsString :=edit8.text;
      query1.ParamByName('PSOYADI').AsString :=edit9.text;
      query1.Open; 
End
else 
if Edit8.text <> '' Then
Begin
      query1.SQL.Add('where ADI =:PADI');
      query1.ParamByName('PADI').AsString :=edit8.text;
      query1.Open; 
End 
Else 
      query1.Open; //Edit ler boşsa bütün tabloyu dök
end;
kod ile bu olayı gerçekleştirmek istedim. Ama düzenleme bittikten sonra çalıştırdım ve kriter girdim dbgrid içine tüm kayıtları döktü. Sadece ilk editim integer olduğu için orakay tam sayı girdiğimde kaydı tek olarak buldu.

Sorgulama işini ADO ile yapmak istedim fakat connection u frebird+ibexpert ile hazırladığım tabloya bağlayamadığımdan bağlanamama hatası verdi.

Bu tip sorgulamayı nasıl yapabiliriz ibquery ile veya ADOnun bağlantısı yapılabiliyorbu fdb uzantılı tabloya

Teşekkür ve saygılarımla
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Kullandığım kod tam olarak şöyle;

Kod: Tümünü seç

procedure TFormArsivSorgu.Button1Click(Sender: TObject);
begin
ibquery1.Close; 
ibquery1.SQL.Clear; 
ibquery1.SQL.Add('select*from ARSIVTESCIL'); 
if ((Edit1.Text <> '') and (Edit2.Text <> '') and (edit3.text<>'') and (edit4.text<>'') and (edit5.text<>'')) and (Edit6.text <> '') Then 
Begin 
      ibquery1.SQL.Add('where CERAIMNO=:PCERAIMNO AND SOYADI =:PSOYADI and ADI =:PADI and BABA_ADI=:PBABA_ADI AND CINSIYETI=:PCINSIYETI AND ESK_SUCU=:PESK_SUCU');      
      ibquery1.ParamByName('PCERAIMNO').AsİNTEGER :=STRTOİNT(edit1.text);
      ibquery1.ParamByName('PSOYADI').AsString :=edit2.text;
      ibquery1.ParamByName('PADI').AsString :=edit3.text;
      ibquery1.ParamByName('PBABA_ADI').AsSTRİNG :=edit4.text;
      ibquery1.ParamByName('PCINSIYETI').AsString :=edit5.text;
      ibquery1.ParamByName('PESK_SUCU').AsString :=edit6.text; 
      ibquery1.Open; 
End 
Else 
if ((Edit1.Text <> '') and (Edit2.Text <> '') and (edit3.text<>'') and (edit4.text<>'')) and (edit5.text<>'') Then
Begin 
      ibquery1.SQL.Add('where CERAIMNO=:PCERAIMNO AND SOYADI =:PSOYADI and ADI =:PADI and BABA_ADI=:PBABA_ADI AND CINSIYETI=:PCINSIYETI');      
      ibquery1.ParamByName('PCERAIMNO').AsİNTEGER :=STRTOİNT(edit1.text);
      ibquery1.ParamByName('PSOYADI').AsString :=edit2.text;
      ibquery1.ParamByName('PADI').AsString :=edit3.text;
      ibquery1.ParamByName('PBABA_ADI').AsSTRİNG :=edit4.text;
      ibquery1.ParamByName('PCINSIYETI').AsString :=edit5.text;
      ibquery1.Open; 
End
else 
if  ((Edit1.Text <> '') and (Edit2.Text <> '') and (edit3.text<>'')) and (edit4.text<>'') Then
Begin
      ibquery1.SQL.Add('where CERAIMNO=:PCERAIMNO AND SOYADI =:PSOYADI and ADI =:PADI and BABA_ADI=:PBABA_ADI');      
      ibquery1.ParamByName('PCERAIMNO').AsİNTEGER :=STRTOİNT(edit1.text);
      ibquery1.ParamByName('PSOYADI').AsString :=edit2.text;
      ibquery1.ParamByName('PADI').AsString :=edit3.text;
      ibquery1.ParamByName('PBABA_ADI').AsSTRİNG :=edit4.text;
      ibquery1.Open; 
End 
Else 
if  ((Edit1.Text <> '') and (Edit2.Text <> '')) and (edit3.text<>'') Then
Begin
      ibquery1.SQL.Add('where CERAIMNO=:PCERAIMNO AND SOYADI =:PSOYADI and ADI =:PADI');      
      ibquery1.ParamByName('PCERAIMNO').AsİNTEGER :=STRTOİNT(edit1.text);
      ibquery1.ParamByName('PSOYADI').AsString :=edit2.text;
      ibquery1.ParamByName('PADI').AsString :=edit3.text;
      ibquery1.Open;
End 
Else 
if  (Edit1.Text <> '') and (Edit2.Text <> '') Then
Begin
      ibquery1.SQL.Add('where CERAIMNO=:PCERAIMNO AND SOYADI =:PSOYADI');      
      ibquery1.ParamByName('PCERAIMNO').AsİNTEGER :=STRTOİNT(edit1.text);
      ibquery1.ParamByName('PSOYADI').AsString :=edit2.text;
      ibquery1.Open;

End 
Else 
if  Edit1.Text <> '' Then
Begin
      ibquery1.SQL.Add('where CERAIMNO=:PCERAIMNO');      
      ibquery1.ParamByName('PCERAIMNO').AsİNTEGER :=STRTOİNT(edit1.text);
      ibuery1.Open;
end
else
      ibquery1.Open; //Edit ler boşsa bütün tabloyu dök
end;
bu halde iken çalışıyor ve editlerden hangine veri girersen gir tüm tabloyu döküyor. Sadete ceraim no alanına rakamı ezberimden doğru olarak girdiğimde tek kaydı gösterdi. Ad alanına mehmet diye girdiğimde tüm kayıtları döküyorl. Oysa mehmet olanları dökmesini istiyorum.

teşekkür ve saygılarla
En son bobasturk tarafından 11 Ağu 2004 09:03 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

bu kod tam olarak senin istediğini yapmaz.

edit9 ile edit10 a bişeler girip edit8 i boş bırakırsan en sondaki

Kod: Tümünü seç

 query1.Open; //Edit ler boşsa bütün tabloyu dök 
kodu çalışır. buda senin istediğin sonuç değil.

daha önceki mesajlarında başka bi yol yazmıştım bunla ilgili galiba. ona bakabilisin.

bence tek tek kontrol ettir.

dipnot : bu yazdığım mesaj en üstteki mesajın içindi. diğeri ben mesajı yazana kadar araya sıkışıvermiş :lol: bir üstteki mesaj için dikkate alma bunu...
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Üstadım kodumu tam olarak yazdım bu kodda dediğim gibi integer alan olan ceraim no alanına ezbere bildiğim rakam olan kaydı yazdığımda diğer editler boş olmasına rağmen tek kaydı döktü. İnteger alanı buluyor diğer string alanları bulamayıp tüm veriyi döküyor.

Bide ustam ADO frebird+ibexpert te çalışıyormu. Bağlantıyı yapamıyorum.

Teşekkür ve saygılarla
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

firebirde odbc kullanarak bağlanmayı hiç denemedim ama
http://www.firebirdsql.com/index.php?op=files&id=odbc bu adresten odbc sürücülerini indirip ado ile bağlantı sağlayabilirsin.

veya http://www.ibphoenix.com/downloads/SetupOdbcJdbc.exe buraya tıkla direkt.

buda örnek:
http://www.ibphoenix.com/downloads/Odbc ... amples.zip

şu an için kodu incelemeye vaktim yok ama STRTOİNT satırı gözüme çarptı. bu şekilde delphi bunu derlemiyo di mi? :)

birde şunu söylemeden geçemiycem. kod çok karışık gözüktü gözüme.
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Ustam doğru sölüyon bende bakınca kafam karışıyo. Kodun kısası ilk yazdığımda. yapkam istediğim editleri geriye doğru kontrol etmek. biri boşsa diğerine bak gibi en son edit1 e kadar geri geri gitmeyi istedim. İlk kodu bana veren abimiz bu şekil yapmıştı. ve bende kriter sayısını arttırarak yazdığım şekle getirdim.

teşekkür ederim.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »


Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Hüseyin abi çok teşekkür ederim benim yerime yine bu saatte üşenmeden yorulmuşsun.

Hatırlarsan ilk verdiğim kodu senden almıştım. Uyarlamaya çalıştım ama olmadı yada yanlış yerde yanlış şekilde yapıyorum. Verdiğin adresteki kodlara baktım ama bu saatte olmyan beynim durdu sonra uğraşacağım

teşekkür ve saygılarla
Hayırlı geceler.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

O kodu ben algoritmik fikir kazanman açısından yazmıştım @SadettinPolat Arkadaşım haklı Edit'lerin 2 si boş kaldığı zaman bütün verileri açılacaktır bu şekilde bir algoritma ile benim kodumu geliştirebilirsin. Ama @Muharrem bey'in kod'u hazırda vardı zaten ilk başta da bu kodu verebilirdim ama amacım senin uğraşman doğrultusunda her şeyi bizler yaparsak bizim size yararımızdan çok zararımız dokunur :wink:


İyi Geceler.

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Haklısın abi bazen işin içinden çıkamıyorum bazen aramalarda yanlış kelime kullanıyorum sanırım tutturamıyorum ozaman yazmak durumunda kalıyorum. Asıl mesleğin verdiği yorgunlukta cabası. Kafa çok çabuk pes ediyor.

Bu şekilde yapmanız sayesinde yinede iyi yol katettim ama yeterli değil. Yola devam herkeze selam

Teşekkürler. Hayırlı geceler.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Merak etme hiç bir şey yeterli olmuyor bende bilgi için, araştırmaya okumaya doyamıyorum :D


Burada hep beraber yol alıyor hep beraber öğreniyor ve öğreneceğiz.

Hayırlı Geceler.

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2381
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

Prepare i yazmayı unutmayın bazen bu yazılmazsa sapıtabiliyor, Doğru olan bunun yazıllması. Helpte bu konu anlatılıyor yanılmıyorsam örnekte vardı.

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 !!!
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Ustalarım merhaba;

Sevinmeliyim bilmiyorum ama sorgulamayı yaptım.

Muharrem abinin sorgusunu beceremedim. Bişi deniyeyim dedim ve oldu
oda önceki çalışmamda ADO ile yaptığımız sorgu ve ben sadece adoquery1 olan yeri ibquery1 yaptım ve çalıştı sorguluyor. Fakat ib de nekadar sağlıklı bilmiyorum. kod şöyle

Kod: Tümünü seç

procedure TFormArsivSrg.BitBtn1Click(Sender: TObject);
var
     s1,s2,s3,s4,s5,s6:String;
     b_OR,b_AND:Boolean;
     begin
     s1:=Edit1.Text;
     s2:=Edit2.Text;
     S3:=Edit3.Text;
     s4:=Edit4.Text;
     s5:=Edit5.Text;
     s6:=Edit6.Text;

     b_OR:=(s1<>'') OR (s2<>'') OR (s3<>'') OR (s4<>'') OR (s5<>'') OR (s6<>'');
     b_AND:=false;

     with ibQuery1 do
     begin
     if Active then Close;
     with SQL do
     begin
     Clear;
     Add('Select*From ARSIVTESCIL');
     if b_OR then Add('Where');

     if s1<>'' then add('(SOYADI LIKE ''%'+s1+'%'')');
     b_AND:=b_AND OR (S1<>'');

     if b_AND AND(s2<>'') then Add('AND');
     if s2<>'' then add('(ADI LIKE ''%'+s2+'%'')');
     b_AND:=b_AND OR (S2<>'');

     if b_AND AND(s3<>'') then Add('AND');
     if s3<>'' then add('(BABA_ADI LIKE ''%'+s3+'%'')');
     b_AND:=b_AND OR (S3<>'');

     if b_AND AND(s4<>'') then Add('AND');
     if s4<>'' then add('(ANA_ADI LIKE ''%'+s4+'%'')');
     b_AND:=b_AND OR (S4<>'');

     if b_AND AND(s5<>'') then Add('AND');
     if s5<>'' then add('(CINSIYETI LIKE ''%'+s5+'%'')');
     b_AND:=b_AND OR (S5<>'');

     if b_AND AND(s6<>'') then Add('AND');
     if s6<>'' then add('(ESK_SUCU LIKE ''%'+s6+'%'')');
     b_AND:=b_AND OR (S6<>'');

     add('ORDER BY ILCENO');
     end;

     Open;
     if IsEmpty then ShowMessage('Aradığınız Kayıt Bulunamadı?');
   end;
Beni araştırmaya ve düşünmeye sevk eden tüm arkadaşlarıma teşekkür ederim

Saygı ve sevgilerle
Hayırlı çalışmalar ve geceler.
sako
Üye
Mesajlar: 477
Kayıt: 11 Haz 2003 02:40
Konum: ERZURUM

Mesaj gönderen sako »

bu kodda aynı işi yapıyor

ibQuery1.Close;
ibQuery1.SQL.Clear;
ibQuery1.SQL.Add('select * from kayit where ADI like '''+Edit1.Text+'%''' + 'and SOYADI like '''+Edit2.Text+'%''');
ibQuery1.Open;
DOĞUNUN SINIR TAŞI ERZURUM'UN DADAŞ'I
EFE'Sİ VAR İZMİR'İN EĞİLMEZ TÜRK' ÜN BAŞI
Cevapla