【问题标题】:QT Application Unexplainable crash with Sqlite INSERT function使用 Sqlite INSERT 函数的 QT 应用程序无法解释的崩溃
【发布时间】:2015-05-05 22:49:39
【问题描述】:

我正在做卡路里计数器应用程序。我是 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、名称、碳水化合物、脂肪、蛋白质、卡路里),qDebug 没有显示任何消息。我尝试了几十种变化,它总是崩溃。 还有加载数据功能完美运行,所以数据库本身很好。更新功能工作正常,但插入总是失败。不知道怎么了。你能告诉我有什么问题吗?

【问题讨论】:

  • 崩溃发生在哪一行?
  • 调试器不提供该信息,如果提供就好了

标签: c++ database qt sqlite


【解决方案1】:

想通了,还需要 1 小时 :D 数据库中的“id”列具有自动增量,即使它们相等,也会与 tableWidget 数据发生冲突。永远不要尝试插入具有自动增量功能的数据列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-29
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    相关资源
    最近更新 更多