次のコードがあります。
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' が次のいずれかになるように更新を実行します。
- 作成した
- 取得した
- '' (空の文字列) は、バスケットが無視され、ID が生成されなかったことを示すセル値です。
しかし、それは常に cell を返します。したがって、ここによればQSqlQuery::next() は「true」である必要があります。
そして、上に示したように、プログラムを何度実行しても、SQL エディターで実行されていない限り、常に「次はありません」を返し、エディターで実行するとすぐに、何回実行してもプログラムを実行すると、常に ID と同じ 'bk_cod' が返されます。
何が欠けていますか?問題はほとんどの場合に発生しますが、常に発生するわけではなく、パターンを把握できていません。