本人新手,麻烦各位大哥给解决下
var
  str:string;
begin
    str:='select * from boxim where ';
    if Edit1.Text<>'' then
    begin
      str:=str+'瓶号 like ''%'+Trim(edit1.Text)+'%'' and ';
    end;
    if Edit2.Text<>'' then
    begin
      str:=str+'是否在库 like ''%'+Trim(edit2.Text)+'%'' and ';
    end;    if Length(str)>0 then
    begin
      str:= LeftStr(str,Length(str)-5);    Edit3.Text:=str;    with DataModule2 do
     begin
         ADOQuery1.SQL.Clear;
         ADOQuery1.SQL.Add(str);
         ADOConnection1.Connected:=True;
         ADOQuery1.Open;
     end;
     DBGrid1.DataSource.DataSet:=DataModule2.ADOQuery1;
    end;
end;这是我网上看的LIKE的用法,我本来用ACCESS做的多条件模糊查询,现在想转DELPHI上,可不是这错就是那出错,麻烦各位大哥给改下
另外我想问下,现在DELPHI结合那种数据库开发最方便,多人共用的软件,要求数据同步更新

解决方案 »

  1.   

      str:='select * from boxim where 1=1  ';
      if Edit1.Text<>'' then
      begin
      str:=str+' and [瓶号] like ''%'+Trim(edit1.Text)+'%''';
      end;
      if Edit2.Text<>'' then
      begin
      str:=str+'and [是否在库] like ''%'+Trim(edit2.Text)+'%''';
      end;
      

  2.   

    你好要保证如果你的edit中都没有值的情况不出错,你现在的不行,如果都没有值,就会成为
    'select * from boxim where',不完整
      

  3.   

    两个原则: where (1 = 1) ,再在后面跟条件代码,模糊查询写法自己注意一下,将'+QuotedStr('%'+text+'%')+ ',这样写就没有任何问题,主要是引号太多,你会比较迷惑
      

  4.   

    2楼和4楼说的才是金玉良言!!!那个一堆奖牌的老兄说的非常对,当年我为了这个问题大伤脑筋,知道后来学习西门子plc程序看到老外都是想四楼这样写,才明白为什么,你自己生成的查找字符串很有可能不完整,加上4楼写的条件之后,防止条件字符串为空,这样才不会出错!
    后面那个%的原则也很不错,出现错误很有可能在设计阶段就发现,而不是到了连调的时候才知道。