为什么参数计数不匹配?

问题描述

根据我的收集,这是您的数据库/查询中的错误,并且我在sqlite的DB浏览器中尝试了以下操作,并且有效:

    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,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",QString::number(pitanjeid));
qry.exec();