Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 为什么参数计数不匹配?_Qt_Qtsql - Fatal编程技术网

Qt 为什么参数计数不匹配?

Qt 为什么参数计数不匹配?,qt,qtsql,Qt,Qtsql,据我所知,这是您的数据库/查询中的一个错误,我已在Sqlite的DB Browser中尝试了以下方法,并且效果良好: UPDATE odgovori SET odgovor="1131" WHERE korisnik_ID="2" AND pitanje_ID="1"; INSERT INTO odgovori (korisnik_ID, pitanje_ID, odgovor) SELECT "2"

据我所知,这是您的数据库/查询中的一个错误,我已在Sqlite的DB Browser中尝试了以下方法,并且效果良好:

    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();
Q_断言(qry.driver()->hasFeature(QSqlDriver::NamedPlaceholders));
q.准备(“更新odgovor集合odgovor=:odgovor,其中korisnik_ID=:korisnik_ID和pitanje_ID=:pitanje_ID;”
“插入odgovori(korisnik_ID,pitanje_ID,odgovor)选择:korisnik_ID,:pitanje_ID,:odgovor WHERE(选择Changes()=0);”;
qry.bindValue(“:odgovor”,odgovor);
qry.bindValue(“:korisnik_ID”,ID);
qry.bindValue(“:pitanje_ID”,QString::number(pitanjeid));
qry.exec();

qDebug()正如@wthung在评论中指出的,我尝试手动插入固定数字,调试器抛出
QSqlError(“21”,“无法一次执行多个语句”,“不是错误”)

所以我把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();

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