if a=1 then sql:= sql+ ' and emlak=''satılık dükkan''';
if b=1 then sql:= sql+ ' and emlak=''kiralık ev''';
ben bu şekilde kriteleri arttıtmak istiyorum, tek satır yazınca mesela satılık dükkan ın olduğu satırı yazınca satılık dükkanları görüntülüyor, buna altındaki kiralık ev satırını ekleyince hiç birini görüntülemiyor. bu konuda ne yapabilirim. teşekürler.
Sorguyu tam yazmazsan müneccim gibi tahminlerde bulunmak zorunda kalıyoruz Yine tahminen söylüyorum çünkü sorgu cümleciğinin bütünü ortada yok; and sonra emlak= kısmını tümden parantez içine alırsan problem olmaz.. fakat sonundaki parantezi koymayı unutma.. yani bu işlerin herhangi biri oluşunca parantez açılmış demektir ve de kapanacaktır.. hepsini de OR la bağla
evet hocam çok fazla kafa karıştırmamak için hepsini yazmak istemedim haklısınız böyle anlamak daha zor oluyor, evet kodum şu anda çalışıyor ama başına extra bir satır eklemnek zorunda kaldım (x olan satır)
kodum şöyle
a:=1;
query1.sql.Clear;
sql:='select * from emlak where 1=1 ';
if a=1 then sql:= sql+ ' and emlak=(''x'')';
if form44.CheckBox2.Checked then sql:= sql+ ' or emlak=(''kiralık ev'')';
if form44.CheckBox2.Checked then sql:= sql+ ' or emlak=(''kiralık dükkan'')';
if form44.CheckBox3.Checked then sql:= sql+ ' or emlak=(''satılık ev'')';
hepsi or olunca olmuyor çünkü. bu şekilde bir problemim yok ama ilginçtir ben checkboxlarla başka bir formdan değer gönderiyorum bunları almıyor, (buda delphi konusuna giriyor artık, table ve query i bu şekilde kullanmıştım) . Neyse çok teşekkürler problemim bu şekilde çözülmüş oldu.
hocam bu sorguya birde tarih eklemek istiyorum saatlerdir uğraşıyorum ama bir türlü başarmadım. aynı filitreleme de 2 adet datetimepicker1 den alınan tarihle sorgulama yaptırtmak istiyorum
sql:='select * from emlak where 1=1 ';
if a=1 then sql:= sql+ ' and emlak=(''x'')';
if form44.CheckBox2.Checked then sql:= sql+ ' or emlak=(''kiralık ev'')';
if form44.CheckBox2.Checked then sql:= sql+ ' or emlak=(''kiralık dükkan'')';
if form44.CheckBox3.Checked then sql:= sql+ ' or emlak=(''satılık ev'')';
Query1.sql.Clear;
sql:='select * from emlak where tarih between :TARIH1 and :TARIH2 and (' ';
if form44.CheckBox2.Checked then sql:= sql+ ' or emlak=''kiralık ev'' ';
if form44.CheckBox2.Checked then sql:= sql+ ' or emlak=''kiralık dükkan'' ';
if form44.CheckBox3.Checked then sql:= sql+ ' or emlak=''satılık ev'' ';
if form44.CheckBox2.Checked or form44.CheckBox2.Checked or form44.CheckBox3.Checked then sql:= sql+ ' )';
Query1.ParamByName('TARIH1).AsDateTime := Tarih1;
Query1.ParamByName('TARIH2).AsDateTime := Tarih2;
Burada bahsettiğim hepsini ilgilendiren bir veya iki tarih arasında diyeceksen bunların öncesinde yani where den hemen sonra tarih kontrolunu yapmalısın. Daha sonra da parantez açıp diğer if .. lerdeki emlak='...' kısmını eklemelisin. En sonunda da bu şartların herhangi birinin sağlanması durumunda açtığın parantezi kapatmalısın. :TARIH1 ve :TARIH2 parametre olarak verilecek
hocam kodu bu hale getirdim ama çalıştıramadım sql bilgim çok az tırnaklarda yada atamalarda hata yapıyor olabilirim. evet formda kullanıcı istediği tarihler arasındaki istediği checkboxları işaretleyerek rapor alacak.
var
sql:string;
tarih1,tarih2:string;
begin
tarih1:=datetostr(DateTimePicker1.date);
tarih2:=datetostr(DateTimePicker2.date);
form47.Query1.ParamByName(tarih1);
form47.Query1.ParamByName(tarih2);
sql:='select * from emlak where tarih between :TARIH1 and :TARIH2 and (' ';
// hatayı bu satırda alıyorum,[Error] SATLNKRLANEMLRAP.pas(77): Unterminated string[Error] SATLNKRLANEMLRAP.pas(79): Missing operator or semicolon[Error] SATLNKRLANEMLRAP.pas(79): Incompatible types: 'String' and 'procedure, untyped pointer or untyped parameter' tarihleri dateye çeviriyorum yine hata alıyorum. :(
if form46.CheckBox1.Checked then sql:= sql+ ' or durum=''kiralandı ev''';
if form46.CheckBox2.Checked then sql:= sql+ ' or durum=''kiralandı dükkan''';
if form46.CheckBox3.Checked then sql:= sql+ ' or durum=''satıldı ev''';
if form46.CheckBox1.Checked or form46.CheckBox2.Checked or form46.CheckBox3.Checked then sql:= sql+ ' )';
form47.query1.sql.add(sql);
form47.query1.open;
sql:='select * from emlak where tarih between :TARIH1 and :TARIH2 and (' ' ';
burada tırnakların biri eksik kalmış. string içindeki tırnaklar hep çift (iki tek) tırnak olarak vermek gerekiyor. diğer hatalarda ona bağlı olarak geliyor olabilir..