Russian Qt Forum
Ноябрь 24, 2024, 06:53
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Model-View (MV)
>
Редактирование данных и QSQLQueryModel
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Редактирование данных и QSQLQueryModel (Прочитано 7265 раз)
pichini
Гость
Редактирование данных и QSQLQueryModel
«
:
Июль 23, 2010, 12:20 »
Всем привет!
Помогите новичку. Как правильно переопределить setData? Дайте пример или скажите, где можно посмотреть. Редактирование пока планирую через форму, без использовани edit in place. Саму базу могу обновить через QSQLQuery. А как обновить модель, что-то не разберусь.
Возможно я вообще не правильно к решению задачи подхожу...
PS: QSQLTableModel и QSQLRelationTableModel не походят. Запросы к базе могут быть достаточно сложными и не решаются с помощью этих классов. Единственное, что их объединяет, в запросе есть главная таблица, она и должна редактироваться.
Записан
crossly
Гость
Re: Редактирование данных и QSQLQueryModel
«
Ответ #1 :
Июль 23, 2010, 12:30 »
можно просто использовать update.... при удачном выполнении запроса возвращать true ... и не забывать эмитировать dataChanged...
Записан
pichini
Гость
Re: Редактирование данных и QSQLQueryModel
«
Ответ #2 :
Июль 23, 2010, 12:41 »
Цитата: crossly от Июль 23, 2010, 12:30
можно просто использовать update.... при удачном выполнении запроса возвращать true ... и не забывать эмитировать dataChanged...
Именно так сейчас и сделано, но проблема в том, что список не обновляется, вернее не обновляется модель. Мне бы не хотелось заново делать select к базе по всем данным, так как условия таковы, что редактируется одна строка, известен index строки в модели, и хотелось бы обновить только ее, к тому же позиционирование (выделение) списка должно остаться на этой строке.
Записан
crossly
Гость
Re: Редактирование данных и QSQLQueryModel
«
Ответ #3 :
Июль 23, 2010, 12:48 »
можно прикрутить кэширование аля QSqlTableModel.... и писать в базу по необходимости...
Записан
pichini
Гость
Re: Редактирование данных и QSQLQueryModel
«
Ответ #4 :
Июль 23, 2010, 13:22 »
Цитата: crossly от Июль 23, 2010, 12:48
можно прикрутить кэширование аля QSqlTableModel.... и писать в базу по необходимости...
посмотрел я там, че-то сложно для меня показалось
наверное, вопрос можно по другому поставить, как записать данные в конкретную строку QSQLQueryModel, вернее наследника от него. Затем я вызываю dataChanged и список обновляется.
Записан
mkv
Гость
Re: Редактирование данных и QSQLQueryModel
«
Ответ #5 :
Июль 23, 2010, 14:04 »
может не стоит "лапшу" в код вставлять?
имхо. логика должна быть в субд...
Записан
pichini
Гость
Re: Редактирование данных и QSQLQueryModel
«
Ответ #6 :
Июль 23, 2010, 14:43 »
Цитата: mkv от Июль 23, 2010, 14:04
может не стоит "лапшу" в код вставлять?
имхо. логика должна быть в субд...
не понял о чем вы...
модель строится на основе произвольного запроса, в нем есть "главная" таблица. Необходимо сделать возможность ее редактирования. Пока не стал заморачиваться с edit in place, делагетами и т.д. Нарисовал форму, вызываю ее по некому эвенту, подтверждаю изменения, а вот далее я не знаю как лучше реализовать.
Можно отправить изменения в базу через QSQLQuery и перезачитать данные в модель, но в этой реализации я вижу проблемы: как спозиционироваться на нужной мне записи после того как я перечитаю данные из базы, зачем зачитывать все данные, если менялась одна строка и обновить надо только ее.
Второй путь- это правильно переопределить setData (везде написано что для редактируемой модели нужно переопредеялть setData и flag), но это у меня с ходу не получилось, потому-то и прошу помощи
Записан
crossly
Гость
Re: Редактирование данных и QSQLQueryModel
«
Ответ #7 :
Июль 23, 2010, 14:51 »
Цитата: pichini от Июль 23, 2010, 13:22
Цитата: crossly от Июль 23, 2010, 12:48
можно прикрутить кэширование аля QSqlTableModel.... и писать в базу по необходимости...
посмотрел я там, че-то сложно для меня показалось
наверное, вопрос можно по другому поставить, как записать данные в конкретную строку QSQLQueryModel, вернее наследника от него. Затем я вызываю dataChanged и список обновляется.
ну вообще ничего особо сложного там нету.... просто данные кэшируются в QMap<int row,QSqlRecord rec>... и все... просто нужно переопределить еще и метода data что бы он сначала смотрел в кэш, а если в нем нет то брал из query.... дело в том что querymodel берет данные из QSqlQuery изменить данные которого можно только перечитав... т.е . exec()
Записан
pichini
Гость
Re: Редактирование данных и QSQLQueryModel
«
Ответ #8 :
Июль 23, 2010, 15:00 »
Цитировать
ну вообще ничего особо сложного там нету.... просто данные кэшируются в QMap<int row,QSqlRecord rec>... и все... просто нужно переопределить еще и метода data что бы он сначала смотрел в кэш, а если в нем нет то брал из query.... дело в том что querymodel берет данные из QSqlQuery изменить данные которого можно только перечитав... т.е . exec()
то есть редактируемые формой данные складываются в QMap (реализовать в setData), метод data, который передает данные в tableview, читает изначально из QMap, если в нем нет вызываем QSQLQueryModel::data. Наверное и запись данных в базу стоит определить внутри модели, как то правильнее вроде.
Записан
crossly
Гость
Re: Редактирование данных и QSQLQueryModel
«
Ответ #9 :
Июль 23, 2010, 15:02 »
все верно
Записан
pichini
Гость
Re: Редактирование данных и QSQLQueryModel
«
Ответ #10 :
Июль 23, 2010, 15:05 »
спасибо, буду пробовать.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...