我想建一个查询,用ADOQuery, 数据库是Access, 在三个field中只要有一个field中有相似的内容就都显示出来, 代码如下:procedure TConMainForm.Edit1Change(Sender: TObject);
begin
  if RadioButton1.Enabled then
  begin
    ADOQuery1.Close;
    with ADOQuery1.SQL do
    begin
      Clear;
      if Edit1.Text = '' then
        Add('Select * from ContractData')
      else
        Add(Format('Select * from ContractData where 编号 like %s or 耕户姓名 like %s or 队别 like %s', [Edit1.text, Edit1.text, Edit1.text]));
    end;
    ADOQuery1.Open;
  end;
end;可是执行时, 只有输入数字得到正确的查询结果(编号当然是数字), 输入字母或汉字都会出错: 例如输入字母'd', 就会出错"参数d没有默认值", 这是什么原因?

解决方案 »

  1.   

    procedure TConMainForm.Edit1Change(Sender: TObject);
    begin
      if RadioButton1.Enabled then
      begin
        ADOQuery1.Close;
        with ADOQuery1.SQL do
        begin
          Clear;
          if Edit1.Text = '' then
            Add('Select * from ContractData')
          else
            Add(Format('Select * from ContractData where 编号 like "%s" or 耕户姓名 like "%s" or 队别 like "%s"', [Edit1.text, Edit1.text, Edit1.text]));
        end;
        ADOQuery1.Open;
      end;
    end;
      

  2.   

    楼上的, 你写的语句可以保证不出错, 但得不到正确结果, 例如: 队名是有以"d"开头的"dfw", 但执行结果是空(也就是说没找到).请帮忙再看一下, 谢谢!
      

  3.   

    在网吧里,没法试,不过LIKE是需要#的。
      

  4.   

    procedure TConMainForm.Edit1Change(Sender: TObject);
    begin
      if RadioButton1.Enabled then
      begin
        ADOQuery1.Close;
        with ADOQuery1.SQL do
        begin
          Clear;
          if Edit1.Text = '' then
            Add('Select * from ContractData')
          else
            Add(Format('Select * from ContractData where 编号 like "%s" or 耕户姓名 like "%s" or 队别 like "%s"', ['%'+Edit1.text+'%', '%'+Edit1.text+'%', '%'+Edit1.text+'%']));
        end;
        ADOQuery1.Open;
      end;
    end;
      

  5.   

    谢谢 pengdali(大力), OK了!
      

  6.   

    不谢!下次sqlserver问题到sql版去问!哈哈!
    给sql版做广告!
      

  7.   

    嗬嗬, sql版人气可差多了, 一个问题挂半天, 连个up的都没有...