2016-05-12 42 views
0

我有一个QSqlDatabase:(我可以在MySQL Workbench中登录的密码和我使用的用户名,所以我认为他们是正确的)QSqlQueryModel不起作用

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); 
db.setHostName("localhost"); 
db.setDatabaseName("something"); 
db.setUserName("username"); 
db.setPassword("password"); 

QSqlDatabase::database().open(); 

它返回true,所以打开成功。但接下来的代码不起作用:

QSqlQueryModel* model = new QSqlQueryModel(); 
model->setQuery("select user_id, name, password, level from user where user_id = 'user' and password = 'password'"); 

现在model->rowCount等于0(我不知道为什么)和

model->index(0, 0).data() == "username" && 
      model->index(0, 2).data() == "password" 

返回false。有人知道这里可能是什么问题吗?

+0

你确定你的'user'表不是空的吗?你确定表中至少有一行'user_id'是*'user' *和'password'是*'password' *?尝试在MySQL Workbench中执行你的查询,看看它是否有结果。 。 。 – Mike

回答

0

QSqlQueryModel将在创建查询后执行,然后执行setQuery()。我想你忘了创建查询和exec()吧。

所以:

QSqlQuery query; 
if(query.exec("select user_id, name, password, level from user where user_id = 'user' and password = 'password'")) 
    model->setQuery(query); 

如果您想更新模型,你可以使用:

model->query()->exec(); 
model->setQuery(model->query()); 

我的建议 - 让自己的类从QSqlQueryModel和你想要做什么用更少的代码。

+0

我必须使用QSqlQueryModel并根据QT文档我的代码是正确的。 :( – Supercat

+2

你的代码是不正确的,因为你没有执行查询,Doc明确指出模型将使用ACTIVE查询,查询仅在EXECUTED时才有效 – OnWhenReady

+0

@OnWhenReady,他发布的代码是正确的,他正在使用['QSqlQueryModel :: setQuery(const QString&query)'](http://doc.qt.io/qt-5/qsqlquerymodel.html#setQuery-1)而不是['QSqlQueryModel :: setQuery(const QSqlQuery&query )'](http://doc.qt.io/qt-5/qsqlquerymodel.html#setQuery)。 – Mike