请教精通delphi组合查询的高手!! ( 积分: 30 )

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

richard0922

Unregistered / Unconfirmed
GUEST, unregistred user!
代码如下:<br>procedure&nbsp;Tf_info.cxButton1Click(Sender:&nbsp;TObject);<br>begin<br><br>&nbsp;&nbsp;if&nbsp;(trim(cxtextedit1.Text&nbsp;)='')&nbsp;and&nbsp;&nbsp;(trim(cxtextedit2.Text&nbsp;)='')&nbsp;and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(trim(cxtextedit3.Text&nbsp;)='')&nbsp;and&nbsp;&nbsp;&nbsp;(trim(cxtextedit4.Text&nbsp;)='')<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;application.MessageBox('请输入查询条件','提示',64);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cxtextedit2.SelectAll&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cxtextedit2.SetFocus&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br>&nbsp;&nbsp;else<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;with&nbsp;DM.ADOQuery1&nbsp;do<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;close;<br>&nbsp;&nbsp;&nbsp;sql.Clear&nbsp;&nbsp;&nbsp;;<br>&nbsp;&nbsp;&nbsp;sql.Add('select&nbsp;&nbsp;&nbsp;[itemid],[itemname],[itemspecs],[itemunit],[category],[memo],[date]&nbsp;from&nbsp;&nbsp;itemaccoun&nbsp;where&nbsp;[itemid]&nbsp;like'+QuotedStr('%'+Trim(cxtextedit1.Text)+'%'))&nbsp;;<br>&nbsp;&nbsp;&nbsp;sql.Add&nbsp;(&nbsp;'and&nbsp;[itemname]&nbsp;like'+QuotedStr('%'+Trim(cxtextedit2.Text)+'%')&nbsp;);<br>&nbsp;&nbsp;&nbsp;sql.Add(&nbsp;'and&nbsp;[itemspecs]&nbsp;like'+QuotedStr('%'+Trim(cxtextedit3.Text)+'%')&nbsp;);<br>&nbsp;&nbsp;&nbsp;sql.Add(&nbsp;&nbsp;'and&nbsp;[memo]&nbsp;like&nbsp;'+QuotedStr('%'+Trim(cxtextedit4.Text&nbsp;)+'%'));<br>&nbsp;&nbsp;&nbsp;dm.ADOQuery1.Active&nbsp;:=true;<br>&nbsp;&nbsp;&nbsp;open;<br><br>&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fields[0].DisplayLabel&nbsp;:='物料代码';//设置中文标题<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fields[1].DisplayLabel&nbsp;:='名称';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fields[2].DisplayLabel&nbsp;:='规格描述';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fields[3].DisplayLabel&nbsp;:='单位';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fields[4].DisplayLabel&nbsp;:='单位';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fields[5].displaylabel&nbsp;:='备注';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fields[6].DisplayLabel&nbsp;:='创建日期';<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;dbgrid1.Columns[0].Width&nbsp;:=70;//设置列宽<br>&nbsp;&nbsp;&nbsp;&nbsp;dbgrid1.Columns[1].Width&nbsp;:=110;<br>&nbsp;&nbsp;&nbsp;&nbsp;dbgrid1.Columns[2].Width&nbsp;:=200;<br>&nbsp;&nbsp;&nbsp;&nbsp;dbgrid1.Columns[3].Width&nbsp;:=40;<br>&nbsp;&nbsp;&nbsp;&nbsp;dbgrid1.Columns[4].Width&nbsp;:=60;<br>&nbsp;&nbsp;&nbsp;&nbsp;dbgrid1.Columns[5].Width&nbsp;:=90;<br>&nbsp;&nbsp;&nbsp;&nbsp;dbgrid1.Columns[6].Width&nbsp;:=100;<br><br>&nbsp;end;<br><br>end;<br>我遇到的麻烦是上面这个条件出来的结果不对,有的查不到,可数据确实有,语言也没报错<br>&nbsp;sql.Add('select&nbsp;&nbsp;&nbsp;[itemid],[itemname],[itemspecs],[itemunit],[category],[memo],[date]&nbsp;from&nbsp;&nbsp;itemaccoun&nbsp;where&nbsp;[itemid]&nbsp;like'+QuotedStr('%'+Trim(cxtextedit1.Text)+'%'))&nbsp;;<br>&nbsp;&nbsp;&nbsp;sql.Add&nbsp;(&nbsp;'and&nbsp;[itemname]&nbsp;like'+QuotedStr('%'+Trim(cxtextedit2.Text)+'%')&nbsp;);<br>&nbsp;&nbsp;&nbsp;sql.Add(&nbsp;'and&nbsp;[itemspecs]&nbsp;like'+QuotedStr('%'+Trim(cxtextedit3.Text)+'%')&nbsp;);<br>&nbsp;&nbsp;&nbsp;sql.Add(&nbsp;&nbsp;'and&nbsp;[memo]&nbsp;like&nbsp;'+QuotedStr('%'+Trim(cxtextedit4.Text&nbsp;)+'%'));<br>&nbsp;&nbsp;&nbsp;dm.ADOQuery1.Active&nbsp;:=true;<br>&nbsp;&nbsp;&nbsp;open;<br>如果把条件设一个就可以查到,四个条件中的任何一个都能查到<br>比如:<br>sql.Add('select&nbsp;&nbsp;&nbsp;[itemid],[itemname],[itemspecs],[itemunit],[category],[memo],[date]&nbsp;from&nbsp;&nbsp;itemaccoun&nbsp;where&nbsp;[itemid]&nbsp;like'+QuotedStr('%'+Trim(cxtextedit1.Text)+'%'))&nbsp;;<br>不知道这个什么问题?到底是哪里出现了问题?
 
“如果把条件设一个就可以查到,四个条件中的任何一个都能查到”<br>说明没有同时满足4个条件的纪录喽<br><br>遇到这类问题,可以先把所生成和要执行的sql静态脚本拿到查询分析器中执行调试<br>会更容易发现问题的所在
 
你所定义查询语句的条件是要'同时满足'才可以查询到结果(注意:是同时满足),如果你所要查询的结果非是要同时满足条件的话则要用&quot;&nbsp;OR&nbsp;&quot;(注意:这是指非同时满足你所定义的要求条件,也即只要满足你任何一个条件即算符合你的要求了.)举例:where&nbsp;A&nbsp;and&nbsp;B&nbsp;and&nbsp;C&nbsp;and&nbsp;D&nbsp;(要同时满足ABCD这四个条件才可以).where&nbsp;A&nbsp;or&nbsp;B&nbsp;or&nbsp;C&nbsp;or&nbsp;D(只要满足ABCD任何一个即可),还有一种组合则是where&nbsp;(A&nbsp;and&nbsp;B)&nbsp;&nbsp;or&nbsp;(C&nbsp;and&nbsp;D)(只要满足AB或CD的条件即).希望能帮到你吧!
 
根据上面2位的指点,我用查询分析器查了,找到问题的原因,原来是NULL的问题<br>请各位高手再协助会诊一下怎么写法:<br>问题出在了字段是NULL的用组合查询差不到<br>比如:<br>select&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;from&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;screencode&nbsp;&nbsp;&nbsp;where&nbsp;&nbsp;&nbsp;[itemid]&nbsp;&nbsp;&nbsp;like&nbsp;&nbsp;&nbsp;'%1601%'&nbsp;&nbsp;&nbsp;and&nbsp;&nbsp;&nbsp;[memo]&nbsp;&nbsp;&nbsp;like&nbsp;&nbsp;&nbsp;'%%'<br>实际itemid是有值的,如果[Memo]字段没有值是NULL,那么用这条语句就差不出来东西<br><br>对于这种问题,请教高手上面的代码得怎么个写法?
 
select&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;from&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;screencode&nbsp;&nbsp;&nbsp;where&nbsp;&nbsp;&nbsp;isnull([itemid],'')&nbsp;&nbsp;&nbsp;like&nbsp;&nbsp;&nbsp;'%1601%'&nbsp;&nbsp;&nbsp;and&nbsp;&nbsp;&nbsp;isnull([memo],'')&nbsp;&nbsp;&nbsp;like&nbsp;&nbsp;&nbsp;'%%'
 
谢谢迷途的羔羊,你的指点是对的,我用查询分析器验证了,不过sql语句放在DELPHI中该怎么写?下面是我写的,执行报错,请帮我看看,谢谢<br>&nbsp;&nbsp;&nbsp;sql.Add('select&nbsp;&nbsp;&nbsp;[itemid],[itemname],[itemspecs],[itemunit],[category],[memo],[date]&nbsp;from&nbsp;&nbsp;itemaccoun&nbsp;where&nbsp;[itemid]&nbsp;like'+QuotedStr('%'+Trim(cxtextedit1.Text)+'%'))&nbsp;;<br>&nbsp;&nbsp;&nbsp;sql.Add&nbsp;(&nbsp;'and&nbsp;isnull([itemname],'')&nbsp;like'+QuotedStr('%'+Trim(cxtextedit2.Text)+'%')&nbsp;);<br>&nbsp;&nbsp;&nbsp;sql.Add('and&nbsp;isnull([itemspecs],'')&nbsp;like'+QuotedStr('%'+Trim(cxtextedit3.Text)+'%'))&nbsp;;<br>&nbsp;&nbsp;&nbsp;sql.Add('and&nbsp;isnull([memo],'')&nbsp;like&nbsp;'+QuotedStr('%'+Trim(cxtextedit4.Text)+'%'));
 
sql.Add('select&nbsp;&nbsp;&nbsp;[itemid],[itemname],[itemspecs],[itemunit],[category],[memo],[date]&nbsp;from&nbsp;&nbsp;itemaccoun&nbsp;where&nbsp;[itemid]&nbsp;like'+QuotedStr('%'+Trim(cxtextedit1.Text)+'%'))&nbsp;;<br>&nbsp;&nbsp;&nbsp;sql.Add&nbsp;(&nbsp;'and&nbsp;isnull([itemname],'''')&nbsp;like'+QuotedStr('%'+Trim(cxtextedit2.Text)+'%')&nbsp;);<br>&nbsp;&nbsp;&nbsp;sql.Add('and&nbsp;isnull([itemspecs],'''')&nbsp;like'+QuotedStr('%'+Trim(cxtextedit3.Text)+'%'))&nbsp;;<br>&nbsp;&nbsp;&nbsp;sql.Add('and&nbsp;isnull([memo],'''')&nbsp;like&nbsp;'+QuotedStr('%'+Trim(cxtextedit4.Text)+'%'));
 
问题解决了,谢谢大伙了,在大富翁真的学到很多东西。
 
后退
顶部