我给combobox写了这样一段语句让他来显示一个字段下的所有项
while not ADOQuery1.eof do
    begin
    combobox1.items.add(ADOQuery1.fieldbyname('us_name').asstring);
    ADOQuery1.next;
end;
怎样在用户选择相应条目的同时把该条目的ID号(是自动增加的)传给一个变量。

解决方案 »

  1.   

    用DBLookupComboBox
    属性设置
    ListSource为ADOQuery1.DataSource
    ListField为us_name
    KeyFeild为ID
    在用户选择相应条目的同时把该条目的ID号:
    DBLookupComboBox2.KeyValue
      

  2.   

    用DBLookupComboBox不须用代码添加其Items值
      

  3.   

    可是我是要显示两个信息的
    combobox1.items.add(ADOQuery1.fieldbyname('us_name').asstring+ADOQuery1.fieldbyname('us_off').asstring);
    DBLookupComboBox可以吗?
      

  4.   

    他选择了那个条目以后
    combobox1.ItemIndex就是那个条目的ID号~~不信试试就知道啦
      

  5.   

    哦~!理解错误~。偶该打
    在QUERY里做一次循环找出那个ID号不就可以了么其他好象也没啥大办法了~~
    反正不怎么影响运行速度的~
      

  6.   

    DBLookupComboBox不可以显示两个信息
      

  7.   

    用ItemIndex属性来传递不就可以了?
      

  8.   

    真不好意思,我应该怎么写语句呢?
    Label1.Caption:=?
    马上就要揭帖了,帮帮忙啊!!!!
      

  9.   

    label1.Caption:=inttostr(ComBoBox1.ItemIndex);
    好像不行啊。
      

  10.   

    或者把数据库取出的数据存在一个Tstringlist里 没已项形式为'strUsername+其他=strID'.
    然后赋给Combobox的Items属性,选择某项之后,直接查找 SL.Values[strUsername] ,就得到ID的值了。 
    procedure TForm1.Button2Click(Sender: TObject);
    Var
      i: Integer;
    begin
      sl.Clear; //sl: TstringList;私有变量
      while not ADOQuery1.eof do
      begin
        sl.add(ADOQuery1.fieldbyname('us_name').asstring+';'
               +ADOQuery1.fieldbyname('us_off').asstring+'='
               +ADOQuery1.fieldbyname('us_id').asstring);
        ADOQuery1.next;
      end;
      ComboBox1.Items.Clear;
      for i:=0 to sl.Count-1 do
      begin
        ComboBox1.Items.Add(sl.names[i]);
      end;
    end;  showmessage(sl.Values[ComboBox1.Text]);
      

  11.   

    你可以通过combobox.addobject(Caption, TObject)的方法将除了caption之外一个object添加到items中,如果ID是整形,addobject是非常方便的
    例:
    添加:
    cboCountry.items.addobject('ssss',TObject(1));
    取出:
    nCountryID := Integer(cboCountry.Items.Objects[cboCountry.ItemIndex])如果ID是string或者其他类型,addObject之前需要先对Object分配内存
      

  12.   

    我用TSTringList来处理,将编码放在TStringList内,名称放在Combox内,要编码的时候TStringList.Strings[ComboBox.ItemIndex]
      

  13.   

    赫赫
    adoquery.sql.add('select * from table');
    while not ADOQuery1.eof do
        begin
        combobox1.items.add(ADOQuery1.fieldbyname('us_name').asstring);
        ADOQuery1.next;
    end;
    在combobox的click事件里:
    adoquery.locate('id',trim(combobox.text),[]);
    aaa:=adoquery.fieldbyname('id').asstring;
    不就搞定了吗
      

  14.   

    赫赫
    adoquery.sql.add('select * from table');
    while not ADOQuery1.eof do
        begin
        combobox1.items.add(ADOQuery1.fieldbyname('us_name').asstring);
        ADOQuery1.next;
    end;
    在combobox的click事件里:
    adoquery.locate('id',trim(combobox.text),[]);
    aaa:=adoquery.fieldbyname('id').asstring;
    不就搞定了吗
      

  15.   

    wweijie(林黛玉) 的方法是正确的,来晚了!!
      

  16.   

    可是我是要显示两个信息的
    combobox1.items.add(ADOQuery1.fieldbyname('us_name').asstring+ADOQuery1.fieldbyname('us_off').asstring);
    DBLookupComboBox可以吗?可以的
      

  17.   

    我的一个建议在编号和项目之间加“=”例如项目: 01=软件开发  
    在取的时候只需要取"="号前面的String不就可以了么?
    方法是:先用Pos()取“=”号的位置在用Copy();
    我的cainiao技术不高,不知道我理解的对不对
      

  18.   

    我也碰到过这个问题.
    我想把它做成控件,但也不知怎么做.我们可以探讨.用DBComboBox继承,其中一个Item用来保存ID,一个用来保存显示的名称.