QTableView мешает транзакциям? |
Здравствуйте, гость ( Вход | Регистрация )
QTableView мешает транзакциям? |
Kagami |
18.12.2009, 17:34
Сообщение
#1
|
Старейший участник Группа: Участник Сообщений: 601 Регистрация: 2.2.2009 Пользователь №: 523 Спасибо сказали: 101 раз(а) Репутация: 9 |
Есть база данных. Она отображается в QTableView с помощью QSqlTableModel и иногда редактируется мной с помощью QSqlQuery. При этом я использую транзакции. И заметил что при вызове QSqlDatabase::commit(), ничего не происходит, база данных сообщает что есть активные запросы. Может ли это влиять модель, которая внутри тоже использует QSqlQuery? Тестовый пример попробую сделать чуть позже.
|
|
|
Litkevich Yuriy |
18.12.2009, 18:52
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
попробуй существующий код, только для QSqlQuery использовать отдельное (самостоятельное) соединение (именованное, а не умалчиваемое).
Возможно, что в Qt одно соединение - одна транзакция |
|
|
trdm |
18.12.2009, 19:53
Сообщение
#3
|
Дмитрий Трошин Группа: Участник Сообщений: 575 Регистрация: 12.1.2008 Пользователь №: 68 Спасибо сказали: 21 раз(а) Репутация: 6 |
QTableView мешает транзакциям? Да, мешает. Где-то даже пост был, где чел анализировал взаимосвязь, не помню, хоть убейте нашел в аське: Цитата trdm (09:33:26 15/04/2008) а, понятно. А сообщение по аське не были видны из-за пыли из под копыт. Я тут тоже на QT подсел, щас с моделями разбираюсь. Кстати, под какой лицензией система? На http://www.crossplatform.ru/ в разделе QT/Бизнес не появится случаем? orefkov (09:36:54 15/04/2008) Об этом даже не задумывались еще. А вот для работы с скл - модели, как показал опыт, мало пригодны. Такой красоты, как ТабличноеПоле (по принципу работы) нетути. При скроллинге таблиц все данные постепенно подтягиваются в клиента. А с SQLite еще хуже - пока открыт select - нельзя сделать коммит транзакции, а в гриде постоянно открыт селект, пока не вычерпаешь его до последней строки. orefkov (09:38:21 15/04/2008) Пришлось писать свою модельку для отображения строк продажи. orefkov (09:38:21 15/04/2008) Пришлось писать свою модельку для отображения строк продажи. trdm (09:50:39 15/04/2008) Модельку или поле? orefkov (09:51:24 15/04/2008) Модельку конечно, поле оно и в африке поле. trdm (09:51:54 15/04/2008) За сведения на счет селекта спасибо, буду знать. orefkov (09:53:44 15/04/2008) Так что при записи в базу sqlite всегда приходится следить, что бы перед коммитом все селекты были закрыты, или выбраны до конца (в этом случае они автоматом закрываются) trdm (09:53:54 15/04/2008) А наследовались от абстрактитеммодел или врукопашную модельку делали? orefkov (09:54:19 15/04/2008) class SCurrentSale : public QAbstractTableModel trdm (09:57:30 15/04/2008) да, любопытно было бы посмотреть. Мне самому предстоит пару табличек обслужить. Правда это не рабочий проект. orefkov (10:01:10 15/04/2008) Ну я делал на таком упрощенном донельзя принципе ТабличногоПоля (это подошло для моего частного случая) - в модели подготавливал параметризированный запрос, получающий ОДНУ строку таблицы, и храню ключ считанной строки (в моем случае он совпадает с номером строки в гриде). Когда грид просит данные, смотрю, если номер строки не совпадает с ключом, выполняю запрос, запоминаю номер строки. После этого возвращаю данные для нужной колонки. может чего намекнет. Сообщение отредактировал trdm - 18.12.2009, 20:15 |
|
|
Kagami |
18.12.2009, 20:30
Сообщение
#4
|
Старейший участник Группа: Участник Сообщений: 601 Регистрация: 2.2.2009 Пользователь №: 523 Спасибо сказали: 101 раз(а) Репутация: 9 |
Я пока так решил проблему в основной программе:
Цитата QSqlTableModel *model = new QSqltableModel();
//настраиваем что надо model->select(); //и сразу же model->query().finish(); |
|
|
MoPDoBoPoT |
18.12.2009, 20:42
Сообщение
#5
|
Участник Группа: Участник Сообщений: 172 Регистрация: 7.5.2009 Из: Москва Пользователь №: 738 Спасибо сказали: 44 раз(а) Репутация: 9 |
Да, такая штука будет, если в таблице больше 255 записей. Чтобы транзакция не висела, можно попробовать вытащить все данные:
Но если данных будет много, то, сам понимаешь, все будет висеть в памяти попробуй существующий код, только для QSqlQuery использовать отдельное (самостоятельное) соединение (именованное, а не умалчиваемое). Кстати, да. Если обременяет тянуть все данные, то осуществляй свое редактирование в другом соединении. |
|
|
Текстовая версия | Сейчас: 8.1.2025, 17:56 |