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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Обновление отображения QSqlQueryModel  (Прочитано 5882 раз)
svjatoslav
Гость
« : Май 23, 2009, 17:36 »

С помощью QTableView отображаются данные представляемые моделью потомком QSqlQueryModel. Данные в базе данных изменяются с помощью SQL-оператора UPDATE или INSERT одним из клиентов. Как сделать чтобы данные, которые отображаются у другого клиента обновлялись. Данные обновляются только после выполнения QSqlQueryModel.setQuery(). Пробовал в функции, вызывающей SQL-оператор выполнять emit DataChange(index,index). Может надо какой-нибудь другой сигнал генерировать, который принудительно вызывает обновление данных отображаемых вьюером.
« Последнее редактирование: Май 23, 2009, 17:39 от svjatoslav » Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #1 : Май 24, 2009, 01:21 »

Что за БД?, в контексте какой транзакции делается чтение и в контексте какой запись? - как настроены параметры транзаций? - видимы ли неподтвержденные данные от одной транзакции в другой транзакцие? Можно это все проверить ин настроить сначала с помощью чужого готовогои инструментария - а потом попробоватьк как надо у себя реализовать.

после этого т.к. в setQuery - набор данных передается по ссылке - то можно попробовать уже потом переооткрывать query (по тймеру или как там надо) - тое есть:

Код:
QSqlQuery query; 
/// подготовка + настройка query

setQuery( query ); // 1 раз

//код ниже повторяющийся когдан надо обновить данные
query.clear();
query.exec();

но сам не делал так - пока не приходилось - так что нужно проверить, можето оно там зачем нибудь копию QSqlQuery создает хотя врят-ли
Записан
svjatoslav
Гость
« Ответ #2 : Май 24, 2009, 06:23 »

База MySQL. На том же клиенте, на котором производилось обновление данных, отображение изменяется вовремя. Другим клиентам новые данные не видны. Если у всех обновлять данные по таймеру, очевидно, все будет работать, когда обновляешь вручную все работает. Спасибо, break'у за совет, завтра попробую и доложу о результатах.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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