以前CSDN有很多人問過這個問題,但是好像沒有人給出滿意的答案。我也是經過好長時間摸索才找到答案,現在在這裡跟大家分享:
PRocedureTForm1.FormCreate(Sender:TObject);
var
NewField:TField;
i:integer;
begin
//表格中有兩欄位SName,Birth,現在我們動態產生一個計算欄位Age,顯示出年齡
NewField:=TStringField.Create(ADOTable);
//建立一個TStringField類型的字段
ADOTable.Close;
fori:=0toADOTable.Fields.Count-1do
ADOTable.Fields[0].Free;//釋放所有的靜態字段
fori:=0toADOTable.FieldDefs.Count-1do
ADOTable.FieldDefs.Items[i].CreateField(ADOTable);
//根據FieldDefs的字段資訊動態的產生靜態字段
NewField.Size:=5;
NewField.FieldName:='Age';
NewField.FieldKind:=fkCalculated;
//設定這個這字段為計算字段
NewField.DataSet:=ADOTable;
//把這個欄位加到ADOTable上
ADOTable.Open;
end;
procedureTForm1.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寫的,也一樣都可以通過.
作者 Blog: http://blog.csdn.net/blazingfire/