Qt:通过视图更新数据库模型
Qt: updating database model through view
当我尝试通过视图更新 SQLite 数据库时遇到了一个奇怪的行为。根据我使用的编辑策略,我可以更新视图或更新数据库,但我无法更新数据库并让视图显示新值。
基本上,我使用以下代码:
auto sdb = QSqlDatabase::addDatabase("QSQLITE");
sdb.setDatabaseName("database.db");
QSqlTableModel *model = new QSqlTableModel(0, sdb);
model->setTable("table");
//model->setEditStrategy(QSqlTableModel::OnFieldChange);
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->select();
QTableView *tv = new QTableView();
tv->setModel(model);
tv->show();
// I'm not sure, this connect statement is needed.
// Either way, it does not change the behavior of the problem I observe
connect(model,
SIGNAL(dataChanged(const QModelIndex &,
const QModelIndex &,
const QVector<int> &)),
tv,
SLOT(dataChanged(const QModelIndex &,
const QModelIndex &,
const QVector<int> &)));
当我使用QSqlTableModel::OnManualSubmit
视图发生变化,但基础数据库没有更新。 IE。重新启动应用程序(或重新加载数据库)不会更新该字段。我想这很明显,因为我必须手动 'submit' 对基础数据库的更改。
当我使用QSqlTableModel::OnFieldChange
编辑视图后按回车键后,视图(针对编辑的行)变为空白。底层数据库得到更新,我可以在数据库中看到,但不知何故视图没有获得新值。
看来我的问题是 SQLite 数据库中的其中一列缺少 'PRIMARY KEY'。通过编辑视图,数据库可以成功更新,但不知何故更改没有正确转发到视图
创建一个新的 table 并将其中一个列作为主键,问题就解决了。
当我尝试通过视图更新 SQLite 数据库时遇到了一个奇怪的行为。根据我使用的编辑策略,我可以更新视图或更新数据库,但我无法更新数据库并让视图显示新值。
基本上,我使用以下代码:
auto sdb = QSqlDatabase::addDatabase("QSQLITE");
sdb.setDatabaseName("database.db");
QSqlTableModel *model = new QSqlTableModel(0, sdb);
model->setTable("table");
//model->setEditStrategy(QSqlTableModel::OnFieldChange);
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->select();
QTableView *tv = new QTableView();
tv->setModel(model);
tv->show();
// I'm not sure, this connect statement is needed.
// Either way, it does not change the behavior of the problem I observe
connect(model,
SIGNAL(dataChanged(const QModelIndex &,
const QModelIndex &,
const QVector<int> &)),
tv,
SLOT(dataChanged(const QModelIndex &,
const QModelIndex &,
const QVector<int> &)));
当我使用QSqlTableModel::OnManualSubmit
视图发生变化,但基础数据库没有更新。 IE。重新启动应用程序(或重新加载数据库)不会更新该字段。我想这很明显,因为我必须手动 'submit' 对基础数据库的更改。
当我使用QSqlTableModel::OnFieldChange
编辑视图后按回车键后,视图(针对编辑的行)变为空白。底层数据库得到更新,我可以在数据库中看到,但不知何故视图没有获得新值。
看来我的问题是 SQLite 数据库中的其中一列缺少 'PRIMARY KEY'。通过编辑视图,数据库可以成功更新,但不知何故更改没有正确转发到视图
创建一个新的 table 并将其中一个列作为主键,问题就解决了。