我在 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 文档。(粗体是我的)
我主要是 CBuilder++(旧)用户,但您可以尝试使用:
让我建议将查询包含在 try-catch 块中。