gpt4 book ai didi

c++ - 如何使用 QSqlQueryModel 从 SQLite 数据库中删除一行?

转载 作者:行者123 更新时间:2023-11-28 05:56:17 28 4
gpt4 key购买 nike

我正在尝试从 QSqlQueryModel 中删除一行,如下所示:

void MainWindow::deleteRecord()
{
int row_index= ui->tableView->currentIndex().row();
model->removeRow(row_index);
}

但它不起作用。

我也尝试了以下方法:

void MainWindow::deleteRecord()
{
int row_index= ui->tableView->currentIndex().row();
if(!db_manager->delete_record(QString::number(row_no))){
ui->appStatus->setText("Error: data deletion ...");
} else{
ui->appStatus->setText("Record deleted ...");
}
}

在db_manager中,函数delete_recod(QString row_no)是:

bool DatabaseManager::delete_record(QString row_index)
{
QSqlQuery query;
query.prepare("DELETE FROM personal_Info WHERE ref_no = (:ref_no)");
query.bindValue(":ref_no",row_index);
if (!query.exec())
{
qDebug() << "Error" << query.lastError().text();
return false;
}
return true;
}

但也不起作用。在这两次尝试中,应用程序都没有崩溃,也没有出现 SQLite 错误。

我做错了什么,我该如何解决?

最佳答案

第一种方法失败了,因为 QSqlQueryModel 没有实现 removeRows您没有检查它的返回值(坏!坏!坏!),即false,表示失败。

它怎么可能实现行删除功能?您的 SQL 查询实际上可以是任何内容,包括删除行没有任何意义的结果集。

相反,请考虑使用 QSqlTableModel - 它或可能不适用于您的情况,但考虑到您的 DELETE 语句的形式,我会说是的。 (QSqlTableModel 仅显示一个表/ View 的内容)。


第二种方法可能已经有效。您没有看到您的 UI 更新这一事实根本不意味着任何东西——您应该检查实际的数据库内容以查看 DELETE 语句实际上起作用并删除了一些东西。

现在请注意,数据库中没有任何内容告诉 Qt 更新其 View 。您需要设置该基础架构。现代数据库支持触发器和信号系统(由 QSqlDriver::notification 包装在 Qt 中),可用于此目的。在其他情况下,您必须手动触发 SQL 模型的刷新,例如通过调用 QSqlTableModel::select()

关于c++ - 如何使用 QSqlQueryModel 从 SQLite 数据库中删除一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34106663/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com