QT应用程序使用Sqlite INSERT函数无法解释崩溃

时间:2015-05-05 22:49:39

标签: c++ database qt sqlite

我正在做卡路里计数器应用程序。我是QT的新手,这个错误太难以弄明白了。我一直在思考超过3小时而且没有。 这是导致错误的函数

 bool MainWindow::saveDB()
{
    loading = true;
    QSqlQuery q(db);
    q.exec("DELETE FROM Food");
    q.prepare("INSERT INTO Food(id,Name,Carbohydrates,Fats,Proteins,Calories) VALUES(:id,:n,:c,:f,:p,:cal)");
        for(int i = 0; i < 1; i++)
        {
                     q.bindValue(":n",ui->tableWidget->item(i,1)->text());
                     q.bindValue(":c",ui->tableWidget->item(i,2)->text().toInt());
                     q.bindValue(":f",ui->tableWidget->item(i,3)->text().toInt());
                     q.bindValue(":p",ui->tableWidget->item(i,4)->text().toInt());
                     q.bindValue(":cal",ui->tableWidget->item(i,5)->text().toInt());
                     q.bindValue(":id",ui->tableWidget->item(i,0)->text().toInt());
             if(!q.exec())
             {
                 qDebug() << q.lastError().text();
                 loading = false;
                 return false;
             }
        }
    loading = false;
    return true;
}

应该清除数据库,然后插入tableWidget中的值。

应用输出

 The program has unexpectedly finished.
D:\Calc\build-CalcProto-Desktop_Qt_5_4_1_MinGW_32bit-Debug\debug\CalcProto.exe crashed

db是我的QSqlDatabase对象。 数据显示在tableWidget中,它有6列,(id,Name,Carbohydrates,Fats,Proteins,Calories),qDebug没有显示任何消息。我尝试了几十种变体,它总是崩溃。 还有加载数据功能,它可以很好地工作,所以数据库本身就很好。更新功能正常,但INSERT始终失败。不知道什么是错的。你能告诉我出了什么问题吗?

1 个答案:

答案 0 :(得分:0)

想出来,还需要1小时:D 数据库中的“id”列具有自动递增,即使它们相等也会与tableWidget数据发生冲突。切勿尝试INSERT具有自动增量的数据列。