我在DBGRID里做数据新增的时候,如果使某一个表一个字段的值选自另一个表的字段的所有值,打个比方:
有个字段是单位类别,它分 村,企业,个体,等等,
在我的表里它的值分别是0,1,2
我另外建了一张单位类别表一一对应,使输入数据的时候可选择另外那张表的值对应的中文名称。而更新的时候更新的是它的代码值
谢谢。

解决方案 »

  1.   

    调试通过
    你自己再改改
    zz是2个表的公用的字段名
    zzz是你要显示的字段名
    ADOQuery1zzGetText,ADOQuery1zzSetText在字段编辑器中选择一个字段就可以看见了
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      Db, ADODB, Grids, DBGrids, ExtCtrls, DBCtrls;type
      TForm1 = class(TForm)
        ADOConnection1: TADOConnection;
        DataSource1: TDataSource;
        ADOQuery1: TADOQuery;
        ADOQuery2: TADOQuery;
        DBGrid1: TDBGrid;
        ADOQuery1zz: TIntegerField;
        DBNavigator1: TDBNavigator;
        ADOQuery1id: TAutoIncField;
        procedure FormCreate(Sender: TObject);
        procedure ADOQuery1zzGetText(Sender: TField; var Text: String;
          DisplayText: Boolean);
        procedure ADOQuery1zzSetText(Sender: TField; const Text: String);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      ii:array[0..9] of integer;
      ss:array[0..9] of String;
    implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
    Var
      i:integer;
    begin
      i:=0;
      while not ADOQuery2.Eof do
      begin
        ii[i]:=ADOQuery2.FieldbyName('zz').asinteger;
        ss[i]:=ADOQuery2['zzz'];
        DBGrid1.Columns[0].PickList.Add(ADOQuery2['zzz']);
        inc(i);
        ADOQuery2.Next;
      end;
    end;procedure TForm1.ADOQuery1zzGetText(Sender: TField; var Text: String;
      DisplayText: Boolean);
    var
      i:integer;
    begin
      for i:=0 to 9 do
      if ii[i]=ADOQuery1.FieldbyName('zz').asinteger  then
      begin
        Text:=ss[i];
        exit;
      end  
    end;procedure TForm1.ADOQuery1zzSetText(Sender: TField; const Text: String);
    var
      i:integer;
    begin
      for i:=0 to 9 do
      if ss[i]=text then
      begin
        ADOQuery1.FieldbyName('zz').asinteger:=ii[i];
        Exit;
      end;
    end;end.
      

  2.   

    up
    每当这个时候,我就怀念起Power  build,真是太方便了。
      

  3.   

    万分怀念powerbuilder。现在因为工作的关系要用Delphi,但由于自己水平有限,用Delphi很是吃力。
      

  4.   

    呵呵,那个你可以在 需要显示的 formonshow 事件中编写代码来显示
    具体代码同意,楼上的