Firebird TIBQuery插入返回... INTO

top*_*p75 3 delphi firebird c++builder

我有一个带有Generator的firebird 2.x数据库和一个生成关键字段的触发器.我需要从下面的查询中获取返回的值.

INSERT INTO XXXX (vdate,description) values ('"+ VDate +"','"+ Description +"') returning vno INTO :ParamVoucherNo
Run Code Online (Sandbox Code Playgroud)

我尝试了以下代码的几个版本,但它不会破坏我得到

动态sql错误sql错误代码= -104

是否真的可以使用TIBQuery在delphi中获取返回值?

Query1->SQL->Clear();
Query1->SQL->Add("INSERT INTO XXXX (vodate,description) values ('"+ VDate +"','"+ Description +"') returning vno INTO :ParamVoucherNo");

Query1->Params->ParamByName("ParamVoucherno")->ParamType = ptResult;
Query1->Params->ParamByName("ParamVoucherno")->DataType = ftInteger;
Query1->Params->ParamByName("ParamVoucherno")->Value = "";
Query1->Prepare();
Query1->ExecSQL();
Run Code Online (Sandbox Code Playgroud)

有什么建议?

ood*_*ner 5

来自Firebird README.returning:

INTO部分(即变量列表)仅在PSQL中允许(分配局部变量)并在DSQL中被拒绝.

由于IBX使用DSQL,您应该INTO从查询中排除部分.

INSERT ... RETURNINGfor DSQL看起来与调用存储过程相同,后者返回结果集.所以,你必须使用Open而不是ExecSQL.

  • 我对IBX没有经验,但可能它不支持RETURNING子句.这适用于我正在使用的AnyDAC. (2认同)