【问题标题】:QSqlQuery causing ODBC Function sequence errorQSqlQuery 导致 ODBC 函数序列错误
【发布时间】:2018-03-25 03:08:11
【问题描述】:

我搜索了 SO 和 Google,但在这个问题上没有找到太多帮助。这似乎是由于 ODBC 函数被乱序调用。但是由于我使用的是包装了 ODBC 的 QSql,所以我很难找到这个函数。请帮忙...

  • 我能够连接到 sql server 数据库
  • 我测试了一个非常简单的查询,但仍然出现错误。我不认为这是由于列绑定。
  • 我可以用sql server运行查询,所以我认为sql查询没问题。

    1. 我正在使用的工具:

VS c++ 2017、CMake、Qt 5.09.2、sql server 2017

  1. 以下是错误信息:

    QODBCResult::exec: 无法执行语句:“[Microsoft][ODBC Driver Manager] Function sequence error” QSqlError("0", "QODBC3: 无法执行语句", "[Microsoft][ODBC Driver Manager] 函数序列错误")

  2. 测试编码:

此编码生成上面的错误消息。

int main()
{
    QSqlDatabase GUIInpDB = QSqlDatabase::addDatabase("QODBC", "MainSQLDB");
    GUIInpDB.setConnectOptions();
    QString inpSqlServer = "DESKTOP-085AEA8\\SQLEXPRESS";
    QString dbName = "test";
    QString connString = QString("Driver={ODBC Driver 13 for SQL Server};Server=%1;DATABASE=%2;Trusted_Connection=Yes;")
        .arg(inpSqlServer).arg(dbName); //the argument replace the %1 and %2
    GUIInpDB.setDatabaseName(connString);
    QSqlDatabase db = QSqlDatabase::database("MainSQLDB");

    if (!db.open())
    {
        qDebug() << "Connection for db not working";
        return 1;
    }
    QSqlQuery query("SELECT * FROM TBL.tbl_test", db);  
    if (!query.exec())
        qDebug() << query.lastError();

    int num_of_rows = query.size();

    getchar();
    return 0;
}

【问题讨论】:

  • 在创建QSqlQuery之前尝试QCoreApplication::processEvents()QTBUG-54880
  • @MohammadKanan 我添加了“QCoreApplication::processEvents();”在 QSqlQuery 之前。我还尝试按照错误报告的建议使用 query.exec(...) ,但仍然出现相同的错误。请帮忙...

标签: c++ sql-server qt odbc


【解决方案1】:

我发现这个关于 QtCenter 的讨论可能会对你有所帮助,即使我怀疑它为什么解决了这个问题 您可能会尝试使用未按上述方式执行的 QSqlQuery 构造函数

http://www.qtcentre.org/threads/18832-ODBC-function-sequence-error

【讨论】:

  • @sanwood 谢谢你,这很有效!我以为我已经避免了两次查询,但我显然没有!
  • 只是总结并从 QtCentre 链接中提取解决方案:问题是查询执行了两次:一次在 QSqlQuery ctor 中,然后第二次在 exec() 方法中。解决方案是调用没有查询字符串的构造函数 (QSqlQuery query(db);),然后将查询字符串作为 exec() 的参数,或者删除 query.exec() 调用,将查询字符串留在构造函数中。
猜你喜欢
  • 2016-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-07
相关资源
最近更新 更多