首先有一张表,保存的是基本信息Basic(区域,计量单位,客户类型等)结构如下:
ID NAME TYPE
01 A区  AREA
02 个   UNIT
03 B区  AREA
04 大客 CUSTOMER
05 张   UNIT
06 小客 CUSTOMER
那么在"客户信息"的编辑窗体时有一个COMBOBOX的控件,用于选择客户类型.
保存在数据库"客户信息"表里的客户类型的字段为Basic的ID字段.
求教在窗体页面初始化控件的时候,怎么把客户类型的信息读入COMBOBOX里,然后在保存的时候又怎么操作.
注意:COMBOBOX不是数据感知控件!

解决方案 »

  1.   

    把增加进去的每一条数据用如下格式:Name + ' 足够多的空格,为的是看不到后面的内容' +  Type+' 同样 ' + inttostr(ID)然后取值的时候直接分段取就可以得到全部信息了。
      

  2.   

    完全可以在Combobox的下拉项中显示这样的格式:01|A区,02|个
    这样看起来比较明确。
    读入:
    ComboBox1.Items.Clear;
    with ADOQuery1 do
    begin
      Close;
      SQL.Clear;
      SQL.Add('select * from Basic');
      Open;
      First;
      while not Eof do
      begin
        ComboBox1.Items.Add(FieldByName('ID').AsString+'|'+FieldByName('Name').AsString);
        Next;
      end;
    end;保存:
    ADOQuery2.FieldByName('').AsString := Copy(1,Pos('|',ComboBox1.Text),ComboBox1.Text);
      

  3.   

    可以先定义一个类
    type
      Tcomboboxinfo=class(tobject)
      public
         idstr,namestr,...,typestr:string;
         comid:integer;
      end;
    在"客户信息"的编辑窗体的单元里定义一个动态数组
      obje:array of Tcomboboxinfo;
    在此窗体的Show事件中,代码如下:adoquery1.close;       //把基本信息表中需要的字段查出来,必须有combobox的显示字段和ID 字段
    adoquery1.sql.clear;
    adoquery1.sql.add(select * from 基本信息Basic表);
    adoquery1.prepared;
    adoquery1.open;if adoquery1.isempty then
      exit;
    adoquery1.first;      //移到首记录
    while not adoquery1.eof do 
    begin                   
      setlength(obje,length(obje)+1);        //将当前记录的值放到OBJE数组元素中
      obje:=Tcomboboxinfo.Creat;
      obje[high(obje)].idstr:=adoquery1.fieldname['id'].value;
      obje[high(obje)].namestr:=adoquery1.fieldname['name'].value;
      obje[high(obje)].typestr:=adoquery1.fieldname['type'].value;
      combobox1.additem(adoquery1.fieldname['type'].value,obje[high(obje)]);  //第一个参数为显示字段
      adoquery1.next;
    end;当保存时,根据选择的TYPE,得到ID
    var
     str:string;
     str:=Tcomboboxinfo(combobox1.items.objects[combobox1.itemindex]).idstr;
    然后将得到的ID 保存就行了!