QSqlQueryModel жалуется, что моя база данных не открыта

Я пытаюсь использовать QSqlQueryModel для получения некоторых значений из моей базы данных, например:

 QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL", "test1");
 db.setHostName(Vars::strDbHost);
 db.setDatabaseName(Vars::strDbName);
 db.setPort(Vars::strDbPort);
 db.setUserName(Vars::strDbUsername);
 db.setPassword(Vars::strDbPassword);

 db.open()

 QSqlQueryModel model;
 model.setQuery(QString("SELECT * FROM users WHERE login=%2").arg(Vars::strUserLogin));

Но я продолжаю получать ошибку QSqlQuery::exec: database not open.

Почему это так и как правильно использовать QSqlQueryModel для получения нужных мне значений?


person dearn44    schedule 11.06.2015    source источник
comment
if (!db.open()) qDebug() << db.lastError().text();. Кроме того, где вы установили модель базы данных?   -  person Amartel    schedule 11.06.2015
comment
Я не добавлял это в вопрос, но убедился, что база данных открыта и не выдает ошибок. На самом деле я пробовал то же самое, но с запросом, и все прошло нормально.   -  person dearn44    schedule 11.06.2015
comment
Вы вызываете неправильную версию setQuery. Это работает только с базами данных, которые имеют имя по умолчанию. В вашем случае вам нужно позвонить void setQuery(const QString &query, const QSqlDatabase &db)   -  person Amartel    schedule 11.06.2015
comment
Нигде! это моя первая попытка, и я как бы пытаюсь понять это из документов.   -  person dearn44    schedule 11.06.2015
comment
Амартел прав. Это распространенная ошибка.   -  person OnWhenReady    schedule 11.06.2015
comment
Я думаю, что сейчас все в порядке. Не могли бы вы превратить свой последний комментарий в ответ.   -  person dearn44    schedule 11.06.2015
comment
@OnWhenReady просто я не смог найти полный пример его использования, поэтому я хотел убедиться, что знаю, что делаю.   -  person dearn44    schedule 11.06.2015


Ответы (1)


Вы вызываете неправильную версию setQuery. Это работает только с базами данных, которые имеют имя по умолчанию. В вашем случае вам нужно позвонить void QSqlQueryModel::setQuery(const QString &query, const QSqlDatabase &db):

model.setQuery(QString("SELECT * FROM users WHERE login=%2").arg(Vars::strUserLogin)
               , db);
person Amartel    schedule 11.06.2015