在Edit纺辑框中输入任何字符制执行下面语句会提示错误信息
[color=#FF0000]Project Project1.exe raised exception class EOleException with message '在关键字 'like' 附近有语法错误。'. (Sender: TObject);
procedure TForm1.Button1Click(Sender: TObject);
var
  sqlstr1:string;
  sqlstr2:string;
begin
     sqlstr1:='select bom_no as BOM编号,name as 货品名称,prd_no as 货品编号,'
                +'prd_ as 货品规格,wh_no as 库位,qty as 数量 from mf_bom';
     sqlstr2:='select bom_no as BOM编号,name as 货品名称,prd_no as 货品编号,'
               +'prd_ as 货品规格,wh_no as 库位,qty as 数量 from mf_bom'
                +'where bom_no like +'''+'%'+edit1.Text+'%'+'''';
   if edit1.Text =''
   then
     begin
       adoquery1.Close;
       adoquery1.SQL.Clear;
       adoquery1.SQL.Text:= sqlstr1;
       adoquery1.open;
     end
   else
     begin
       adoquery1.Close;
       adoquery1.SQL.Clear;
       adoquery1.SQL.Text := sqlstr2;
       adoquery1.Open;
     end;
   end;请高手帮帮忙,我只是想实现按Edit框内的容易进行模糊查询功能

解决方案 »

  1.   

    sqlstr2:= 'select   bom_no   as   BOM编号,name   as   货品名称,prd_no   as   货品编号, ' 
            + 'prd_   as   货品规格,wh_no   as   库位,qty   as   数量   from   mf_bom ' 
            + 'where   bom_no   like   + ''% '+edit1.Text+ '%' ' '; 
      

  2.   

      sqlstr1:= 'select   bom_no   as   BOM编号,name   as   货品名称,prd_no   as   货品编号, '
              + 'prd_   as   货品规格,wh_no   as   库位,qty   as   数量   from   mf_bom ';
      sqlstr2:= 'select   bom_no   as   BOM编号,name   as   货品名称,prd_no   as   货品编号, '
              + 'prd_   as   货品规格,wh_no   as   库位,qty   as   数量   from   mf_bom '
              + 'where   bom_no   like   ''% '+edit1.Text+ '%'' ';
      

  3.   

    var
      Str: String;
    begin
      Str := 'select bom_no as BOM编号, name as 货品名称, prd_no as 货品编号, ' +
             'prd_ as 货品规格, wh_no as 库位, qty as 数量 from mf_bom '; 
      if not SameText(Trim(Edit1.Text), EmptyStr) then
        Str := Format('%s Like ''%%%s%%''', [Str, Trim(Edit1.Text)]);
      with ADOQuery1 do begin
        Active := False;
        SQL.Text := Str;
        Active := True;
      end;
    end;
      

  4.   

    没有细心地看.我的感觉是,对SQL直接用TEXT或COMMATEXT赋值过去,问题特别多(因为对单引号,双引号的处理怪怪的).
    我写SQL语言,喜欢这样 sql.clear ;sql.add(SQL字符串型语句);
      

  5.   

    提示你什么错呀?
    你把动态产生的SQL复制到查询分析器中调试一下
      

  6.   


    procedure   TForm1.Button1Click(Sender:   TObject); 
    var 
        sqlstr1:string; 
        sqlstr2:string; 
    begin 
      sqlstr:= 'select   bom_no   as   BOM编号,name   as   货品名称,prd_no   as   货品编号, '
              + 'prd_   as   货品规格,wh_no   as   库位,qty   as   数量   from   mf_bom '
              + 'where   bom_no  like'+QuotedStr('%'+trim(edit1.Text)+'%');//QuotedStr(trim(edit1.Text)+'%')匹配模式
      adoquery1.Close; 
      adoquery1.SQL.Clear; 
      adoquery1.SQL.Add(sqlstr); 
      adoquery1.open; 
    end; 
    //edit1.Text为空的时候相当于没有where条件语句
      

  7.   


    procedure   TForm1.Button1Click(Sender:   TObject); 
    var 
        sqlstr1:string; 
        sqlstr2:string; 
    begin 
      sqlstr:= 'select   bom_no   as   BOM编号,name   as   货品名称,prd_no   as   货品编号, '
              + 'prd_   as   货品规格,wh_no   as   库位,qty   as   数量   from   mf_bom '
              + 'where   bom_no  like'+QuotedStr('%'+trim(edit1.Text)+'%');//QuotedStr(trim(edit1.Text)+'%')匹配模式
      adoquery1.Close; 
      adoquery1.SQL.Clear; 
      adoquery1.SQL.Add(sqlstr); 
      adoquery1.open; 
    end; 
    //edit1.Text为空的时候相当于没有where条件语句
      

  8.   

    SQL里试过了,没有问题
    在edit中输入内容,调试没有问题,点击查询就弹出错误信息,说 like 附近有语法错误!
      

  9.   

      sqlstr2:= 'select   bom_no   as   BOM编号,name   as   货品名称,prd_no   as   货品编号, ' 
                                  + 'prd_   as   货品规格,wh_no   as   库位,qty   as   数量   from   mf_bom ' 
                                    + 'where   bom_no   like   + '''+ '%'+trim(edit1.Text)+ '%'+ '''; 
    用这个试一试