以前csdn上有好多人问过这个问题,但是好象没有人给出满意的答案。我也是经过好长时间摸索才找到答案,现在在这给大家分享:
procedure tform1.formcreate(sender: tobject);
var
newfield:tfield;
i:integer;
begin
//表中有两字段sname,birth,现在我们动态生成一个计算字段age,显示出年龄
newfield:=tstringfield.create(adotable);
//创建一个tstringfield类型的字段
adotable.close;
for i:=0 to adotable.fields.count-1 do
adotable.fields[0].free;//释放所有的静态字段
for i:=0 to adotable.fielddefs.count-1 do
adotable.fielddefs.items[i].createfield(adotable);
//根据fielddefs的字段信息动态的生成静态字段
newfield.size:=5;
newfield.fieldname:='age';
newfield.fieldkind:=fkcalculated;
//设置这个这字段为计算字段
newfield.dataset:=adotable;
//把这个字段加到adotable上
adotable.open;
end;
procedure tform1.adotablecalcfields(dataset: tdataset);
var
yy1,yy2,mm,dd:word;
tmpdate:tdate;
begin
decodedate(date,yy1,mm,dd);
tmpdate:=dataset.fieldbyname('birth').asdatetime;
decodedate(tmpdate,yy2,mm,dd);
dataset.fieldbyname('age').asstring:=inttostr(yy1-yy2)+'岁';
//在oncalfield中显示出年龄
end;
以上是我用ado写的。一开始我用bde写的,也一样都可以通过.