web-dev-qa-db-ja.com

firebird 3 ID列-最後に挿入されたIDを返します

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???
_
1
0_0

ExecSQLについて Delphi docs をご覧ください。 (太字は私のものです)

ExecSQLは、実行されたSQLステートメントによって影響を受ける行数を反映する整数値を返します。

私はほとんどCBuilder ++(古い)ユーザーですが、次の方法で試すことができます。

aQry.Open();
result := aQry.Fields[0].AsInteger;
aQry.Close();

また、クエリをtry-catchブロックで囲むことをお勧めします。

2
McNets