Russian Qt Forum
Ноябрь 24, 2024, 01:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: после установки QSqlQuery в QSqlQueryModel перестаёт работать next()  (Прочитано 3637 раз)
Varan
Гость
« : Февраль 14, 2012, 12:38 »

Если после создания и выполнения QSqlQuery установить её в QSqlQueryModel, то почему-то перестаёт работать QSqlQuery::next().
Странно, потому что в QSqlQueryModel::setModel() вроде передаётся константная ссылка. Что я делаю не так?
Код
C++ (Qt)
QSqlQuery query;
query.exec("<select-запрос>");
 
query.bindValue(":unit_id", params.unit);
query.bindValue(":actual", 1);
query.exec();
// если две след. строки убрать, то next() выполняется
QSqlQueryModel m;
m.setQuery(query);
 
if (query.next()) // не выполняется
{
Записан
Tonal
Гость
« Ответ #1 : Февраль 15, 2012, 08:55 »

Все копии QSqlQuery разделяют общее состояние.
Внутри setQuery происходит копирование запроса и заполнение модели, что приводит к изменению состояния и исходного объекта, т. к. изменилось их разделяемое состояние.
Вообще-то это протекание абстракции и либо должно быть исправлено, либо описано в документации. Улыбающийся
На это намекает дока по setQuery, где написано, что запрос должен быть активным...

Т. е. твоя проблема решается заведением второго объекта запроса (не копированием).
Записан
Varan
Гость
« Ответ #2 : Февраль 15, 2012, 10:05 »

Спасибо за ответ.
Т.е. надо сделать ещё один экземпляр QSqlQuery и снова для него вызывать exec()?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Февраль 15, 2012, 10:10 »

Т.е. надо сделать ещё один экземпляр QSqlQuery и снова для него вызывать exec()?
Да. А зачем оно тебе, если есть модель? У нее и запрашивай данные.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.127 секунд. Запросов: 23.