请教一个SQL问题!!!(100分)

  • 主题发起人 主题发起人 rhine
  • 开始时间 开始时间
R

rhine

Unregistered / Unconfirmed
GUEST, unregistred user!
当作SQL查询的时候,会遇到多条件检索,而且各种条件可以任意组合。比如检索
一个公司的员工情况时,可以单独查询姓名,工龄,部门,也可以同时查询工龄在多
少以上的某部门员工列表。那么这样的语句该怎么写。
 我想到的有两种,
 1.用选择钮。通过不同的选择钮列CASE语句写SQL语句。
 2.用输入文本框填写所要查询的信息。比如查找A部门工龄在5年以上职员,则定
义字串sTemp,然后用两个Edit框添入检索值A和5。令sTemp:='Department='+Edit1.
text+'ServiceLength='+Edit2.text(假设工龄也是string型)然后用Query的Add
写Query1.SQL.Add(select * from Employee where'+ sTemp).
第一种方法应该可行,但是太麻烦。
 第二种我从来没有成功过。但是理论上不应该有错,因为当年用VB作类似工作时
是成功的。难道是语句格式的错????
  大虾指教!百分奉送!!!!!  
 
你可以把全部查询条件拼在一起后,再进行查询。
即:先拼查询条件:
sTemp:='select * from Employee where '+ 'Department='+Edit1.text+' and ServiceLength='+Edit2.text;
再进行查询
Query1.SQL.Add(sTemp);
(你的查询条件里少了and)
 
sTemp:='select * from Employee where 1=1';
if Trim(Edit1.text)<>''then
sTemp:=sTemp+ 'and Department='+Edit1.text;
if Trim(Edit2.text)<>''then
sTemp:=sTemp+ +' and ServiceLength='+Edit2.text;
Query1.SQL.Add(sTemp);
 
sorry!刚才是忘了写and.
我觉得wangjerry的判断写的有理,只是看不懂'1=1'有何用??
 
同意wangjerry的看法
 
多谢两位!我找到什么地方的问题了。
其实就SQL语句来说,写的都不错,但是Delphi在处理时要求加特殊字符。
我们用Query组件自己在SQL属性中写(select * from Employee where Name=
'LiMing')时,将窗体以text显示,则这句话为(select * from Employee
where Name='#39'LiMing'#39 ')
所以在我们所写语句的判断处再加上 #39(好像有些不同)就可成功!!
再次感谢两位。


 
多人接受答案了。
 
用1=1是因为'select * from Employee后面加了where.

如果不加1=1那么如果Edit1和EDIT2中都没有值,那么这个SQL语句为
'select * from Employee where'这是错误的。
1=1是永远为True的条件,加上不会影响结果而且保证Sql语句无Bug。

你也可以判断Edit1和Edit2中如果没有值就去掉Where也可以。但程序会麻烦一些。
 
1=1是多余的,SQL语句可以不要WHERE子句的。
 
后退
顶部