Merhabalar şöyle bir kodum var ama doğru çalışmıyor.
yapmak istediğim belirtilen tarihler arasındaki kayıtların
checkboxtan seçili olanlarını almak. bu kodu nasıl düzeltmeliyim.
procedure TForm43.BitBtn1Click(Sender: TObject);
var
t1,t2,sql,sql2:string;
tarih1,tarih2:tdate;
A:Byte;
begin
datamodule3.IBQuery1.Close;
datamodule3.IBQuery1.Open;
DATAMODULE3.IBquery1.sql.Clear;
tARIH1:=(DateTimePicker1.date);
TARIH2:=(DateTimePicker2.date);
t1:=DateToStr(tarih1);
t2:=DateToStr(tarih2);
A:=1;
sql:='select * from emlak where 1=1 ';
if a=1 then sql:= sql+ ' and emlak_CINSI=''x''';
if CheckBox1.Checked then sql := sql + ' OR EMLAK_CINSI = ''KIRALANAN EVLER''';
if CheckBox2.Checked then sql := sql + ' OR EMLAK_CINSI = ''KIRALANAN DÜKKANLAR''';
if CheckBox3.Checked then sql := sql + ' OR EMLAK_CINSI = ''SATILAN EVLER''';
if CheckBox4.Checked then sql := sql + ' OR EMLAK_CINSI = ''SATILAN DÜKKANLAR''';
if CheckBox5.Checked then sql := sql + ' OR EMLAK_CINSI = ''SATILAN VİLLALAR''';
if CheckBox6.Checked then sql := sql + ' OR EMLAK_CINSI = ''SATILAN ARSALAR''';
if CheckBox7.Checked then sql := sql + ' OR EMLAK_CINSI = ''SATILAN DİĞER EML''';
DataModule3.IBquery1.sql.add(sql);
DataModule3.IBQuery1.SQL.ADD ('and TARIHISLEM > '''+T1+'''');
DataModule3.IBQuery1.SQL.ADD ('AND TARIHISLEM < '''+T2+'''');
datamodule3.ibquery1.open;
form44.quickrep1.preview;
end;
yani checboxtan kiralık ev ve satılık ev seçilmişse belirtilen tarihler arasındaki kiralık ev ve satılık evleri filitrelesin.
procedure TForm43.BitBtn1Click(Sender: TObject);
var
sql: string;
begin
with datamodule3.IBQuery1 do
begin
sql.Clear;
sql := 'select * from emlak where EMLAK_CINSI=''x'' ';
if CheckBox1.Checked then sql := sql + ' OR EMLAK_CINSI = ''KIRALANAN EVLER'' ';
if CheckBox2.Checked then sql := sql + ' OR EMLAK_CINSI = ''KIRALANAN DÜKKANLAR'' ';
if CheckBox3.Checked then sql := sql + ' OR EMLAK_CINSI = ''SATILAN EVLER'' ';
if CheckBox4.Checked then sql := sql + ' OR EMLAK_CINSI = ''SATILAN DÜKKANLAR'' ';
if CheckBox5.Checked then sql := sql + ' OR EMLAK_CINSI = ''SATILAN VİLLALAR'' ';
if CheckBox6.Checked then sql := sql + ' OR EMLAK_CINSI = ''SATILAN ARSALAR'' ';
if CheckBox7.Checked then sql := sql + ' OR EMLAK_CINSI = ''SATILAN DİĞER EML'' ';
SQL.Add(sql);
SQL.Add('and TARIHISLEM Between ''' + DateToStr(DateTimePicker1.Date) + ''' and ');
SQL.Add(' ''' + DateToStr(DateTimePicker2.Date) + ''' ');
Close;
Prepare;
Open;
form44.quickrep1.preview;
end;
end;
Burada fazlalık gördüklerimi kaldırdım...Denemedim ama mantığı bu şekilde olması lazım...
Yukarıda tanımlanan sql değişkeni hatalı...Delphi komutlarını değişken olarak tanımlamamak gerekir ..Hata da bundan kaynaklanması lazım..Değişkenin ismini değiştirmelisiniz..'Sqlcumlesi' gibi...
olması lazım..
Tanımladığınız Sql1 değişkeni ile SQL.Clear daki SQl ifadesi aynı değil.
Onlar sabit kalsın sadece tanımladığınız 'sql' değişkenini 'sql1' olarak değiştirin;
evet kodunuz çalıştı ama benim yazdığım kodda aynı şekilde çalışıyordu.
Bu çok daha temiz bir kod oldu, teşekkürler.
kodda şöyle bir mantık hatası var
eğer bir tane checkbox seçersem doğru olarak çalışıyor. >tarih ve seçenek doğru
2 checbox seçersem yanlış çalışıyor. bu sefer tarih koşuluna bakmadan bütün kayıtları veriyor.
tarih sorgusunu biraz değiştirerek başa bir yere yazmak gerekiyor galiba
procedure TForm43.BitBtn1Click(Sender: TObject);
begin
with datamodule3.IBQuery1 do
begin
SQL.Clear;
SQL.Add('select * from emlak where');
SQL.Add('TARIHISLEM Between ''' + DateToStr(DateTimePicker1.Date) + ''' and ');
SQL.Add(' ''' + DateToStr(DateTimePicker2.Date) + ''' ');
SQL.Add('and EMLAK_CINSI=''x'' ');
if CheckBox1.Checked then SQL.Add('OR EMLAK_CINSI = ''KIRALANAN EVLER'' ');
if CheckBox2.Checked then SQL.Add('OR EMLAK_CINSI = ''KIRALANAN DÜKKANLAR'' ');
if CheckBox3.Checked then SQL.Add('OR EMLAK_CINSI = ''SATILAN EVLER'' ');
if CheckBox4.Checked then SQL.Add('OR EMLAK_CINSI = ''SATILAN DÜKKANLAR'' ');
if CheckBox5.Checked then SQL.Add('OR EMLAK_CINSI = ''SATILAN VİLLALAR'' ');
if CheckBox6.Checked then SQL.Add('OR EMLAK_CINSI = ''SATILAN ARSALAR'' ');
if CheckBox7.Checked then SQL.Add('OR EMLAK_CINSI = ''SATILAN DİĞER EML'' ');
Close;
Prepare;
Open;
form44.quickrep1.preview;
end;
end;
500 tane kayıtın içinden istediğim kayıtları doğru olarak getiriyor(10 ayrı or kullandım)....
Kayıtları bir kontrol edin,denemelik kayıt girip deneyin...Benim doğru çalışıyor...