QSqlTableModel数据库连接问题
QSqlTableModel database connection issue
阅读QSqlTableModel文档,我看到了获取模型的两种方法:
QSqlTableModel *model = new QSqlTableModel(parentObject, database);
和
QSqlTableModel model;
在第二种情况下选择哪个数据库连接?我现在需要一个活动连接吗?
我尝试了第二种方法,让QSqlTableModel model
成为班级成员。
class MyClass {
QSqlTableModel model;
public:
MyClass(){}
public slots:
onDbConnected(){
model.setTable("employee");
bool b = model.select();
}
};
但是model.select()
以这种方式返回false
。
我是否应该这样做(在槽的主体中-不使模型成为类成员)?
QSqlTableModel *model = new QSqlTableModel(parentObject, database);
在第二种情况下选择哪个数据库连接?
选择默认的数据库连接。从QSqlTableModel
的构造器文档中,您可以看到,如果您不指定db
参数,它将默认为QSqlDatabase()
(这是一个空的无效QSqlDatabase
对象):
如果db无效,将使用默认的数据库连接。
在不指定connectionName参数的情况下调用QSqlDatabase::addDatabase()
定义默认连接。
此时是否需要一个活动连接?
两个表单都需要一个有效的数据库连接来供模型使用。您可以查看表模型示例,以获得如何使用该类的示例。
通常,必须在应用程序启动时设置数据库连接。之后,您可以在任何QSqlQuery
/QSqlQueryModel
/QSqlTableModel
中使用此连接…
我是否应该这样做(在槽的主体中-不使模型成为类成员)?
如果您的目标只是将参数传递给成员对象的构造函数,则不需要动态分配对象。这是一个通用的c++连接,你可以在MyClass
的构造函数中传递任何你需要的参数:
class MyClass {
QSqlTableModel model;
public:
MyClass(): model(this, QSqlDatabase::database("mydbconnection")){}
...
两种方法都可以。选择其中一个而不是另一个并不需要与select()
调用失败做任何事情。就我个人而言,如果真的不需要动态分配,我宁愿避免它。你可以看一下这个问题,做一个类似的比较。
model.select()
返回false
这里有一些建议可以帮助解决这个问题:
在构建
QSqlTableModel
之前检查数据库连接是否为open()
检查您在
setTable()
中没有提供错误的表名您可以使用
model.lastError()
获取有关错误的更多信息。qDebug() << model.lastError();
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- 如何在多个线程中创建 QSql数据库连接时防止名称冲突
- 数据库连接并将数据从C ++程序保存到MySQL
- 在 C++ 中获取数据库连接
- Firebase C++ Windows 上的实时数据库连接丢失
- 我不能使用 mysql 数据库连接同时使用插入和选择.C++
- C++ Qt SQL lite 数据库连接问题
- C++ 程序中的数据库连接检查
- 在 Windows 问题上连接到企业 WiFi
- 打开与 Qt/C++ 的数据库连接
- 如何修复数据库连接的C 程序运行时间错误(0xc0000005)
- 使用libpq组织PostgreSQL数据库连接参数
- Qt 中的数据库连接池
- Qt-同时处理多个数据库连接
- 使用QT C 为Sevaral表单创建常见的数据库连接
- 将Raspberry Pi 2与外部远程数据库连接
- 是否允许在同一 Sqlite 数据库连接中启动多个事务
- IIS-部署ASP.NET网站和数据库连接
- 没有数据库连接的字符串转义
- QSqlTableModel数据库连接问题