如何进行多字段查询?(50分)

  • 主题发起人 主题发起人 ltqlyy125
  • 开始时间 开始时间
L

ltqlyy125

Unregistered / Unconfirmed
GUEST, unregistred user!
我的查询条件是这样的:用四个EDIT控件来接收用户的输入值,一个按纽控件作为查询确认。
查询的情况是,edit中有输入值时,就对该字段查询,edit为空时,不对该字段查询。我碰到的问题是当进行多个字段组合查寻时,该如何写代码简单一些??
我用IF语句来写,感觉很麻烦。
有劳高手指教!!!
 
在加入SQL语言之前,先对四个EDIT控件做一个检查,也就是做判断,然后组成一个查询条件
这样你的SQL代码那一段就会简洁一些.
 
在sql的where部分加入 where 1=1
在你的判断里加入
if length(edit1.text)>0 then sql:= sql + ' and field1=值'
...
 
建立四个子程序,比如GetSQL1 GetSQL2,...
然后在每隔里面自己先判断
比如
function GetSQL1 .....
if len(edit1.text)=0 then
value:= Where Field1= ...// 或者Like ...
else
value:=‘’
.........
function GetSQL2
if len(edit1.text)=0 then
value:='Where '
else
value:=' AND '
if len(edit1.text)=0 then
value;=value+ Field2.....
....同样道理写出后面的。
最后相加即可


....
 
procedure TForm1.spdbtn1Click(Sender: TObject);
var
sQuery, QueryConj, QueryEqu, sWhere: String;
begin
QueryEqu := ' like ''%s'' ';

if 精确查询 then
begin
QueryConj := ' and ';
end else if rdbtnDark.Checked then
begin
QueryConj := ' or ';
end;

sQuery := ' ';

if edtXX1.Text <> '' then
begin
sQuery := sQuery + FieldName1 +
Format(QueryEqu, [edtXX1.Text]) + QueryConj;
end;

.....

if edtXX4.Text <> '' then
begin
sQuery := sQuery + FieldName4 +
Format(QueryEqu, [edtXX4.Text]) + QueryConj;
end;

if 1 < Length(sQuery) then
begin
Delete(strQuery, Length(strQuery) -3, 4);

sWhere := 'where ' + sQuery;
//// 查询:
.....
end;
end;
 
Suppose you have a table (test) with 4 fields (firstName,lastName,address,job), the
following is an example you might be able to use:

procedure TForm1.btnSearchClick(Sender: TObject);
var
sTemp,newSQL:string;
begin
newSQL:='SELECT * FROM test ';

if length(trim(edit1.text))>0 then
sTemp:='AND (firstName like ''%'+edit1.Text+'%'') ';

if length(trim(edit2.text))>0 then
sTemp:=sTemp+'AND (lastName like ''%'+edit2.Text+'%'') ';

if length(trim(edit3.text))>0 then
sTemp:=sTemp+'AND (address like ''%'+edit3.Text+'%'') ';

if length(trim(edit4.text))>0 then
sTemp:=sTemp+'AND (job like ''%'+edit4.Text+'%'')';

sTemp:=trim(sTemp);
if copy(sTemp,1,3)='AND' then
sTemp:=copy(sTemp,4,length(sTemp)-3);

sTemp:=trim(sTemp);
if length(sTemp)>0 then
sTemp:='WHERE '+sTemp;
newSQL:=newSQL+sTemp;
showMessage(newSQL); // check the SQL statement before passing to ADO component
end;

Happy Programming!
 
If you really want to avoid IF statement, you can use CASE
 
谢谢各位
 
后退
顶部