代码之家  ›  专栏  ›  技术社区  ›  catfriendly

QSqlQuery“参数计数不匹配”

  •  0
  • catfriendly  · 技术社区  · 4 年前

    我试图从表单上的六个字段中获取数据,并将用户输入的数据传递到数据库(本地SQLite3数据库)中。ID是一个整数,主键和其余的都是足够长的varchars。在阅读了很多相关的问题之后,我仍然无法弄清楚我的代码哪里出了问题。我已经确认程序已连接到数据库,但我一直收到“参数计数不匹配”。我哪里错了?我使用的是Qt 5.15和C++。TOOL表存在,因为我在SQLite Manager中打开了它,并且已经插入了一个测试行。

    以下是应该提交数据的函数:

    //passes data to database upon clicking submit button
    void Add_item::on_submitButton_clicked()    {
        QString name, location, safety, summary, uses, idNumber;
        idNumber =       ui->testIdBox->text();
        name =           ui->nameField->text();
        location =       ui->locationField->text();
        safety =         ui->safetyField->text();
        summary =        ui->summaryField->text();
        uses =           ui->useField->text();
    
        QSqlQuery qry;
        qry.prepare("INSERT INTO TOOLS (TOOL_ID, TOOL_NAME, TOOL_SUMMARY, TOOL_LOCATION, TOOL_USE, TOOL_SAFETY) "
                    "VALUES (:idNumber, :name, :summary, :location, :uses, :safety)");
        
        //binding all values to prevent sql injection attacks
        qry.bindValue(":idNumber", idNumber);
        qry.bindValue(":name", name);
        qry.bindValue(":summary", summary);
        qry.bindValue(":location", location);
        qry.bindValue(":uses", uses);
        qry.bindValue(":safety", safety);
    
    
        if(qry.exec()){
            QMessageBox::critical(this,tr("Confirmation Message"),tr("Success!"));
        }
        else    {
            QMessageBox::critical(this,tr("Confirmation Message"),tr("Error, data was not saved."), qry.lastError().text());
        }
        connClose();
    }
    

    以下是我连接到数据库的位置:

    //connecting to database
    bool Add_item::connOpen()   {
        QSqlDatabase mydb = QSqlDatabase::addDatabase("QSQLITE");
        mydb.setDatabaseName("C:/Users/laesc/OneDrive/Documents/ToolBuddy/test.db");
        if (mydb.open())    {
            ui->statusLabel->setText("Connected!");
            qDebug()<<("Connected");
            return true;
        }
        else    {
            ui->statusLabel->setText("Connection Not Successful...");
            qDebug()<<("Not Connected");
            return false;
        }
    }
    
    0 回复  |  直到 4 年前
        1
  •  0
  •   catfriendly    4 年前

    对于未来的查看者,我最终将参数的数量减少到2个,查询就成功了。出于这样或那样的原因,如果我试图绑定两个以上的变量,那么查询就不起作用。我只是在做多个查询。