程序就差那么一点了,唉!!!急啊.
表名: aaa ;字段:ID   int (唯一),  Caption   char(可重复)
**********************************
begin
   ADOQuery4.Active := true;
   if  ADOQuery4.Eof  then exit;
  for i:=0 to ADOQuery4.RecordCount -1 do
      begin
       ComboBox1.Items.Add(inttostr(ADOQuery4Caption.Value));
       ADOQuery4.Next;
    end;
end;
********************
Caption的值有重复
当在ComboBox选择的时候,怎样才能知道,选择的Caption所属的ID是什么呢?
我试用了DBLookupComboBox1,运行时总出错,说地址为例
麻烦个位了
谢谢

解决方案 »

  1.   

    用DBLookupComboBox1,挺好用的。
    实现上述功能:
    设定一个listsource
    设定一个listfield和keyfield .
    将数据集open
    可将datasource中的结果集放在dblookupcombobox中,
    下拉框显示的是listfield的字段,它对应一个keyfield字段(比你说你的id字段)
    当在DBLookupComboBox1选择了一项后,用
    DBLookupComboBox1.KeyValue就能得到keyfield字段(你的id字段的值).
    也可以直接给DBLookupComboBox1.KeyValue:=xx赋值来定位DBLookupComboBox1的当前下拉项
      

  2.   

    如果用你的办法其实也是可以做的,用两个combobox,一个存caption,一个存id,两个combobox的index是一一对应的。
    不过如果数据量大的话就不太好,因为你要把adoquery循环一遍加到combobx里。
      

  3.   

    这个在你已经加入COMBOBOX后再回过头去判断恐怕不好弄
    如果不行你可以用
    Caption/ID
    的形式保存
      

  4.   

    zaza_bbface(我试着成熟一点~) 
    方法一 您的方法我早已试过,但是就出先说地址为例!(DBLookupComboBox1)
    方法二 没试过!试一下先.*************
     Kshape([伟大的大伟!]/一心考研中!)
    这个方法也不错 
    但是决得有点不够专业.
    呵呵谢谢两位
    **********************
    还在努力中
      

  5.   

    能不能在数据库加一个字段,是插入Combox得编号,就是Combox得Index和这个字段对应了.这样得到选择得Index就可以回头查询表就可以知道是那个ID
      

  6.   

    function BinSearch(var cmb:TComboBox;const Str:String):integer;overload;
    var
      L,R,M         :Integer;
      CompareResult :integer;
    begin
       cmb.Sorted := true;
       L := 0;
       R := Pred(cmb.Items.Count);
       while (L <= R) do
       begin
          M := (L + R) div 2;
          CompareResult := AnsiCompareText(cmb.Items[M],Str);
          if CompareResult = 0 then
          begin
             Result := M;
             Exit;
          end else if (CompareResult < 0) then L := M + 1 else R := M - 1;
       end;
       Result := -1;
    end;
            
    //------------------------------------------------------------------if BinSearch(ComboBox1,ADOQuery4.FieldByName('caption').AsString) = -1 then
              ComboBox1.Items.Add(ADOQuery4.FieldByName('circuit').AsString);
      

  7.   

    //修正
           
    if BinSearch(ComboBox1,ADOQuery4.FieldByName('Caption').AsString) = -1 then
               ComboBox1.Items.Add(ADOQuery4.FieldByName('caption').AsString);