调试时我在edit1中输入任何字符时都会出错.错误为:DBMemo7:field '***' not found.(***为DBMemo对应的字段,DBMemo7是最后一个DB组件)
  诡异的是我把DBMemo删除后,再运行又出现;DBMemo6:feild '***' not found.(DBMemo7,DBmemo6所对应的字段数据库中都有).
  下面是edit1的change事件的代码:
procedure Tdisplayfm.Edit1Change(Sender: TObject);
var
  str:string;
begin
  if edit1.Text<>'' then
  begin
    listbox1.Clear;
    str:='select distinct planname from boiler where planname like'+''''
      +edit1.Text+'%''';
    adoquery1.Close;
    adoquery1.SQL.Clear;
    adoquery1.SQL.Add(str);
    adoquery1.Open;
    while not adoquery1.Eof do
    begin
      listbox1.Items.Add(adoquery1.FieldValues['planname']);
      adoquery1.Next;
    end;
    listbox1.Visible:=true;
  end;
end;
  请问这错误是怎么产生的?

解决方案 »

  1.   


    {你这句只显示planname一个字段,不出错才怪}
    str:='select distinct planname from boiler where planname like'+'''' 
          +edit1.Text+'%'''; 
      

  2.   

    我是想在listbox1中显示planname啊
    请问我如何只在listbox中显示planname这一字段,而使其他字段暂时不再DB组件中显示?
      

  3.   

    可以用一个procedure Tdisplayfm.Edit1Change(Sender: TObject);
    var
      str,strb:string;
    begin
      if edit1.Text <>'' then   begin
        listbox1.Clear;
        str:='select distinct planname from boiler where planname like'+''''
          +edit1.Text+'%''';
        strb:='select * from boiler ';    with adoquery1 do begin
         close;
         sql.Text:=str;
         DisableControls;
         open;
         while not eof do begin
         listbox1.Items.Add(FieldValues['planname']);
         next;
         end;
         listbox1.Visible:=true;
         close;
         sql.Text:=strb;
         Open;
         EnableControls;
        end;
      end;
    end;
      

  4.   

    还有一个问题,应该不在Edit1Change中写代码,应该在Edit1Exit中写代码.
      

  5.   

    Edit1Change中写代码,每输入一个字符就触发一次事件,Edit1Exit是失去焦点后触发的.
      

  6.   


    procedure Tdisplayfm.Edit1Change(Sender: TObject); 
    var 
      str:string; 
    begin 
      if edit1.Text <>'' then 
      begin 
        listbox1.Clear; 
        //此两行有问题like后少了空格
        //str:='select distinct planname from boiler where planname like'+'''' 
        //  +edit1.Text+'%''';
        str:='select distinct planname from boiler where planname like '+'''' 
        //  +edit1.Text+'%''';     adoquery1.Close; 
        adoquery1.SQL.Clear; 
        adoquery1.SQL.Add(str); 
        adoquery1.Open; 
        while not adoquery1.Eof do 
        begin 
          listbox1.Items.Add(adoquery1.FieldValues['planname']); 
          adoquery1.Next; 
        end; 
        listbox1.Visible:=true; 
      end; 
    end; 
      

  7.   

    我是想实现百度搜索条一样的功能,当我输入一部分字符时就自动搜索boiler数据库内有的planname,并在listbox中显示出来.
    这样应该用edit1change吧?
    另:请问如何使listbox最前端显示啊?因为我的窗体上有多个panel,而listbox在一个panel上,其他panel会挡住listbox中的内容.
      

  8.   

    用change时间不好用  我试过  不能选中