为什么参数计数不匹配?
Why does parameter count mismatch?
据我所知,这是你的 database/query 中的一个错误,我已经在 DB Browser for Sqlite 中尝试了以下操作并且有效:
UPDATE odgovori SET odgovor="1131" WHERE korisnik_ID="2" AND pitanje_ID="1";
INSERT INTO odgovori (korisnik_ID, pitanje_ID, odgovor) SELECT "2", "1", "1" WHERE (SELECT Changes()=0);
但是,当我在 QT 中尝试这个时:
Q_ASSERT(qry.driver()->hasFeature(QSqlDriver::NamedPlaceholders));
qry.prepare("UPDATE odgovori SET odgovor=:odgovor WHERE korisnik_ID=:korisnik_ID AND pitanje_ID=:pitanje_ID;"
"INSERT INTO odgovori (korisnik_ID, pitanje_ID, odgovor) SELECT :korisnik_ID, :pitanje_ID, :odgovor WHERE (SELECT Changes()=0);");
qry.bindValue(":odgovor", odgovor);
qry.bindValue(":korisnik_ID", id);
qry.bindValue(":pitanje_ID", QString::number(pitanjeid));
qry.exec();
qDebug()<<qry.lastError();
我得到 QSqlError("", "Parameter count mismatch", "")
。我已经尝试使用 ?
和 qry.addBindValue
,我得到了相同的结果。我错过了什么?
正如 @wthung 在评论中指出的那样,我尝试手动插入固定数字,调试器抛出 QSqlError("21", "Unable to execute multiple statements at a time", "not an error")
所以我把 qry 分成两部分,它起作用了。
qry.prepare("UPDATE odgovori SET odgovor=:odgovor WHERE korisnik_ID=:korisnik_ID AND pitanje_ID=:pitanje_ID;");
qry.bindValue(":odgovor", odgovor);
qry.bindValue(":korisnik_ID", id);
qry.bindValue(":pitanje_ID", QString::number(pitanjeid));
qry.exec();
qry.prepare("INSERT INTO odgovori (korisnik_ID, pitanje_ID, odgovor) SELECT :korisnik_ID, :pitanje_ID, :odgovor WHERE (SELECT Changes()=0);");
qry.bindValue(":odgovor", odgovor);
qry.bindValue(":korisnik_ID", id);
qry.bindValue(":pitanje_ID", QString::number(pitanjeid));
qry.exec();
据我所知,这是你的 database/query 中的一个错误,我已经在 DB Browser for Sqlite 中尝试了以下操作并且有效:
UPDATE odgovori SET odgovor="1131" WHERE korisnik_ID="2" AND pitanje_ID="1";
INSERT INTO odgovori (korisnik_ID, pitanje_ID, odgovor) SELECT "2", "1", "1" WHERE (SELECT Changes()=0);
但是,当我在 QT 中尝试这个时:
Q_ASSERT(qry.driver()->hasFeature(QSqlDriver::NamedPlaceholders));
qry.prepare("UPDATE odgovori SET odgovor=:odgovor WHERE korisnik_ID=:korisnik_ID AND pitanje_ID=:pitanje_ID;"
"INSERT INTO odgovori (korisnik_ID, pitanje_ID, odgovor) SELECT :korisnik_ID, :pitanje_ID, :odgovor WHERE (SELECT Changes()=0);");
qry.bindValue(":odgovor", odgovor);
qry.bindValue(":korisnik_ID", id);
qry.bindValue(":pitanje_ID", QString::number(pitanjeid));
qry.exec();
qDebug()<<qry.lastError();
我得到 QSqlError("", "Parameter count mismatch", "")
。我已经尝试使用 ?
和 qry.addBindValue
,我得到了相同的结果。我错过了什么?
正如 @wthung 在评论中指出的那样,我尝试手动插入固定数字,调试器抛出 QSqlError("21", "Unable to execute multiple statements at a time", "not an error")
所以我把 qry 分成两部分,它起作用了。
qry.prepare("UPDATE odgovori SET odgovor=:odgovor WHERE korisnik_ID=:korisnik_ID AND pitanje_ID=:pitanje_ID;");
qry.bindValue(":odgovor", odgovor);
qry.bindValue(":korisnik_ID", id);
qry.bindValue(":pitanje_ID", QString::number(pitanjeid));
qry.exec();
qry.prepare("INSERT INTO odgovori (korisnik_ID, pitanje_ID, odgovor) SELECT :korisnik_ID, :pitanje_ID, :odgovor WHERE (SELECT Changes()=0);");
qry.bindValue(":odgovor", odgovor);
qry.bindValue(":korisnik_ID", id);
qry.bindValue(":pitanje_ID", QString::number(pitanjeid));
qry.exec();