求教多个sql查询条件的字符串连接的问题(100)

  • 主题发起人 sherlockye
  • 开始时间
S

sherlockye

Unregistered / Unconfirmed
GUEST, unregistred user!
我需要做一个sql查询,查询条件由用户来自行定义,如下:select * from X where 条件A and 条件B and 条件C and 条件D.....显然,各个条件都是string变量,于是写成这样:strSQL:='select * from X where'+ 条件A + 'and'+ 条件B + 'and'+ 条件V + 'and'+ 条件D;但问题在于每个条件是否存在这一点我事先不知道,甚至有可能一个条件都没有,用户要求显示所有数据,那么这些条件该怎么样写呢?比如,正常来说,条件A:='客户编号>100'。但是,如果用户选择不要条件A,那么就变成条件A:='',这样sql里面就变成了 select * from X where and ..这样显然语法上就错了,该怎样避免呢?需要特殊说明的是,表里面并不是每个字段都填写全了的,如果我把用户没有选择的字段写成 条件A:='客户编号<>Null',会导致留空的查询不出来。我现在是写了很多个if来判断,但是随着条件个数的增加,总不能一直if下去呀,我有20个字段,这样if会死人的....
 
无人回答呀....
 
这样弄嘛,你拿条件给他,他选中才能加这个条件查 没选中就不能这样差checkbox和editsqlF := 'select * from x where 1=1 ';// 先写查询内容//再写组合查询条件sqlL := '';//有条件A,加进去,反正是循环的弄,多贴下if checka.checked thensqlL := sqlL +' and '+条件A;//有条件B,加进去if checkb.checked thensqlL := sqlL +' and '+条件B;//有条件C,加进去if checkc.checked thensqlL := sqlL +' and '+条件C;....sqlF := sqlF + sqlL
 
to pbluec,我就是这样写的,只不过是判断的 if 条件A='' ,但问题是,如果条件A没有被选中,而B被选中,按照你的写法,就会出现: select .... where and 条件Bwhere和and直接连在一起了,语法上就错了,实际上主要的问题就在这里。
 
啊,想到了,如此简单的办法呀.....sql:='select .... where true'if 条件A<>'' then sql:=sql+' and '+条件A加个true在where后面就不会出错了嘛,我真是,唉......
 
呵呵,你要看清楚我写的[red] where 1=1[/red]这个条件很重要呢加了他A 没被选中,B 被选中就是这样sqlF := 'select * from x where 1=1 ';// 先写查询内容sqlL := sqlL +' and '+条件B;就是'select * from x where 1=1 and '+条件B;
 
嗯,我写的和你一样,你写的 1=1 ,我直接写的true还是感谢了
 
直接的sql连接有被注入的漏洞
 
顶部