如何使用QSqlQueryModel从SQLite数据库中删除行
How to delete a row from SQLite database using QSqlQueryModel?
我正试图从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
您没有检查它的返回值(bad!bad!),它是false
,表示失败。
它怎么可能实现行删除功能?您的SQL查询可以是任何东西,包括删除行没有任何意义的结果集。
相反,请考虑使用QSqlTableModel
——它可能适用于您的案例,也可能不适用于您,但考虑到您的DELETE
声明的形式,我认为它适用。(QSqlTableModel
仅显示一个表/视图的竞争)。
第二种方法可能已经奏效了您没有看到UI更新这一事实并不意味着什么——您应该检查实际的数据库内容,看看DELETE
语句是否真的起作用并删除了一些内容。
现在请注意,数据库中没有任何内容告诉Qt更新其视图。你需要建立基础设施。现代数据库支持触发器和信号系统(由QSqlDriver::notification
封装在Qt中),可以用于此目的。在其他情况下,您必须手动触发SQL模型的刷新,例如通过调用QSqlTableModel::select()
。
相关文章:
- 如何在我从C++文件中读取后立即删除行
- 从 xtensor 中的视图中删除行
- 从 TXT 文件中删除行不起作用
- 使用正则表达式从文件中删除行注释
- 从文件MQL4删除行
- 使用自定义模型从Qtreeview删除行
- 分段错误从矩阵中删除行
- Qt表小部件,按钮删除行
- 2D矢量-通过搜索删除行
- Armadillo-在立方体中删除行
- c++从文本文件中删除行(需要解释)
- 从简历垫中删除行或列的最佳方法是什么
- 在QTreeView中插入和删除行
- 如何验证是否已在 SQL 服务器中删除行
- QTextEdit插入和删除行的速度非常慢.无论如何,让它更快
- 如何使用QSqlQueryModel从SQLite数据库中删除行
- 在删除行的正常块之后检测到堆损坏
- 在临时指针上使用"delete"后程序崩溃,即使只剩下新行和删除行?
- Qt AbstractItemModel删除行并删除原因核心
- 从MySQL数据库中的选定Datagridview中删除行时出现问题