Калкулируемите полета представляват фийлдове, чиято стойност се получава от самата ти програма, а не от базата данни. Стойността им се изчислява в събитието OnCalcFields на дейтасет-а. То се вика за всеки отделен запис, когато трябва да се изчисли стойността му.
Пример - селектираш две числа от базата данни и искаш в трето (калкулируемо) поле да показваш сумата им. Ако двете полета ти се казват F1 и F2 и си си създал калкулируаемо поле F3, то в OnCalcFields на таблицата трябва да напишеш:
procedure TForm1.Table1CalcFields(DataSet: TDataSet);
begin
DataSet.FieldByName('F3').AsFloat := DataSet.FieldByName('F1').AsFloat + DataSet.FieldByName('F2').AsFloat;
end;
Не познавам логиката на твоето приложение и не съм убеден, че използването на калкулируеми полета е най-удачният вариант, но за да го направиш така трябва да напишеш нещо такова:
procedure TForm1.Table1CalcFields(DataSet: TDataSet);
var
ID: Integer;
begin
ID := DataSet.FieldByName('ID_NA_CHOVEK_ILI_FIRMA');
if Is_ID_Na_Firma(ID) then
DataSet.FieldByName('IME_NA_CHOVEK_ILI_FIRMA').AsString := VarToStr(tbFirma.Lookup('ID', ID, 'IME'))
else
DataSet.FieldByName('IME_NA_CHOVEK_ILI_FIRMA').AsString := VarToStr(tbChovek.Lookup('ID', ID, 'IME'));
end;
Другият (по-добрият) вариант е, както ти предлага Vermax, да си вземеш нещата още в заявката.