次のことを試してください。年齢が日数で返されます。
SELECT *, CINT(Now()-[Birth Date]) as AGE FROM TableName
年の年齢のために使用:
SELECT *, INT((Now()-[Birth Date]) / 365.242199) as AGEYRS from TableName
(注、CINTは丸めますが、INTは丸めません)
これが機能する理由は、ACCESSがDelphiと同様の方法で日付/時刻を浮動小数点数として格納するためです。ここで、整数部分は特定の日からの日数であり、小数部分はその日の小数部分です(0.25 =午前6時、0.50 =正午など)。したがって、2日間の違いを知りたい場合は、日数の違いを取得します...年数については、これを1年の日数で割ります。
編集
ここでのもう1つのオプションは、Delphiで計算フィールドを作成し、そこでロジックを実行することです。onCalculatedイベントでは、次のようにコーディングします。
procedure TForm1.ds1CalcFields(DataSet: TDataSet);
begin
DataSet.FieldByName('CALCDATE').AsInteger :=
Trunc((Date - DataSet.FieldByName('BIRTH DATE').AsDateTime) / 365.242199);
end;
編集
そしてまだ3番目の方法。更新が現在のように機能することを許可するのではなく、動作をオーバーライドし、ナビゲーターのonClickを使用してデータセットのクローズ/再オープンを強制します。
procedure TForm1.dbnvgr1Click(Sender: TObject; Button: TNavigateBtn);
begin
if Button = nbRefresh then
begin
ds1.Close;
ds1.Open;
end;
end;