各路大侠,我想在combobox中输入数据时,根据所输入的内容搜索数据库中对应的记录,然后在combobox的下拉列表中显示出来,就是一开始输入时,就用程序控制打开列表框,然后该列表框就根据所搜索的记录不断变化那种。急,请高人指点一下,一定结贴。

解决方案 »

  1.   

    可能没办法作到,因为combobox的onchenge属性是在选择的时候,而不是在输入的时候的,其他想不到什么好的事件,给个提示:
    with adoquery1 do
    begin
      close;
      sql.clear;
      sql.text := 'select * from 表 where 字段 like ''%'+combobox.text+'%''';
      open;
    end;
    with adoquery1 do
    begin
      close;
      sql.clear;
      sql.text := 'select * from 表 where 字段= '''+combobox.text+'''';
      open;
    end;
      

  2.   

    用like ''%'+combobox.text+'%''' 模糊查询,就如楼上老大所写.
      

  3.   

    不知道楼主说的是不是记忆功能
    你可以在onkeypress或者是onkeydown事件里写查找代码看看行不?
      

  4.   

    onkeypress当key<>cha(13)是进行查找
      

  5.   

    写成这样,但每次在combobox中输入数据,它都是从左输入,不知如何解决
    procedure Tmailform.RzComboBox1KeyPress(Sender: TObject; var Key: Char);
    var
    i:integer;
    id1,name1:string;
    begin
          SendMessage(rzComboBox1.handle, CB_SHOWDROPDOWN, Integer(false), 0);
          i:=length(rzcombobox1.Text);
          adoquery1.First;
          rzcombobox1.Items.Clear;
          while not adoquery1.Eof do
           begin
             id1:=adoquery1.FieldValues['id'];
             name1:=adoquery1.FieldValues['name'];
               if (copy(id1,1,i)=rzcombobox1.Text) or (copy(name1,1,i)=rzcombobox1.Text) then
                   rzcombobox1.Add(name1);
             adoquery1.Next;
           end;
         sendmessage(rzcombobox1.Handle,cb_showdropdown,integer(true),0);
    end;
      

  6.   

    未OK呀!!我是说它每次输入的时候都是在原有的字符前面输入呀,比如原有ABC,我再输个D的话,它就变成DABC了,请问该如何解决?
      

  7.   

    1,在Form啟動時將數據從數據庫中取出;
    2,在ComboBox的OnChange事件中,將ComboBox所有的數據刪除,然後從Query控件中循環比較
       前面幾個字符與ComboBox的字符是否都相同的,如果都相同就加入到ComboBox中。