我的表中有7列,分别为cj,lx,xh,zt,bh,szd,ssd,
我用query,我想写一个综合查询,允许每个edit中为空,但由于水平太臭,只会用穷举法,但因为项目太多,无法把各种情况写完,我想请问各路高手有没有不用穷举的方法,有的
话能否写给我,谢谢,在线等。
我用query,我想写一个综合查询,允许每个edit中为空,但由于水平太臭,只会用穷举法,但因为项目太多,无法把各种情况写完,我想请问各路高手有没有不用穷举的方法,有的
话能否写给我,谢谢,在线等。
var
sSql, sWhr: string;
begin
sSql := 'select * from tblname ';
sWhr := '';
if Edit1.Text <> '' then
sWhr := 'where cj = ' + QuotedStr(Edit1.Text);
if Edit2.Text <> '' then
if sWhr <> '' then
sWhr := sWhr + ' and lx = ' + QuotedStr(Edit2.Text)
else
sWhr := 'where cj = ' + QuotedStr(Edit2.Text);
if Edit3.Text <> '' then
if sWhr <> '' then
sWhr := sWhr + ' and lx = ' + QuotedStr(Edit3.Text)
else
sWhr := 'where cj = ' + QuotedStr(Edit3.Text);
...
sSql := sSql + sWhr;
ADOQuery1.Close;
ADOQuery1.SQL.Text := sSql;
ADOQuery1.Open;
...
end;
SELECT *
FROM yourTable
WHERE
cj=:cj_var var SQL_Str: String;
begin
SQL_Str := ''; //条件組合
if Edit1.text <> '' then
SQL_Str := SQL_Str + ' cj=:cj_var AND';
if Edit2.text <> '' then
SQL_Str := SQL_Str + ' lx=:lx_var AND';
{...} if trim(SQL_Str) = '' then exit;
SQL_Str := Copy(SQL_Str,1,Length(SQL_Str)-3);
Query1.Close;
Query1.SQL.Delete(3); //重新組合SQL文
Query1.SQL.Insert(3,SQL_Str); if Edit1.text <> '' then //付値
Query1.ParamByName('cj_var').AsString := Edit1.text;
if Edit2.text <> '' then
Query1.ParamByName('lx_var').AsInteger := StrToInt(Edit2.text);
{...}
Query1.Prepare ;
Query1.Open;
end; (注:假定数据類型不同)