Mucha gente ha hecho esta pregunta en CSDN antes, pero nadie parece haber dado una respuesta satisfactoria. Me tomó mucho tiempo encontrar la respuesta y ahora la comparto contigo:
PRocedureTForm1.FormCreate(Remitente:TObject);
var
Nuevo campo: TField;
yo: entero;
comenzar
//Hay dos campos en la tabla, SName y Birth. Ahora generamos dinámicamente un campo calculado Edad para mostrar la edad.
NewField:=TStringField.Create(ADOTable);
//Crea un campo de tipo TStringField
ADOTable.Cerrar;
fori:=0toADOTable.Fields.Count-1do
ADOTable.Fields[0].Free;//Liberar todos los campos estáticos
fori:=0toADOTable.FieldDefs.Count-1do
ADOTable.FieldDefs.Items[i].CreateField(ADOTable);
//Generar dinámicamente campos estáticos basados en la información de campo de FieldDefs
Nuevo campo.Tamaño:=5;
NewField.FieldName:='Edad';
NewField.FieldKind:=fkCalculado;
//Establece este campo como un campo calculado
NewField.DataSet:=ADOTable;
//Agrega este campo a ADOTable
ADOTable.Open;
fin;
procedimientoTForm1.ADOTableCalcFields(DataSet:TDataSet);
var
YY1,YY2,MM,DD:Palabra;
TmpDate:TDate;
comenzar
DecodeDate(Fecha,AA1,MM,DD);
TmpDate:=DataSet.FieldByName('Nacimiento').AsDateTime;
DecodeDate(TmpDate,AA2,MM,DD);
DataSet.FieldByName('Edad').AsString:=IntToStr(YY1-YY2)+'año';
//Mostrar edad en OnCalField
fin;
Lo anterior es lo que escribí usando ADO. Al principio lo escribí usando BDE y aun así pasó.
Blog del autor: http://blog.csdn.net/blazingfire/