0

次のコードがあります。

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エディタに入れて実行してください。1 つのセル (1 行/1 列) を返します。列の名前は「bk_cod」で、値は「bk38」です。

次に、プログラムを再度実行すると、次のようになります。

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

そして、そこから何度実行しても「1300610792 ==> bk38」を取得し続けます。

いくつかのコンテキスト

クエリ create_bsk は再入可能ではありません。識別子である結果 'bk38' が次のいずれかになるように更新を実行します。

  1. 作成した
  2. 取得した
  3. '' (空の文字列) は、バスケットが無視され、ID が生成されなかったことを示すセル値です。

しかし、それは常に cell を返します。したがって、ここによればQSqlQuery::next() は「true」である必要があります。

そして、上に示したように、プログラムを何度実行しても、SQL エディターで実行されていない限り、常に「次はありません」を返し、エディターで実行するとすぐに、何回実行してもプログラムを実行すると、常に ID と同じ 'bk_cod' が返されます。

何が欠けていますか?問題はほとんどの場合に発生しますが、常に発生するわけではなく、パターンを把握できていません。

4

1 に答える 1