2016-05-12 51 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