QIBASE + транзакции, не возможно выполнить более одного раза |
Здравствуйте, гость ( Вход | Регистрация )
QIBASE + транзакции, не возможно выполнить более одного раза |
Litkevich Yuriy |
18.3.2010, 20:42
Сообщение
#1
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Тут порешал для работы с Firebird'ом воспользоваться драйвером QIBASE, до этого работал через QODBC.
Наткнулся на проблему, более одного раза (!) не могу воспользоваться транзакцией. Выжимка из кода: такой код почему-то срабатывает только один раз, если его вызвать повторно, то на model->submitAll() возникает ошибка.В Qt 4.4.3: "QSqlError(-901, "Unable to execute query", "Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements")" В Qt 4.6.0: "QSqlError(-901, "Unable to execute query", "invalid transaction handle (expecting explicit transaction start)")" Без транзакций всё работает как в аптеке, а также с транзакциями через QODBC. Пробовал какую-то не свежую версию QFirebird, которую выкладывал один человек на прогорге, они просто падает на первой же транзакции (model->submitAll()) Может кто-нибудь просветить в чём проблема? Окружение Firebird - 2.1.2.18118 Windows 2000 SP4 |
|
|
Litkevich Yuriy |
4.7.2011, 19:55
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
mishabard |
6.7.2011, 15:12
Сообщение
#3
|
Студент Группа: Участник Сообщений: 31 Регистрация: 13.6.2011 Из: Киев Пользователь №: 2741 Спасибо сказали: 0 раз(а) Репутация: 0 |
Спасибо! Пока вышел из положения следующим образом: использую QSQLQuery не связанный с моделью TableView, Открываю транзакцию, выполняю запрос на удаление. закрываю транзакцию. после чего обновляю TableView. Может каряво и просто, но надежно работает. |
|
|
lvlad |
18.6.2012, 14:35
Сообщение
#4
|
Новичок Группа: Новичок Сообщений: 1 Регистрация: 18.6.2012 Пользователь №: 3427 Спасибо сказали: 0 раз(а) Репутация: 0 |
чтобы исправить проблему необходимо в файле qsqltablemodel.cpp
в методе QSqlTableModelPrivate::exec закомментировать строку: if (editQuery.driver() != db.driver()) bool QSqlTableModelPrivate::exec(const QString &stmt, bool prepStatement, const QSqlRecord &rec, const QSqlRecord &whereValues) { if (stmt.isEmpty()) return false; // lazy initialization of editQuery //-->> if (editQuery.driver() != db.driver()) <<-- editQuery = QSqlQuery(db); После этого придется перекомпировать Qt или модуль QtSql |
|
|
Текстовая версия | Сейчас: 28.3.2024, 12:37 |