表一(kehu):
ID    客户名称
1      aaaaaa
2      bbbbbb
表二(jiaoyi):
ID 客户名称 交易金额
1    2         1000
2    1         2000
//客户名称
    khADOQUERY1.SQL.Add('select * from kehu');
    khADOQUERY1.Open;
    for i:= 0 to khADOQUERY1.RECORDCOUNT -1 DO
    BEGIN
      COMBOBOX1.ITEMS.ADD(khADOQUERY1.FIELDBYNAME('客户名称').AsString);
      khADOQUERY1.NEXT;
    END;
    khADOQUERY1.Close;各位大侠,我想请问一下,我要在ComBoBOX1中,如果用户选择了aaaaaa,我想取出aaaaaa所对应的ID,也就是1,然后存入到jiaoyi这个表中,怎么取ComBoBOX1中的值?

解决方案 »

  1.   

    添加时用 ADDObject取出时 Integer(ComboBox1.Items.Objects[index])
      

  2.   

    大哥,能否写详细一点,小弟,刚接触Delphi
      

  3.   


    COMBOBOX1.ITEMS.ADDObject(khADOQUERY1.FIELDBYNAME('客户名称').AsString,TObject(khADOQUERY1.FIELDBYNAME('id').asinteger);
      

  4.   

    没选中 ComboBox1.ItemIndex 值为-1
    选中第1个ComboBox1.ItemIndex值为0
    选中第2个ComboBox1.ItemIndex值为1
    依次类推……
      

  5.   

    添加时:
    COMBOBOX1.ITEMS.ADDObject(khADOQUERY1.FIELDBYNAME('客户名称').AsString,TObject(khADOQUERY1.FIELDBYNAME('id').asinteger);获取时:
    id := integer(Combobox1.items.objects[itemsindex])
      

  6.   

    ItemIndex我用不用附值的?khADOQUERY1.Open;
        for i:= 0 to khADOQUERY1.RECORDCOUNT -1 DO
        BEGIN
          //COMBOBOX1.ITEMS.ADD(khADOQUERY1.FIELDBYNAME('客户名称').AsString);
          COMBOBOX1.ITEMS.ADDObject(khADOQUERY1.FIELDBYNAME('客户名称').AsString,TObject(khADOQUERY1.FIELDBYNAME('id').asinteger));
          combobox1.ItemIndex:= khADOQUERY1.FIELDBYNAME('id').asinteger;
          khADOQUERY1.NEXT;
        END;
      

  7.   

        ComboBox1.Items.Add('1  2333');
            Edit1.Text := IntToStr(ComboBox1.Items.IndexOf('1  2333')) ;
      

  8.   

    哎,还是没弄出来~~~~怎么comboBOX怎么不分两个值啊,一个是数据,一个是值
      

  9.   

    showmessage(inttostr(Integer(ComboBox1.Items.Objects[combobox1.ItemIndex])));
    这样就OK了
      

  10.   

    给楼主示范一下unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        ComboBox1: TComboBox;
        Edit1: TEdit;
        Edit2: TEdit;
        procedure Button1Click(Sender: TObject);
        procedure ComboBox1Change(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      i:integer=0;
    implementation{$R *.dfm}
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ComboBox1.Items.AddObject(edit1.Text,TObject(i));
      inc(i);
    end;procedure TForm1.ComboBox1Change(Sender: TObject);
    begin
      edit2.Text:=inttostr(integer(ComboBox1.Items.Objects[ComboBox1.ItemIndex]));
    end;end.
      

  11.   

    Note: The TStrings object does not own the objects you add this way. Objects added to the TStrings object still exist even if the TStrings instance is destroyed. They must be explicitly destroyed by the application.
    //---------------------------
    AddObject是一个容易用错的方法,如果附加的是存在的TObject子类,你不用手动收回内存,但附加的是自己创建的结构或类,它不会随TStrings的释放而释放的,必须要手动释放分配内存。
      

  12.   

      khADOQUERY1.SQL.Add('select * from kehu');
      khADOQUERY1.Open;
      for i:= 0 to khADOQUERY1.RECORDCOUNT -1 DO
      BEGIN
      COMBOBOX1.ITEMS.ADD(khADOQUERY1.FIELDBYNAME('客户名称').AsString);
      khADOQUERY1.NEXT;
      END;
      khADOQUERY1.Close;这些都没问题,你再加一个COMBOBOX1的离开事件;procedure TForm1.ComboBox1Exit(Sender: TObject);
    var
      g_ID : Integer;
    begin
      if khADOQUERY1.Locate('客户名称',Trim(ComboBox1.Text),[]) then
      begin
        g_ID:=khADOQUERY1.FieldByName('ID').AsInteger;
      end;
    end;
      

  13.   

    Delphi的优势是第三方控件,去用Raize的TRzComboBox吧,自身就带有Items和Values两个TStrings。
      

  14.   

    你可以自己写一个控件,如TMyCombobox, 继承TCombobox,新增一个ID(integer)属性,与Combobox的Ittem相对应。ID值在读取值时一并加入。
      

  15.   

    showmessage(inttostr(Integer(ComboBox1.Items.Objects[combobox1.ItemIndex])));
      

  16.   

    楼主,我也刚学,上面前辈写的代码我看不懂,可我有个办法可以实现你的所需首先用adoquery列出combobox的值,然后跟据所选的值在用adoquery取得id的值,这样就可以插入到另一个表中了第一步,列出客户名称  combobox1.Items.add(adoquery1.FieldByName('客户名称').AsString);
    第二步,取客户名称相对应的ID值  temp=trim(combobox.text)
    adoquery.sql.add('select id from kehu where 客户名称='''+temp+'''  ')
    第三步,把ID值插入另一个表,这里我就不写代码了
      

  17.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, DB, ADODB;type
      PKehu = ^TKehu;
      TKehu = Record
        id: string;
        name: string;
      end;type
      TForm1 = class(TForm)
        ADOConnection1: TADOConnection;
        ADOQuery1: TADOQuery;
        Button1: TButton;
        ComboBox1: TComboBox;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
        FKehu :PKehu;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      combobox1.Items.Clear;
      with adoquery1 do
      begin
        close;
        sql.text := 'select id,name from kehu order by id';
        open;
        while not eof do
        begin
          new(FKehu);
          FKehu.id := FieldByName('id').AsString;
          FKehu.name := FieldByName('name').AsString;
          combobox1.Items.AddObject(FKehu.name,TObject(FKehu));
          next;
        end;
      end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      FKehu := PKehu(combobox1.Items.Objects[combobox1.itemIndex]);
      showmessage(Fkehu.id+'    '+Fkehu.name);
    end;end.