Çoklu Şarta Göre Sorgu Gönderen: Fatih Tarih: 08 October 2005 19:58:11
bir programımda çoklu kritere göre sorgulama yaptğımda aşağıdaaki gibi bir kod kullanırım.
DataModul.QryEvrak.Close;
DataModul.QryEvrak.SQL.Strings[0]:='select * from EVRAKS where 1=1';
if bsSkinEdit1.Text<>'' Then
DataModul.QryEvrak.SQL.Strings[1]:='and UPPER(AS_ADI_1)='+#39+formtyaz(bsSkinEdit1.Text)+#39
Else
DataModul.QryEvrak.SQL.Strings[1]:='';
if bsSkinEdit2.Text<>'' Then
DataModul.QryEvrak.SQL.Strings[2]:='and UPPER(AS_SOYADI_1)='+#39+formtyaz(bsSkinEdit2.Text)+#39
Else
DataModul.QryEvrak.SQL.Strings[2]:='';
if bsSkinEdit3.Text<>'' Then
DataModul.QryEvrak.SQL.Strings[3]:='and UPPER(TESYN_PLAKA)='+#39+formtyaz(bsSkinEdit3.Text)+#39
Else
DataModul.QryEvrak.SQL.Strings[3]:='';
if bsSkinDateEdit1.Text<>' . . ' Then
DataModul.QryEvrak.SQL.Strings[4]:='and SIG_BT_TARIHI>='+#39+bsSkinDateEdit1.Text+#39
Else
DataModul.QryEvrak.SQL.Strings[4]:='';
if bsSkinDateEdit2.Text<>' . . ' Then
DataModul.QryEvrak.SQL.Strings[5]:='and SIG_BT_TARIHI<='+#39+bsSkinDateEdit2.Text+#39
Else
DataModul.QryEvrak.SQL.Strings[5]:='';
if bsSkinDateEdit2.Text<>' . . ' Then
DataModul.QryEvrak.SQL.Strings[6]:='and UPPER(KAYDEDEN)='+#39+formtyaz(bsSkinComboBox1.Text)+#39
Else
DataModul.QryEvrak.SQL.Strings[6]:='';
if bsSkinDateEdit2.Text<>' . . ' Then
DataModul.QryEvrak.SQL.Strings[7]:='and UPPER(DUZENLEYEN)='+#39+formtyaz(bsSkinComboBox2.Text)+#39
Else
DataModul.QryEvrak.SQL.Strings[7]:='';
if bsSkinRadioGroup1.ItemIndex=1 then
DataModul.QryEvrak.SQL.Strings[8]:='Order By AS_ADI_1'
else
if bsSkinRadioGroup1.ItemIndex=0 then
DataModul.QryEvrak.SQL.Strings[8]:='Order By BLKODU'
else
if bsSkinRadioGroup1.ItemIndex=2 then
DataModul.QryEvrak.SQL.Strings[8]:='Order By AS_SOYADI_1'
else
if bsSkinRadioGroup1.ItemIndex=3 then
DataModul.QryEvrak.SQL.Strings[8]:='Order By TESYN_PLAKA'
else
if bsSkinRadioGroup1.ItemIndex=4 then
DataModul.QryEvrak.SQL.Strings[8]:='Order By SIG_BT_TARIHI';
IF bsSkinCheckRadioBox1.Checked THEN
DataModul.QryEvrak.SQL.Strings[9]:='DESC'
ELSE
DataModul.QryEvrak.SQL.Strings[9]:='ASC';
DataModul.QryEvrak.Open;
neden with do kullanmıyorsun diyenlere. ben with do sevmem sonra acces violation yapıyor

formtyaz bu kriteri büyük harfe çeviren bir fonksiyonnndur. Bu fonksiyonuda sitede bulabilirsiniz.
Where 1=1 tabloya direk bir bağlantısı yok 1=1 olduğu için sadece And ifadesini aşmak için olmazsa olmaz bir formalite.
querynin sql özelliğine önceden ekleyeceğin satır kadar boş satır olacak. run-time de boş satır oluşturmak için
query1.sql.add('');
komutunu kullan.
clear kullanmana gerek yok çünkü direk satırlara erişip o satırı değiştiriorsun. diğer satırlar değişmiyor.
örneğin
select * from tablo
order by ADI
Burada
string[0]:='select * from tablo where 1=1'
dersen querynin sql özelliği aşağıdaki değeri alır.
select * from tablo where 1=1
order by ADI