QSqlTableModel пустой результат - PullRequest
3 голосов
/ 14 декабря 2010

Если я сделаю это:

QSqlQuery searchQuery(QString("select * from people where id = %1").arg(1));
if (searchQuery.next())
  {
  std::cout << "Name: " << searchQuery.value(1).toString().toStdString() << std::endl;
  }

Вывод (как и ожидалось):

Name: David

Однако, если я сделаю это:

 QSqlTableModel *model = new QSqlTableModel;
    // Set used table
    model->setTable("people");
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
// Set where clause
model->setFilter(QString("id=%1").arg(1));
model->select();

// Read result
QSqlRecord record = model->record();
if (!record.isEmpty())
  {
  std::cout << "Name from model: " << record.value(1).toString().toStdString();
  }

Запись не пуста, но вывод пуст:

Name from model: 

Кто-нибудь может увидеть, что я сделал неправильно, используя QSqlTableModel?

Кроме того, с обоими методами я не понимаю, как вам не нужно указывать ему, какую базу данных использовать (т. Е. Я создаю экземпляр QSqlDatabase и .open (), но я никогда не советую запросу работать с базы данных?)

Спасибо

David

1 Ответ

3 голосов
/ 14 декабря 2010
QSqlRecord record = model->record();

Вы используете QSqlQueryModel :: record () , которая возвращает «пустую» запись вместо QSqlQueryModel :: record (int row). Получаемая вами запись не является пустой: из нее можно получить номер и имя полей, возвращаемых запросом.

С помощью QSqlQuery или QSqlTableModel вы можете указать, какое соединение с базой данных использовать (см. Конструкторы QSqlTableModel или QSqlQuery). В противном случае используется соединение с базой данных по умолчанию: см. документация QSqlDatabase . Если вы явно не дали ему имя, открытое соединение является соединением по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...