我用的是access数据库,其中一个Tbutton的事件代码需要模糊查询,可是总是错误,请帮我改一改:
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
  if edit1.Text='' then
    begin
      ShowMessage('错误,请输入内容.');
      edit1.SetFocus();
      Exit;
    end;
  with adoquery3 do
      begin
         close;
         sql.Clear;
         sql.Add('select id as 编号,userid as 帐号,userpass as 密码,username as 姓名 from user where userid like '+'''*'''+edit1.text+'''*''');
         //Parameters.ParamByName('uid').Value:=edit1.text;
         open;
      end;
end;
VB的模糊查询挺方便的,delphi怎么就那么麻烦.

解决方案 »

  1.   

    这样写就通过了,哈哈!可是,我不知道为什么要这么写,那些单引号我看很不符合逻辑,谁能帮我分析一下?
    sql.Add('select id as 编号,userid as 帐号,userpass as 密码,username as 姓名 from user where userid like ''%'+edit1.text+'%''');
      

  2.   

    sql.Add('select id as 编号,userid as 帐号,userpass as 密码,username as 姓名 from user where userid like ''%'+edit1.text+'%''');
    你只要记得,在字符串常量中,两个单引号相当于一个单引号。就这样行了,
    而上面的语言就等于SQL中的这样:
    select id as 编号,userid as 帐号,userpass as 密码,username as 姓名 from user where userid like '%someValue%';
    someValue我是假设的一个值。
      

  3.   

    只有使用bde驱动access数据库,即实际上使用dao驱动程序才能用*代替%,?代替_
      

  4.   

    ''%'+edit1.text+'%''这是一部分,连接字符串的写法,%'+edit1.text+'%这是一部分
      

  5.   

    SQLText:='select id as 编号,userid as 帐号,userpass as 密码,username as 姓名 from user where userid like ''%'+edit1.text+'%''';ADOQUERY...设断点跟踪一下
      

  6.   

    楼主注意统配符要用 % 不能在Query中用 *
    在sql_plus 中不识别. 虽然在Access里可以.