请各位高手帮我修改以下程序(关于任意组合查询)(100分)

  • 主题发起人 主题发起人 jony
  • 开始时间 开始时间
J

jony

Unregistered / Unconfirmed
GUEST, unregistred user!

我最近写一个数据库程序,刚好要用到任意组合查询,在查询其中的一个
条件需要进行模糊查询,我多次测试都通不过,因为急着用,请歌路高手无论如何都指教
一下
1.设置 TQuery 的 SQL属性
select fields from tab_pi
where (field1 = :name1 or :field1 = '')
and (field2 = :name2 or :field2 = '')
and (field3 = :name3 or :field3 = '')
and (field4 LIKE :'%'+name4+'%' or :field4 = '') ( 出错 )
或者and (field4 LIKE :'%'name4'%' or :field4 = '') (出错)
请问怎改?
在程序中
with query1 do
begin
if active then close;
条件1
parambyname('name1').asstring:=输入的查询值
条件2
parambyname('name2').asstring:=输入的查询值
条件3
parambyname('name3').asstring:=输入的查询值
条件4 (模糊查询条件)
parambyname('name4').asstring:=输入的查询值
open;
end;
 
>.and (field4 LIKE :'%'+name4+'%' or :field4 = '') ( 出错
'and (field4 LIKE :'''%' + name4 + '%''' or :field4 = '''')'
注:name4 变量

>> 或者and (field4 LIKE :'%'name4'%' or :field4 = '') (出错)
and (field4 LIKE ''%:name4%'' or :field4 = '''')
注:name4参数
一个‘'’要写成‘''’
 
》and (field4 LIKE :'%'+name4+'%' or :field4 = '') ( 出错 )
》 或者and (field4 LIKE :'%'name4'%' or :field4 = '') (出错)
你真要这样写的话,还不如在程序将%加在变量NAME4上!即:name4 := '%'+name4 +'%';
另外,在书写SQL语句时,要写为诸如:
SQL.Add('select * from table where field1 like '''+Edit1.Text +''')';
这样。

同时,你在程序中这样书写不好:(:field4 = ''),你应将所有的参数值的判断放在
程序中去判断!
 
我同意zengr的作法.直接这样不好吗?
dm.QAttendBackup.close;
dm.QAttendBackup.SQL.clear;
dm.QAttendBackup.sql.add('select * from attendbasicBack where 1=1');
if Eempno.Text<>'' then
dm.QAttendBackup.sql.add('and empNo='''+Eempno.Text+'''');
if EName.text<>'' then
begin
sTemp:='%'+EName.text+'%';
dm.QAttendBackup.sql.add('and empNo in (select empNo from employees where name like '''+sTemp+''')');
end;
dm.QAttendBackup.sql.add('order by empNo');
dm.QAttendBackup.open;
 
多人接受答案了。
 
后退
顶部