我正在做卡路里计数器应用程序。我是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始终失败。不知道什么是错的。你能告诉我出了什么问题吗?
答案 0 :(得分:0)
想出来,还需要1小时:D 数据库中的“id”列具有自动递增,即使它们相等也会与tableWidget数据发生冲突。切勿尝试INSERT具有自动增量的数据列。