这个一个动态查询的问题。
你设置两个变量一个是sql语句的单查询:sSql;另外一个是查询条件变量:sSqlWhere
那么你就可以这么写:
……
sSql:='select * from table where 1=1';
sSqlWhere:='and a1='''+utrim(dbcombox.text)+''' or a2='''+utrim(dbcombox.text)+''' or a3='''+utrim(dbcombox.text)+''' or a4='''+utrim(dbcombox.text)+'';
这样就保证了你在满足任何一个条件时都能有正确的sql语句,正确的返回值
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('select t_name,t_1,t_2,t_3 from table1');
SQL.Add(' where t_name='''+trim(Edit1.text)+'''');
if DBComboBox1.ItemIndex<>-1 then
begin
SQL.Add('and (t_1='''+trim(DBComboBox1.Text)+''' or t_2='''+trim(DBComboBox1.Text)+''' or t_3='''+trim(DBComboBox1.Text)+''')');
end;
open;
end;
如果我加上一个字段(一共6个字段了),第一个字段用一个Edit1来输入搜索条件!后5个按照上面的要求搜索!我是这样做的:
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('select t_name,t_1,t_2,t_3 from table1');
SQL.Add(' where t_name='+''''+trim(Edit1.text)+'''');
if DBComboBox1.ItemIndex<>-1 then
begin
SQL.Add('and t_1='+''''+trim(DBComboBox1.Text)+''''+' or '+'t_2='+''''+trim(DBComboBox1.Text)+''''+' or '+'t_3='+''''+trim(DBComboBox1.Text)+'''');
end;
open;
end;
可是问题是:我明明判断了搜索t_name的条件,可是查询出来的记录的t_name不为Edit1的值,只是t_1,t_2,t_3满足搜索条件!怎么会这样?