首页 > 数据库 >利用Qt的QSql模块执行firebird存储过程(Qt 5.14 + firebird 3.0.X)

利用Qt的QSql模块执行firebird存储过程(Qt 5.14 + firebird 3.0.X)

时间:2022-09-24 09:58:38浏览次数:54  
标签:存储 Qt 参数 5.14 返回值 query firebird

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,记录一下。

标签:存储,Qt,参数,5.14,返回值,query,firebird
From: https://www.cnblogs.com/nativecoder/p/16724977.html

相关文章

  • 【代码片段】Qt6.2.4 QProcess使用(打开外部程序,运行命令,同步、阻塞方式)
    参考https://blog.csdn.net/qq_38232598/article/details/100745552https://www.cnblogs.com/lsgxeva/p/12641707.htmlQProcess类QProcess类是Qt中专门用于启动一个......
  • MQTT面试题
    服务质量QoS(QualityofService),指MQTT对消息的服务质量。共有3钟服务质量:QoS=0至多发送一次(网络差的时候消息可能丢失)QoS=1至少发送一次(发送方发送一次消息,接收......
  • Qt-Qt通过QDesktopServices操作外部资源
    相关资料https://download.csdn.net/download/zhujianqiangqq/86666124   CSDN代码下载 .pro1QT+=coregui23greaterThan(QT_MAJOR_VERSION......
  • Qt通过类名动态创建对象(反射机制)
    1 反射机制C#中支持反射机制而C++中不支持,基于QT的元对象系统,之前使用QT的反射机制创建属性表,现学习使用QT通过类名动态创建对象。反射机制的优点:1、反射提高了程序的......
  • Qt-Qt之QSS文件使用
    相关资料https://blog.csdn.net/github_55295425/article/details/126091163  原文地址https://download.csdn.net/download/zhujianqiangqq/86663074   CSDN代......
  • Qt-Qt在开发过程中提示“报错C1189 No Target Architecture”
    相关资料:https://blog.csdn.net/wcc27857285/article/details/85197877 问题现象:有个启动外部bat文件的工程,今天突然想再建个相同功能的工程。代码如“WinExec("D:/a.b......
  • qt 线程的创建和退出
    qt常用的线程创建有两种方法,一种是继承QThread,重写run函数,一种是创建一个业务处理类,moveToThread。我创建了一个widget工程,演示一下。示例地址:https://files-cdn.cnblogs......
  • phthon+qt5
    1.安装phcharm2.Pycharm打开Setiings->PythonInterpreter,选择Add:virtualenvEnvironment-->baseinterpreter:加入本地的phython路径3.安装QT5和工具包命令:pip......
  • 【代码片段】Qt6.2.4 C++ 执行CMD命令
    参考https://blog.csdn.net/vample/article/details/78872587https://blog.csdn.net/liuyukuan/article/details/5974517环境环境版本windows10QT6.2.......
  • 【代码片段】Qt6.2.4 C++ 获取目录与排除指定文件夹
    参考https://www.bilibili.com/video/BV14t411b7EL环境环境版本windows10QT6.2.4QtCreator8.0.1(Community)qmake代码QStringphpD......