QSqlError(“0“, “QODBC3: Unable to execute statement“, “[Microsoft][ODBC 驱动程序管理器] 函数序列错误“)

这篇具有很好参考价值的文章主要介绍了QSqlError(“0“, “QODBC3: Unable to execute statement“, “[Microsoft][ODBC 驱动程序管理器] 函数序列错误“)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Qt连接SQL Sever数据库出现 [ODBC 驱动程序管理器] 函数序列错误

平台信息

  • IDE: Qt Creator
  • 数据库: SQL Sever 2019
  • 系统: Windows 10 专业版

问题描述

在使用Qt 的 QDataBase连接SQL Sever的时候,
数据库连接成功,但是执行sql语句时出现问题

  • 错误输出如下
QSqlError("0", "QODBC3: Unable to execute statement", "[Microsoft][ODBC 驱动程序管理器] 函数序列错误")

错误代码的写法

QSqlQuery query(loaclDB);
query.exec(QString("USE Graduation SELECT LoginHistory_TB.ID, LoginHistory_TB.LoginName FROM LoginHistory_TB;");

//这里写了多次的sql执行
if(!query.exec())
{
	qDebug()<<query.lastError();
}
else
{
	while(query.next())
	{
		QString sex = query.value(0).toString();
		QString name = query.value(1).toString();
		qDebug()<<QString("ID: %1 Name: %2").arg(sex).arg(name);
	}
}

原因分析:

  • 这种写法 在读取 sqlite 数据库时候没问题
  • 在SQLSever 里面会出问题

这是因为SQL Sever 数据库还未执行完毕, 但是你的程序又执行了下一条数据库语句。经排查发现是 QSqlQuery 执行sql语句是两条时候 当exec执行完第一条语句后就返回 第二条语句还在执行 所以当执行第三条语句的时候就报错了。

我的上面就连续写了两个 exe函数,导致错误


解决方案:

推荐使用QT官方的写法

 QSqlQuery query("SELECT country FROM artist");
while (query.next()) 
{
	QString country = query.value(0).toString();
	//doSomething(country);
}

上面的代码就可以改为如下文章来源地址https://www.toymoban.com/news/detail-452156.html

QSqlQuery query("USE Graduation SELECT LoginHistory_TB.ID, LoginHistory_TB.LoginName FROM LoginHistory_TB;", dataBase);
while (query.next())
{
	QString sex = query.value(0).toString();
	QString name = query.value(1).toString();
	qDebug()<<QString("ID: %1 Name: %2").arg(sex).arg(name);
}

到了这里,关于QSqlError(“0“, “QODBC3: Unable to execute statement“, “[Microsoft][ODBC 驱动程序管理器] 函数序列错误“)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • exec failed: unable to start container process: exec: “ip“: executable file not found in $PATH

    问题报错: 报错原因:因为该容器的镜像时精简版,内部缺少iproute2导致无法使用ip命令 解决方式: 进入容器 docker exec -it 容器名 /bin/bash 进入后: 更新apt apt-get update 安装iproute2 agt install -y iproute2 安装完以后退出exit docker exec -it 容器名 ip addr  修改后尝试结果: 同理  安装

    2024年02月13日
    浏览(52)
  • 注册中心报错was unable to refresh its cache! status = Cannot execute request on any known server

    错误日志如下: 2023-02-16 14:37:27.527  WARN 119653 --- [freshExecutor-0] c.n.d.s.t.d.RetryableEurekaHttpClient    : Request execution failed with message: java.net.SocketTimeoutException: Read timed out 2023-02-16 14:37:27.527 ERROR 119653 --- [freshExecutor-0] com.netflix.discovery.DiscoveryClient    : DiscoveryClient_WXSMALLPROGRAM/xxx:443/wxs

    2024年02月11日
    浏览(54)
  • 学习狂神docker报错解决:exec failed: unable to start container process: exec: “ip“: executable file not found

    问题:最近学习狂神的docker,34节,网络详解。下载tomcat镜像并启动成功。如图  在使用命令:   docker exec -it tomcat01 ip addr 查看容器ip地址时报错:OCI runtime exec failed: exec failed: unable to start container process: exec: \\\"ip\\\": executable file not found in $PATH: unknown  解决方案:安装工具 iproute

    2024年02月12日
    浏览(44)
  • Error: (‘HY000‘, “[HY000] [Microsoft][ODBC Microsoft Access Driver]General error Unable to open regi

    Error: (\\\'HY000\\\', \\\"[HY000] [Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key Temporary (volatile) Ace DSN for process 0x19e0 Thread 0x3984 DBC 0x6b97a34 Jet\\\'.\\\") 以上是完整报错信息。 在使用pypydobc访问access数据库时报错,找了多种说法都觉不对。 但找到一个有道理的,以下是博主的说法

    2024年02月02日
    浏览(45)
  • error: #268: declaration may not appear after executable statement in block问题解决方法

    在stm32f407编程中遇到了error: #268: declaration may not appear after executable statement in block,编写代码如下: 报错情况: 问题分析: 在c89(1989年)标准中规定了c文件中局部变量的定义只能放在所有执行语句前,放在开头处;c99(1999年)标准中c文件中局部变量的定义可以放在任何地方

    2024年02月13日
    浏览(45)
  • STM32问题_01:declaration may not appear after executable statement in block

    如图:在点灯的过程中想写一个for循环来实现随机数点灯功能,但是如下图第26行的代码出现了问题 “declaration may not appear after executable statement in block” ,翻译过来就是 声明不能出现在块中的可执行语句之后 。其实int i是声明语句,值得注意的是 “GPIO_InitTypeDef GIIOPP” (此

    2024年02月04日
    浏览(37)
  • Keil 报错 declaration may not appear after executable statement in block的解决办法

    在移植修改例程代码时,Keil 报错 “declaration may not appear after executable statement in block”,如下图所示: 经检查代码并没有问题,复制粘贴过来也行不通,说明不是代码本事的问题,应该时编译器的设置的问题。 C语言本身是有ANSI的标准的,但是随着C++的发展,C语言的标准也不

    2024年02月07日
    浏览(48)
  • Prepared statement needs to be re-prepared

    查看打开的表 Opened_tables数值大,说明cache太小,导致要频繁地open table,可以查看下当前的table_open_cache设置 2.查看 table_open_cache 量 mysql 的两个全局变量(打开表的缓存数量,表定义缓存数量)的设置值过小,而你的数据库表数量较多的情况。 此原因是因为 mysql 的变量值设置

    2024年01月18日
    浏览(27)
  • Unable to initialize Git; AggregateError(2) Error: Unable to find git Error: Unable to find git

    MacBook Pro m1 升级系统到13版本后,系统中原有的git突然就不能用了,,,输入git -v 既然打印不到版本号???使用which git 是能打印到配置路径的,,, 解决方案: stack overfolw 帖子地址 然后会跳出一个弹窗让你安装xcode-select 点击安装,自动安装完成,控制台再输入git -v就能

    2024年02月12日
    浏览(85)
  • Portainer连不上docker Unable to retrieve images或Unable to connect to the Docker environment

    系统:Centos docker:23.0.6 portainer:2.19.2 服务器A and 服务器B A,B都有Docker 现象 1、在A上安装了Portainer后,local evironment 可以显示images数量等信息,但无法显示详情,出现Unable to connect to the Docker environment 2、尝试         编辑docker.service         找到 ExecStart字段修改如下  

    2024年04月13日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包