Qt需要调用firebird的存储过程,网上找了下,都是调用 oracle,mssql,mysql的示例,没找到执行firebird存储过程的。
无奈到firebird网站找打firebird语言参考,里面对执行存储过程有详细描述。
fire bird语 法 EXECUTE PROCEDURE procname(参数1,参数2.。。) RETRUN_VALUE 结果1,结果2。。。
这个语法在firebird内部过程,包,函数调用可以使用,但是外部通过Firebird API接口执行SQL语句的时候有差异,会忽略RETURN_VALUE字句,造成不能像oracle,mssql那样条件一句同时绑定输入参数,又绑定返回参数。外部SQL调用的语法就简略为:EXECUTE PROCEDURE procname(参数1,参数2.。。),这个时候firebird存储过程返回值另开辟缓冲区,当作一条记录返回给调用者(类似 select语句结果了),不过只有一行记录,每个记录的字段值就是对应每个参数返回值,记录的虚拟表名,就是存储过程名。
-----参考firebird-30-language-reference 326 页------
Client interfaces usually have an API wrapper that can retrieve the output
values into a single-row buffer when calling EXECUTE PROCEDURE in DSQL.
When DSQL applications call EXECUTE PROCEDURE using the Firebird API or some
form of wrapper for it, a buffer is prepared to receive the output row and the
RETURNING_VALUES clause is not used。
于是执行存储过程,并取得返回值,就成了这样。
QSqlQuery query(myQSqlDatabase);
query.prepare("EXECUTE PROCEDURE PROCE01(:传入参数1) ");
query.bindValue(":传入参数1",参数值);
query.exec();//如果是执行不带返回值的存储过程,到这里就OK了,不需要下面的。
if (query.next())
re=query.record().value("返回值参数名称").toString();//返回值被当作一条返回记录的一个字段值标签:存储,Qt,参数,5.14,返回值,query,firebird From: https://www.cnblogs.com/nativecoder/p/16724977.html
初学Qt,记录一下。