在表1中有4个字段
在delphi中建立一个选项表
按字段1查询
按字段2查询
按字段3查询
按字段4查询
用checkbox作为个选项选中标志,若某字段被选中,则该字段参与查询,否则不参与查询。
问题是,如何从表1中取出满足符合上述条件的语句。
在delphi中建立一个选项表
按字段1查询
按字段2查询
按字段3查询
按字段4查询
用checkbox作为个选项选中标志,若某字段被选中,则该字段参与查询,否则不参与查询。
问题是,如何从表1中取出满足符合上述条件的语句。
query
后的where 语句,
加多一个整形字段5代表查询的组合。
0001
0011
。
。
。
1111
1表示字段被选种。
checkbox向字段5写数据时用可OR、AND位运算,sql语句:
select * from xxx where '''+trim(combobox.text)+'''='''+trim(edit1.text)+''' and 字段5=XXX
cSQLClause='Select * From Where ';
cEqualStr=' = ';
cAndStr=' and ';
var
vFieldStr1,vFieldStr2,vFieldStr3,vFieldStr4:String;
begin
vFieldStr1:='';
vFieldStr2:='';
vFieldStr3:='';
vFieldStr4:='';
if CheckBox1.Checked then
begin
vFieldStr1:=CheckBox1.Caption;
cSQLClause:=cSQLClause+vFieldStr1+cEqualStr+FieldValue1; //FieldValue1是具体查询时所使用的字段的值,事先已经有内容
end;
if CheckBox2.Checked then
begin
vFieldStr2:=CheckBox2.Caption;
cSQLClause:=cSQLClause+cAndStr+vFieldStr2+cEqualStr+FieldValue2;
end;
//查询条件3、4和2类似处理
with ADOQuery1 do
begin
SQL.Text:=cSQLClause;
ExecSQL;
end;
end;
sSQL,WhereSql:string;
begin
WhereSql:='';
if checkbox1.checked then
WhereSql:='filed1='+value1;
if checkbox2.checked then
if length(WhereSql)=0 then
WhereSql:='filed2='+value2
else
WhereSql:=WhereSql+'and filed2='+value2
if checkbox3.checked then
if length(WhereSql)=0 then
WhereSql:='filed3='+value3
else
WhereSql:=WhereSql+'and filed3='+value3
if checkbox4.checked then
if length(WhereSql)=0 then
WhereSql:='filed4='+value4
else
WhereSql:=WhereSql+'and filed4='+value4
sSQL:='SELECT * FROM TABLE '+WhereSql;
end;
//这样可以必免太多的if 嵌套
with adoquery do
begin
close;
sql.add('select * from Table1 where 1=1 ');
end;
if checkbox1.checked= true then
begin
sql.add(' and 字段1=:参数 ');
parameters.parambyname(‘参数’).value:=值
end;
//一下是一样的 不再详细的介绍
if checkbox2.checked= true then
begin
sql.add(' and 字段2=:参数 ');
end;
if checkbox3.checked= true then
begin
sql.add(' and 字段3=:参数 ');
end;
if checkbox4.checked= true then
begin
sql.add(' and 字段4=:参数 ');
end;
open
注意空格的使用 不然会引起语法错误
sSQL,WhereSql:string;
begin
WhereSql:='';
if checkbox1.checked then
WhereSql:='filed1='+value1;
if checkbox2.checked then
if length(WhereSql)=0 then
WhereSql:='filed2='+value2
else
WhereSql:=WhereSql+'and filed2='+value2
if checkbox3.checked then
if length(WhereSql)=0 then
WhereSql:='filed3='+value3
else
WhereSql:=WhereSql+'and filed3='+value3
if checkbox4.checked then
if length(WhereSql)=0 then
WhereSql:='filed4='+value4
else
WhereSql:=WhereSql+'and filed4='+value4
sSQL:='SELECT * FROM TABLE '+WhereSql;
end;
//我献上一计
var
strFields,strSql:string;
begin
strFields='';
if checkbox1.checked then
//把字段1加入字段表列
strFields:=strFields + Field1 + ',';
if checkbox2.checked then
//把字段2加入字段表列
strFields:=strFields + Field2 + ',';
if checkbox3.checked then
//把字段3加入字段表列
strFields:=strFields + Field3 + ',';
if checkbox4.checked then
//把字段4加入字段表列
strFields:=strFields + field4 + ',';
//把字段表列的再后的;去掉
delete(length(strFields),strFields);
//合成sql语句
strSql:='select '+strFields+' From '+ mytable;//字段表列为空,退出;
if strFields='' then
exit;//执行sql语句
adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.add(strSql);
adoquery1.open;
end;
//我献上一计
var
strFields,strSql:string;
begin
strFields='';
if checkbox1.checked then
//把字段1加入字段表列
strFields:=strFields + Field1 + ',';
if checkbox2.checked then
//把字段2加入字段表列
strFields:=strFields + Field2 + ',';
if checkbox3.checked then
//把字段3加入字段表列
strFields:=strFields + Field3 + ',';
if checkbox4.checked then
//把字段4加入字段表列
strFields:=strFields + field4 + ',';
//把字段表列的再后的;去掉
delete(strFields,length(strFields),1);
//合成sql语句
strSql:='select '+strFields+' From '+ mytable;//字段表列为空,退出;
if strFields='' then
exit;//执行sql语句
adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.add(strSql);
adoquery1.open;
end;