我有一个带有Generator的firebird 2.x数据库和一个生成关键字段的触发器. 我需要从下面的查询中获取返回的值. INSERT INTO XXXX (vdate,description) values ('"+ VDate +"','"+ Description +"') returning vno INTO
我需要从下面的查询中获取返回的值.
INSERT INTO XXXX (vdate,description) values ('"+ VDate +"','"+ Description +"') returning vno INTO :ParamVoucherNo
我尝试了以下代码的几个版本,但它不会破坏我得到
Dynamic sql error sql error code = -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();
有什么建议?
来自Firebird README.returning:The INTO part (i.e. the variable list) is allowed in PSQL only (to
assign local variables) and rejected in DSQL.
由于IBX使用DSQL,您应该从查询中排除INTO部分.
INSERT … RETURNING for DSQL看起来与调用存储过程相同,后者返回结果集.因此,您必须使用Open而不是ExecSQL.