Query1.SQL[0] = 'Select * From Table1 Where 1=1' <--- 这里可以是别的:-)
Query1.SQL[1] = ''
Query1.SQL[2] = ''
Query1.SQL[3] = ''
Query1.SQL[5] = ''
Query1.SQL[6] = '' //都是用来保存查询条件的//实现:
if CheckBox1.Checked then
Query1.SQL[1] := 'and 条件1=True';if CheckBox2.Checked then
Query1.SQL[2] := 'and 条件2=True';明白了没有:-)
Query1.SQL[1] = ''
Query1.SQL[2] = ''
Query1.SQL[3] = ''
Query1.SQL[5] = ''
Query1.SQL[6] = '' //都是用来保存查询条件的//实现:
if CheckBox1.Checked then
Query1.SQL[1] := 'and 条件1=True';if CheckBox2.Checked then
Query1.SQL[2] := 'and 条件2=True';明白了没有:-)
str:string;
begin
if Edit1.text<>'' then str:='and 字段1='+Edit1.text;
if Edit2.text<>'' then str:=str+'and 字段2='+Edit2.text;
if Edit3.text<>'' then str:=str+'and 字段3='+Edit3.text;
end;
var
str:string;
begin
......
//Query1 連接數據庫
Query1.SQL.Clear;
Query.SQL.Add('Select * From Table1 Where 1=1' '):
if Edit1.text<>'' then str:='and 字段1='+Edit1.text;
if Edit2.text<>'' then str:=str+'and 字段2='+Edit2.text;
if Edit3.text<>'' then str:=str+'and 字段3='+Edit3.text;
if str <> '' then
Query1.SQL.Add(str);
Query1.Open;
...........
end;
以下是我的代码
var
str:string;
begin
infoQuery1.Close ;
infoQuery1.sql.clear; str:='select * from info';
if edit1.Text <>'' then str:=str+'add where ID='+edit1.text;
if edit2.text <>'' then str:=str+'add where Name='+edit2.text; infoQuery1.SQL.Add(str);
infoQuery1.Prepare ;
infoQuery1.Open ;总是出错,显示'Table does not exist'等。在没有if 语句时是正确的。
你看看,
当条件都符合时你的语句是这样的Select * From Info
add Where ID='xxx1'
add Where Name='xxx2'//??!这样,有语法错误呀:-)
str:string;
begin
infoQuery1.Close ;
infoQuery1.sql.clear; str:='select * from info where ID <> '''; <--这里最好有个初始条件,下面就更好做了:)
if edit1.Text <>'' then str:=str+' and ID='+edit1.text;
if edit2.text <>'' then str:=str+' and Name='+edit2.text; infoQuery1.SQL.Add(str);
infoQuery1.Prepare ;
infoQuery1.Open ;注意:上面的语句可能仍会出现错误!因为你的Name 是字符型的话,你还应该用''包括起来!自己改吧...
var
str:string;
begin
infoQuery1.Close ;
infoQuery1.sql.clear; str:='select * from info where 1=1 '; //要加一句都执行的条件
if edit1.Text <>'' then str:=str+'add where ID='+edit1.text;
if edit2.text <>'' then str:=str+'add where Name='+edit2.text; infoQuery1.SQL.Add(str);
infoQuery1.Prepare ;
infoQuery1.Open ;
应为如下 :
var
str:string;
begin
infoQuery1.Close ;
infoQuery1.sql.clear; str:='select * from info where 1=1 '; //要加一句都执行的条件
if edit1.Text <>'' then str:=str+'add ID='+edit1.text;
if edit2.text <>'' then str:=str+'add Name='+edit2.text; infoQuery1.SQL.Add(str);
infoQuery1.Prepare ;
infoQuery1.Open ;
错误的原因在于应该对STR进行判断,如果它为空时,其语句不应该有AND的存在,如果不为空,则可以有AND 的存在!
或则你直接对STR进行初始化先!
str:string;
begin
infoQuery1.Close ;
infoQuery1.sql.clear; str:='select * from info where 1=1 '; //要加一句都执行的条件
if edit1.Text <>'' then str:=str+'and ID='+edit1.text; //是and 不是add;
if edit2.text <>'' then str:=str+'and Name='+edit2.text; infoQuery1.SQL.Add(str);
infoQuery1.Prepare ;
infoQuery1.Open ;
SQLstr,WhereStr:string;
begin
WhereStr := '';
if 条件1<> '' then
if WhereStr = '' then
WhereStr := ' where 条件1 '
else
WhereStr := WhereStr + ' and 条件1 '
if 条件2<> '' then
.....
.....
..... SQLStr := 'select * from YouTableName ' + WhereStr ;
// 执行SQLStr OK
end;