是选择 QSqlQuery 未按预期工作

isSelect QSqlQuery not working as expected

本文关键字:工作 选择 QSqlQuery      更新时间:2023-10-16

我有以下代码:

QString req = QString( "dbo.create_bsk @sico = " ) + QString(current_sico.c_str()) + ", @dev_cod='" + local_ccy.c_str() +"'";
QSqlQuery query = db.exec(req);
std::cout << req.toStdString() << std::endl;
std::cout << query.isActive() << std::endl
          << query.isSelect() << std::endl;
if(query.next())
{
    current_bk = query.record().value("bk_cod").toString().toStdString();
    if(current_bk.compare("") != 0)
    {
        std::cout << current_sico << " ==> " << current_bk << std::endl;
    }
}
else
{
    std::cout << "no next" << std::endl;
}

我在执行时得到了这样的东西:

dbo.create_bsk @sico = 1300610792, @dev_cod='EUR'
1
0
no next

而且无论我执行多少次,我都会得到"没有下一个"。然后我复制并粘贴

dbo.create_bsk @sico = 1300610792, @dev_cod='EUR'

进入我最喜欢的SQL编辑器并执行它。它返回一个单元格(一行/一列),列名为"bk_cod",值为"bk38"

然后我再次执行程序并得到:

dbo.create_bsk @sico = 1300610792, @dev_cod='EUR'
1
1
1300610792 ==> bk38

从那里开始,无论我执行多少次,我都会不断得到"1300610792 ==> bk38"。

一些背景

查询create_bsk不是可重入的,它执行更新,以便作为标识符的结果"bk38"为:

  1. 创建
  2. 检索
  3. '
  4. '(空字符串)是单元格值,用于告知购物篮将被忽略并且未生成任何 id

但它总是返回一个单元格。所以根据这里QSqlQuery::next()应该是"true"。

如上所示,无论我执行程序多少次,只要它没有在 sql 编辑器中执行,它总是返回"no next",然后只要我在编辑器中执行它,无论我执行程序多少次,它总是会返回与 ID 相同的"bk_cod"。

我错过了什么?问题在大多数情况下都会发生,但并非一直发生,我无法找出任何模式。

https://bugreports.qt-project.org/browse/QTBUG-34225#comment-218380

这是我用于TDS的驱动程序的问题。