阅读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);
});
答案 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
以下是一些可能有助于解决问题的建议:
open()
之前,检查数据库连接是否为QSqlTableModel
。您可以使用setTable()
获取有关错误的更多信息。
qDebug() << model.lastError();