首页 > 解决方案 > 如何在运行时使用模型切换 SQL 数据库

问题描述

所以我连接到这样的数据库:

db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("database.db");
db.open();

QSqlTableModel model;

这很好,模型指向数据库连接。这是默认连接。请参阅此处的构造函数:

QSqlTableModel::QSqlTableModel(QObject *parent = nullptr, QSqlDatabase db = QSqlDatabase())

现在由于某种原因,我想稍后在程序中设置数据库。所以我尝试了这个:

db = QSqlDatabase::addDatabase("QSQLITE");

QSqlTableModel model;

db.setDatabaseName("database.db");
db.open();

这不起作用。如果我在模型之后直接检查:

qDebug() << db.isOpen()

它返回真。数据库是开放的。

我当时也试过:

db = QSqlDatabase::addDatabase("QSQLITE");

QSqlTableModel model;

db.close()
db.setDatabaseName("database.db");
db.open();

但是该模型仍然没有显示数据库中的任何内容。

这么短的问题:

我的应用程序中有一个指向 SQLDatabase 的模型。当我想切换到另一个数据库时,我是否必须创建一个新模型?

我是否必须销毁整个模型并在其位置创建一个新模型?

标签: c++qt

解决方案


是的,您必须创建另一个模型,因为该模型基于构造函数传递的数据库。


推荐阅读