You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt6调用QSqlTableModel的setTable时出现QODBCDriver句柄分配错误求助

问题描述

在Qt6环境中已成功连接SQL Server并打开数据库,但调用QSqlTableModel::setTable时出现错误:QODBDriver::record: Unable to allocate handle,相关代码如下:

{
    tabModel = new QSqlTableModel(this, DB);
    tabModel->setTable(QString("Book"));
    if (! tabModel->select()) {
        QMessageBox::critical(this, "Error message", "Opening database table error, Errormessage:\n"+ tabModel->lastError().text());
        qDebug() << tabModel->lastError().text();
        return;
}
错误产生的常见原因
  • 数据库连接对象异常:尽管表面连接成功,但DB连接对象可能已失效——比如连接被隐性关闭、对象生命周期结束(如DB是局部变量已销毁),导致QSqlTableModel无法基于有效连接获取句柄。
  • ODBC驱动不兼容:Qt6对ODBC驱动的架构、版本要求严格,若使用的SQL Server ODBC驱动与Qt编译架构(32/64位)不匹配,或驱动版本过旧未适配Qt6,会引发句柄分配失败。
  • 表定位或权限问题:
    • 表名Book可能未指定schema(如SQL Server中默认的dbo.Book),导致驱动无法定位目标表;或表名存在拼写错误。
    • 当前连接账号无Book表的访问权限,驱动尝试获取表结构失败,间接触发句柄分配错误。
  • Qt6 ODBC驱动bug:部分Qt6版本的ODBC驱动存在句柄管理缺陷,尤其在搭配高版本SQL Server时。可尝试升级Qt到最新补丁版,或改用Qt原生SQL Server驱动测试。
  • ODBC资源耗尽:之前的数据库操作未正确释放句柄(如未关闭的QSqlQuery、未销毁的QSqlTableModel),导致系统ODBC资源不足,无法分配新句柄。

内容的提问来源于stack exchange,提问作者restrain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 16:42:36