crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Обновление нескольких QTableView одновременно
Tarigan
  опции профиля:
сообщение 2.7.2012, 10:21
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 11
Регистрация: 20.4.2012
Пользователь №: 3336

Спасибо сказали: 0 раз(а)




Репутация:   0  


Добрый день.
Есть 1 таблица в БД, 2 QSqlTableModel+QTableView и QSqlQuery+QTablEView подключенные к этой таблице.
//1st model
    phoneModel = new QSqlTableModel(this,db->getDB());
    phoneModel->setEditStrategy(QSqlTableModel::OnFieldChange);
    phoneModel->setTable("ORDERS");
    phoneModel->setFilter(QString("orders.status = 1");
    phoneModel->sort(COLUMN_ORDERS_ORDERDATE,Qt::AscendingOrder);
    phoneModel->select();
    dspPhoneTable->setModel(phoneModel);

    //2nd model
    backModel = new QSqlTableModel(this,db->getDB());
    backModel->setEditStrategy(QSqlTableModel::OnFieldChange);
    backModel->setTable("ORDERS");
    backModel->setFilter(QString("orders.status <> 1");
    backModel->setSort(COLUMN_ORDERS_ORDERDATE,Qt::AscendingOrder);
    backModel->select();
    dspBackTable->setModel(backModel);

    //3rd nodel
    drvModel = new QSqlQueryModel();
    drvModel->setQuery("put_query_here",db->getDB());
    drvActTable->setModel(drvModel);

Как лучше реализовать обновление информации во всех трех моделях при добавлении новой и/или изменении уже имеющейся в 1 или 2?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
sidsukana
  опции профиля:
сообщение 2.7.2012, 11:15
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 158
Регистрация: 23.12.2010
Из: Челябинск
Пользователь №: 2296

Спасибо сказали: 10 раз(а)




Репутация:   2  


Создать слоты в моделях, с которыми соединить сигнал, который вызывать при обновлении?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tarigan
  опции профиля:
сообщение 2.7.2012, 12:06
Сообщение #3


Студент
*

Группа: Новичок
Сообщений: 11
Регистрация: 20.4.2012
Пользователь №: 3336

Спасибо сказали: 0 раз(а)




Репутация:   0  


Спасибо, кэп :)
Проблема у меня именно в реализации слотов с обновлением. Изначально делал submitAll(), но этот вариант никуда не годится.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tarigan
  опции профиля:
сообщение 3.7.2012, 19:28
Сообщение #4


Студент
*

Группа: Новичок
Сообщений: 11
Регистрация: 20.4.2012
Пользователь №: 3336

Спасибо сказали: 0 раз(а)




Репутация:   0  


К примеру, вот:
При добавлении записи в модель 1 срабатывает слот, подключенный к сигналу beforeInsert, в котором значение критерия для выборки в таблицах менятся с 1 на 2. Следовательно запись исчезает из модели 1 и должна появиться в модели 2 (см. 1 пост с описанием моделей). Из модели 1 она действительно исчезает, а в модели 2 появляется только при перезапуске программы. Подключенный к сигналу dataChanged слот ситуацию не спасает:
QObject::connect(phoneModel,SIGNAL(dataChanged(QModelIndex,QModelIndex)),
                     this,SLOT(slot_refreshBackTable()));

void MainWindow::slot_refreshBackTable()
{
    //update 2nd model
    this->backModel->select();
    this->dspBackTable->update();
}


Что я делаю не так?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 4.7.2012, 17:39
Сообщение #5





Гости








    


Какая СУБД? Возможно не происходит коммит в БД на 1 взгляд всё ок.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tarigan
  опции профиля:
сообщение 4.7.2012, 18:18
Сообщение #6


Студент
*

Группа: Новичок
Сообщений: 11
Регистрация: 20.4.2012
Пользователь №: 3336

Спасибо сказали: 0 раз(а)




Репутация:   0  


Firebird 2.5.
Коммит проходит, иначе как после перезапуска приложения данные появляются во второй модели.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 5.7.2012, 9:17
Сообщение #7





Гости








    


dataChanged, и не должен вызываться при добавлении записи. beforeInsert - Before == Перед вставкой.
Попробуй ловить layoutChanged, и если не сработает update, делать reset.
Хотя если данные в обоих таблица одна и та же 2 sql модели это уг вэй.
Вполне достаточно повесить сверху прокси модель, и все проблемы с синхронизацией пропадут сами собой.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 19.4.2024, 10:24