首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QSqlTableModel数据库连接问题

QSqlTableModel数据库连接问题
EN

Stack Overflow用户
提问于 2016-11-07 21:20:32
回答 1查看 642关注 0票数 1

通过阅读QSqlTableModel文档,我看到了两种获得模型的方法:

代码语言:javascript
复制
QSqlTableModel *model = new QSqlTableModel(parentObject, database);

代码语言:javascript
复制
QSqlTableModel model;

在第二种情况下,选择了哪个数据库连接?在这一点上我需要主动连接吗?

我尝试了第二个,使QSqlTableModel model成为类成员。

代码语言:javascript
复制
class MyClass {
    QSqlTableModel model;
public:
    MyClass(){}
public slots:
    onDbConnected(){
        model.setTable("employee");
        bool b = model.select();  
    }
};

但是model.select()以这种方式返回false

相反,我是否应该这样做(在插槽的主体中-而不是让模型成为类成员)?

代码语言:javascript
复制
 QSqlTableModel *model = new QSqlTableModel(parentObject, database);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-08 01:11:14

在第二种情况下,选择了哪个数据库连接?

默认数据库连接被选择.构造函数文档,您可以看到,如果您不指定db参数,它将默认为QSqlDatabase()(这是一个空的无效QSqlDatabase对象):

如果db无效,则将使用默认数据库连接。

默认连接是在调用QSqlDatabase::addDatabase()而不指定connectionName参数时定义的。

在这一点上我需要主动连接吗?

这两种表单都要求模型使用有效的数据库连接。有关如何使用该类的示例,您可以查看表模型示例

通常,您必须在应用程序启动时设置数据库连接。之后,您可以在任何QSqlQuery/QSqlQueryModel/QSqlTableModel.中使用此连接。。。

相反,我是否应该这样做(在插槽的主体中-而不是让模型成为类成员)?

如果您的目标只是将参数传递给成员对象的构造函数,则不需要动态分配对象。这是一个通用的C++连接,您可以在MyClass的构造函数中传递所需的任何参数:

代码语言:javascript
复制
class MyClass {
    QSqlTableModel model;
public:
    MyClass(): model(this, QSqlDatabase::database("mydbconnection")){}
...

这两种方法都应该起作用。选择一个而另一个不需要对select()调用失败做任何事情。就我个人而言,如果不是真正需要的话,我更愿意避免动态分配。您可以通过这个问题进行类似的比较。

model.select()返回false

以下是一些可能有助于解决问题的建议:

  1. 在构建open()之前,检查数据库连接是否为 QSqlTableModel
  2. 检查您是否在中提供了错误的表名
  3. 您可以使用model.lastError()获取有关错误的更多信息。 qDebug() << model.lastError();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40474851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档