Многие люди уже задавали этот вопрос на CSDN, но, похоже, никто не дал удовлетворительного ответа. Мне потребовалось много времени, чтобы найти ответ, и теперь я делюсь им с вами:
PROcedureTForm1.FormCreate(Отправитель:TObject);
вар
НовоеПоле:TField;
я: целое число;
начинать
//В таблице есть два поля: 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
НовоеПоле.Размер:=5;
NewField.FieldName:='Возраст';
NewField.FieldKind:=fkCalculated;
//Установим это поле как вычисляемое
NewField.DataSet:=ADOTable;
//Добавляем это поле в ADOTable
ADOTable.Открыть;
конец;
процедураTForm1.ADOTableCalcFields(DataSet:TDataSet);
вар
ГГ1,ГГ2,ММ,ДД:Слово;
ТмпДата: ТДата;
начинать
DecodeDate(Дата,ГГ1,ММ,ДД);
TmpDate:=DataSet.FieldByName('Рождение').AsDateTime;
DecodeDate(TmpDate,ГГ2,ММ,ДД);
DataSet.FieldByName('Возраст').AsString:=IntToStr(YY1-YY2)+'год';
//Отображение возраста в OnCalField
конец;
Выше я написал, используя ADO. Сначала я написал его, используя BDE, и все равно прошло.
Блог автора: http://blog.csdn.net/blazingfire/