我在DBGRID里做数据新增的时候,如果使某一个表一个字段的值选自另一个表的字段的所有值,打个比方:
有个字段是单位类别,它分 村,企业,个体,等等,
在我的表里它的值分别是0,1,2
我另外建了一张单位类别表一一对应,使输入数据的时候可选择另外那张表的值对应的中文名称。而更新的时候更新的是它的代码值
谢谢。
有个字段是单位类别,它分 村,企业,个体,等等,
在我的表里它的值分别是0,1,2
我另外建了一张单位类别表一一对应,使输入数据的时候可选择另外那张表的值对应的中文名称。而更新的时候更新的是它的代码值
谢谢。
你自己再改改
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.
每当这个时候,我就怀念起Power build,真是太方便了。
具体代码同意,楼上的