これまでに多くの人が CSDN でこの質問をしましたが、誰も満足のいく答えを与えていないようです。答えを見つけるのに長い時間がかかりましたが、今、それを皆さんと共有します。
PROcedureTForm1.FormCreate(Sender:TObject);
変数
新しいフィールド:T フィールド;
i:整数;
始める
//テーブルには SName と Birth という 2 つのフィールドがあります。ここで、年齢を表示する計算フィールド 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:='年齢';
NewField.FieldKind:=fkowned;
//このフィールドを計算フィールドとして設定します
NewField.DataSet:=ADOTable;
// このフィールドを ADOTable に追加します
ADOTable.Open;
終わり;
プロシージャTForm1.ADOTableCalcFields(DataSet:TDataSet);
変数
YY1,YY2,MM,DD:単語;
TmpDate:TDate;
始める
DecodeDate(日付,YY1,MM,DD);
TmpDate:=DataSet.FieldByName('Birth').AsDateTime;
DecodeDate(TmpDate,YY2,MM,DD);
DataSet.FieldByName('Age').AsString:=IntToStr(YY1-YY2)+'year';
//OnCalFieldに年齢を表示
終わり;
上記はADOを使って書いたものです。最初はBDEを使って書いたのですが、それでも通りました。
著者のブログ: http://blog.csdn.net/blazingfire/