以前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寫的,也一樣都可以通過.