Firebird
firebird 3 標識列 - 返回最後插入的 id
我在 Delphi 101.Berlin 中使用 FireDAC,我想
IDENTITY DATA TYPE
在執行插入查詢後獲取最後插入的列 id,但是返回值為空。詢問:
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) );
**注意:**我知道生成器可以,但我想知道
IDENTITY
列是否可以。完整的德爾福程式碼:
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 文件。(粗體是我的)
ExecSQL 返回一個整數值,反映受執行的 SQL 語句影響的行數。
我主要是 CBuilder++(舊)使用者,但您可以嘗試使用:
aQry.Open(); result := aQry.Fields[0].AsInteger; aQry.Close();
讓我建議將查詢包含在 try-catch 塊中。