QSqlTableModel数据库连接问题

时间:2016-11-07 21:20:33

标签: c++ qt c++11 qt5 c++14

阅读QSqlTableModel documentation我看到了两种获取模型的方法:

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);

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

$("#addname").click(function() {

  htmlstring = "<tr>";
  htmlstring += "<td><input class='form-control' type='input' placeholder='First Name' name='fname' /></td>";
  htmlstring += "<td><input class='form-control' type='input' placeholder='Last Name' name='lname' /></td>";
  htmlstring += "</tr>";
  $("#listofnames").after(htmlstring);

});

1 个答案:

答案 0 :(得分:0)

  

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

选择默认数据库连接。QSqlTableModel's constructor documentation,您可以看到,如果您未指定db参数,则默认为{{3} }(这是一个空的无效QSqlDatabase对象):

  

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

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

  

此时我是否需要有效连接?

两种形式都需要模型使用有效的数据库连接。您可以查看QSqlDatabase::addDatabase()以获取有关如何使用该类的示例。

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

  

我应该(在插槽的主体中 - 不使模型成为类成员)吗?

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

class MyClass {
    QSqlTableModel model;
public:
    MyClass(): model(this, QSqlDatabase::database("mydbconnection")){}
...

两种方法都应该完成这项工作。选择一个而不是select()调用失败,无需执行任何操作。就个人而言,如果不是真的需要,我宁愿避免动态分配。您可以查看Table Model Example进行类似的比较。

  

model.select()返回false

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

  1. 在构建open()之前,检查数据库连接是否为QSqlTableModel
  2. 检查您是否在this question中未提供错误的表格名称
  3. 您可以使用setTable()获取有关错误的更多信息。

    qDebug() << model.lastError();