Delphi 101でFireDACを使用しています。ベルリンで、挿入クエリの実行後に_IDENTITY DATA TYPE
_列の最後に挿入されたIDを取得したいのですが、戻り値はempty。
クエリ:INSERT INTO ACC_ACCOUNT_HEAD (ACCOUNT_HEAD_TITLE) VALUES ('TEST') returning ACCOUNT_HEAD_ID;
テーブル構造
_CREATE TABLE ACC_ACCOUNT_HEAD (
ACCOUNT_HEAD_ID INTEGER GENERATED BY DEFAULT AS IDENTITY NOT NULL,
ACCOUNT_HEAD_TITLE VARCHAR(208),
PRIMARY KEY (ACCOUNT_HEAD_ID)
);
_
注:generators で可能であることはわかっていますが、IDENTITY
で可能かどうか知りたいですカラム。
完全なDelphiコード:
_var
aQry : TFDQuery;
begin
aQry := TFDQuery.Create(Self);
aQry.Connection := frmMain.aCon;
aQry.SQL.Text :=
'INSERT INTO ACC_ACCOUNT_HEAD (ACCOUNT_HEAD_TITLE) VALUES (:P1) returning ACCOUNT_HEAD_ID';
aQry.ParamByName('P1').AsString := 'Testing';
aQry.ExecSQL; // or Should I use aQry.Open(); to get returned value???
_
ExecSQLについて Delphi docs をご覧ください。 (太字は私のものです)
ExecSQLは、実行されたSQLステートメントによって影響を受ける行数を反映する整数値を返します。
私はほとんどCBuilder ++(古い)ユーザーですが、次の方法で試すことができます。
aQry.Open();
result := aQry.Fields[0].AsInteger;
aQry.Close();
また、クエリをtry-catchブロックで囲むことをお勧めします。