【问题标题】:Why does parameter count mismatch?为什么参数计数不匹配?
【发布时间】:2020-09-01 14:14:02
【问题描述】:

据我所知,这是您的数据库/查询中的一个错误,我在 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,得到了相同的结果。我错过了什么?

【问题讨论】:

  • 你如何实例化你的qry 对象?
  • @thibsc QSqlQuery qry;
  • 我真的不会在一个prepare中调用两个sql命令,但我认为你应该调用bindValue六次,而不是三次?
  • @wthung 调用 bindValue 六次也没有用,但我将您的解决方案与我的解决方案结合起来。

标签: qt qtsql


【解决方案1】:

正如 @wthung 在 cmets 中指出的,我尝试手动插入固定数字,调试器抛出 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();

【讨论】:

    猜你喜欢
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 2017-12-31
    • 2012-06-17
    • 1970-01-01
    相关资源
    最近更新 更多