procedure TForm3.ComboBox1Change(Sender: TObject);
var
i:integer;
str:string;
begin
    str:=combobox1.Text;
   with dm.ADOQuery1 do
   begin
   dm.ADOQuery1.Close;
   dm.ADOQuery1.SQL.Clear;
   dm.ADOQuery1.SQL.Add('select * from xue where index like '''+'%'+str+'%'+'''');
     dm.ADOQuery1.Open;
   combobox1.Items.Clear;
   end;
  while not(dm.ADOQuery1.Eof) do
  begin
  combobox1.Items.Add(dm.ADOQuery1.Fields[1].AsString);
  dm.ADOQuery1.Next ;
  end;
    end;
这段程序是实现的功能就是跟据combobox中text的改变在数据库中实现模糊查询,查询到的记录全部显示在下拉的item中,但是选中想要的记录时,text中就被清空了,请问这个问题如何解决?

解决方案 »

  1.   

    当你选中记录的时候又重新执行了一次查找,combobox1.Items.Clear; 也重新执行了一次
      

  2.   

    1.“选中想要的记录”触发了 OnChange 事件
    2.ComboBox1Change 过程中有代码
    combobox1.Items.Clear; 
    所以 Text 就被清空了,这是当然的。解决办法:
    在这个过程的最后面加上一句:ComboBox1.Text := str;
      

  3.   


    procedure TForm3.ComboBox1Change(Sender: TObject); 
    var 
    i:integer; 
    str:string; 
    begin 
      str:=combobox1.Text; 
      combobox1.Items.Clear;//把这个写在这里  
      with dm.ADOQuery1 do 
      begin 
        Close; 
        SQL.Clear; 
        SQL.Add('select * from xue where index like '''+'%'+str+'%'+''''); 
        Open; 
      end; 
      while not(dm.ADOQuery1.Eof) do 
      begin 
      combobox1.Items.Add(dm.ADOQuery1.Fields[1].AsString); 
      dm.ADOQuery1.Next ; 
      end; 
    end; 
      

  4.   

    在ComboBox1上放了EDIT1,去掉EDIT1边框,把ComboBox1的OnChange代码放到EDIT1的OnChange里,再在ComboBox1的OnSelect事件里写上Edit1.Text := ComboBox1.Items[ComboBox1.ItemIndex];代码,搞点
      

  5.   

    1.“选中想要的记录”触发了 OnChange 事件 
    2.ComboBox1Change 过程中有代码 
    combobox1.Items.Clear;  
    所以 Text 就被清空了,这是当然的。 解决办法: 
    在这个过程的最后面加上一句:ComboBox1.Text := str; 
    ------------------------------------------------------------
    解决办法是:
    combobox1.Items.Add(dm.ADOQuery1.Fields[1].AsString); 'select * from xue where index like '''+'%'+str+'%'+''''
    这两个字段是同一个才行。也就是 dm.ADOQuery1.Fields[1] 就是 index 字段。
      

  6.   

    if cmbModel.Items.Count < 1 
       执行操作
      

  7.   

    别在OnChange里写,在OnDropDown里写