bir tablo içinde birden fazla edit alanına göre listeleme

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
memoli79
Üye
Mesajlar: 29
Kayıt: 05 Nis 2007 01:29

bir tablo içinde birden fazla edit alanına göre listeleme

Mesaj gönderen memoli79 »

Merhabalar;

bir tablo içinde birden fazla edit alanına göre listeleme yapmak istiyorum.

bunun için formuma bir adet buton koydum ve birden fazla da edit alanları koydum.

Listelemeyi yapıyor fakat eksik yapıyor.

Mesala Bölge alanında GEBZE den çok fazla kayıt olmasına rağmen çok az sayıda kayıt listeliyor.

Yardımlarınızı bekliyorum.

Nerde hata yapıyorum acaba.
Kod aşağıdaki gibidir.

Herkese iyi çalışmalar.

Kod: Tümünü seç

begin
DM.ADOQarsiv.Active:=False;
DM.ADOQarsiv.SQL.Clear;
DM.ADOQarsiv.SQL.Add('select * from arsivtbl where Bolge like ''%'+Ebolge.Text+'%'' and Mudurluk like ''%'+Emudurluk.Text+'%'' and Departman like''%'+Edepartman.Text+'%''and Konu like''%'+Ekonu.Text+'%''and DosyaAdi like''%'+Edosyaadi.Text+'%''and DosyaNo like''%'+Edosyano.Text+'%''and SakSure like''%'+Esaksure.Text+'%''and EskiDepo like''%'+Eeskidepo.Text+'%''and Durum like''%'+Edurum.Text+'%''');
DM.ADOQarsiv.Open;
En son memoli79 tarafından 06 Eki 2008 03:13 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: bir tablo içinde birden fazla edit alanına göre listeleme

Mesaj gönderen emin_as »

Kullandıgın yöntem yanlış, kutucuklar boş olsa da and sorgusuyla sql de kullanılıyorlar.
Kodunu aşagıdaki gibi degiştirmen lazım. Bu şekilde sadece dolu edit kutucukları sorgu içine alınacaktır.

Kod: Tümünü seç

procedure ......
var
  sqlstr : string;
.....
  procedure sorguekle(stredit,strfld: string);
  begin
      if strEdit <>'' then
      begin
          if sqlstr<>'' then sqlstr:=sqlstr+ ' and ';
         sqlstr:=sqlstr+strfld+' like '''+edTxt+'%'' '; 
     end;
  end;
....
begin 
DM.ADOQarsiv.Active:=False;
DM.ADOQarsiv.SQL.Clear;

sqlstr:='';
sorguekle(edBolge.Text,'Bolge');
sorguekle(eMudurluk.Text,'Mudurluk');
......
if sqlstr<>'' then sqlstr:=' where '+sqlstr;

sqlstr:='select * from arsivtbl '+sqlstr;

DM.ADOQarsiv.SQL.Add(sqlstr);
DM.ADOQarsiv.Open;
end;
memoli79
Üye
Mesajlar: 29
Kayıt: 05 Nis 2007 01:29

Re: bir tablo içinde birden fazla edit alanına göre listeleme

Mesaj gönderen memoli79 »

Kodu tam yazmamıştım asıl kod

Kod: Tümünü seç

procedure TArama_formu.cxButton1Click(Sender: TObject);
begin
if (Ebolge.Text='')and(Emudurluk.Text='')and(Edepartman.Text='')and(Ekonu.text='')and(Edosyaadi.Text='')and(Edosyano.Text='')and(Esaksure.Text='')and(Eeskidepo.Text='')and(Edurum.Text='')then
begin
showmessage('Aradığınız Kayıt Bulunamadı');
DM.ADOQarsiv.Active:=False;

Ebolge.SetFocus;
end else
begin
DM.ADOQarsiv.Active:=False;
DM.ADOQarsiv.SQL.Clear;

//DM.ADOQarsiv.SQL.Add('Select * From arsivtbl Where Bolge like '+ QuotedStr( Ebolge.Text+'%' )+' and Mudurluk like '+ QuotedStr( Emudurluk.Text+'%'));
DM.ADOQarsiv.SQL.Add('select * from arsivtbl where Bolge like ''%'+Ebolge.Text+'%'' and Mudurluk like ''%'+Emudurluk.Text+'%'' and Departman like''%'+Edepartman.Text+'%''and Konu like''%'+Ekonu.Text+'%''and DosyaAdi like''%'+Edosyaadi.Text+'%''and DosyaNo like''%'+Edosyano.Text+'%''and SakSure like''%'+Esaksure.Text+'%''and EskiDepo like''%'+Eeskidepo.Text+'%''and Durum like''%'+Edurum.Text+'%''');
DM.ADOQarsiv.Open;
if Arama_formu.GridarsivblDBTableView1.DataController.DataSource.DataSet.RecordCount=0 then
begin
showmessage('Aradığınız Kayıt Bulunamadı');
end;
end;
end;
bu kod çalışıyor fakat kodu

Kod: Tümünü seç

DM.ADOQarsiv.SQL.Add('Select * From arsivtbl Where Bolge like '+ QuotedStr( Ebolge.Text+'%' )+' and Mudurluk like '+ QuotedStr( Emudurluk.Text+'%')); 
bu şekilde yaparsam daha fazla bölge kaydı getiriyor.

Fakat kodu

Kod: Tümünü seç

DM.ADOQarsiv.SQL.Add('select * from arsivtbl where Bolge like ''%'+Ebolge.Text+'%'' and Mudurluk like ''%'+Emudurluk.Text+'%'' and Departman like''%'+Edepartman.Text+'%''and Konu like''%'+Ekonu.Text+'%''and DosyaAdi like''%'+Edosyaadi.Text+'%''and DosyaNo like''%'+Edosyano.Text+'%''and SakSure like''%'+Esaksure.Text+'%''and EskiDepo like''%'+Eeskidepo.Text+'%''and Durum like''%'+Edurum.Text+'%''');
böyle yaparsam daha az bolge kayıd getiriyor.

sebebini anlayamadım ya da nerde hata yapıyorum.

Kod: Tümünü seç

DM.ADOQarsiv.SQL.Add('Select * From arsivtbl Where Bolge like '+ QuotedStr( Ebolge.Text+'%' )+' and Mudurluk like '+ QuotedStr( Emudurluk.Text+'%')); 
bu kod ile başlayanalrı getir anlamında akat benim istediğim içinde şunlar olanlarıda getir olsun.
En son memoli79 tarafından 06 Eki 2008 03:16 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: bir tablo içinde birden fazla edit alanına göre listeleme

Mesaj gönderen emin_as »

Önce SQL.Add yerine bir string e ata bu sorguyu ve bu sorgu stringini showmessage ile göster.

s1:='Select * From arsivtbl Where Bolge like '+ QuotedStr( Ebolge.Text+'%' )+' and Mudurluk like '+ QuotedStr( Emudurluk.Text+'%');
DM.ADOQarsiv.SQL.Add(s1);

ShowMessage(' Sorgu: '+s1);

Böylelikle sorgu olarak giden sqlleri görür ve karşılaştırabilirsin.

SQLServer i pek kullanmadım, like yerine starting with i kullanabiliyorsan, onu dene, yüzde işaretlerinden kurtulursun.

Giden sorguları tek tek karşılaştırıp, yanlışlıga neden oldugunu düşündügün ifadeyi bulman lazım, olmadı sql server a direk baglanıpi aynı sorguları ver. Farklılık oluyor mu, kontrol et.

Aklıma şu an için bunlar geliyor.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: bir tablo içinde birden fazla edit alanına göre listeleme

Mesaj gönderen conari »

yerine kullanmalısınız.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: bir tablo içinde birden fazla edit alanına göre listeleme

Mesaj gönderen aslangeri »

@memoli79; kodlarınızı [code].....[/code] tagı içerisine alırsanız okuması daha kolay olur.
şahsen kodlarınızı hiç okumadım bile çünkü çok karışık duruyor.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Cevapla