本来打算做个像IE地址栏的,用户输入,下拉列表就自动挑选相似的数据,点击就完成输入,用的是combobox,才发现,点击的数据不能输入去。下面是代码。procedure TForm1.ComboBox2Change(Sender: TObject);
var
  pinnamestr:string;
begin
  pinnamestr:='select pinname from shangpinziliao where pinname like '''+trim(combobox2.Text)+'%''';
  edit13.text:=pinnamestr;
  pinnameADOQuery.Close;
  pinnameADOQuery.SQL.Clear;
  pinnameADOQuery.SQL.Add(pinnamestr);
  pinnameADOQuery.Active:=true;
  pinnameADOQuery.Open;
  combobox2.Items.Clear;
  pinnameADOQuery.First;
  while not pinnameADOQuery.Eof do
    begin
      combobox2.items.add(pinnameADOQuery.fieldbyname('pinname').value);
      pinnameADOQuery.next;
    end;end;因为当你点击下拉列表时,数据改变,又激发OnChance事件,它又去查询,所以实现不了,高手有办法解决吗?
还有当你输入数据,比如输入“AB”,光标不是出现在“B”后面,而是出现在“A”的前面,为什么会这样的?

解决方案 »

  1.   

    楼主的思路可能有些不大对.....
    这段代码放在OnChange里,那么你输一个字符就会触发一次该事件,就会执行一次SQL查询。
    不知道你的ComboBox里的值是如何加到ComboBox中去的?
    输入字符后,最好给出该ComboBox的按键(如回车)事件,或放个按钮,在它的OnClick事件中再执行SQL查询,这样SQL查询就只执行那一次了...
      

  2.   

    晕啊....刚再看了一下你的代码,ComboBox中的值是在它本身的OnChange里重新写入??
    你Clear了,光标当然会重新从最开始的地方定位了....
      

  3.   

    思路应该是这样比较好:
    -----------------------
    最开始change的时候查找
    然后每次change的时候重新查找
    但是不要items.clear
    只是从items里面去掉不符合记录的item
      

  4.   

    我只是clear了combobox2.items里的值啊,光标也会跑到开头吗?