![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
Litkevich Yuriy |
![]() ![]()
Сообщение
#1
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Тут порешал для работы с 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 |
![]()
Сообщение
#2
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
mishabard |
![]()
Сообщение
#3
|
Студент ![]() Группа: Участник Сообщений: 31 Регистрация: 13.6.2011 Из: Киев Пользователь №: 2741 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Спасибо! Пока вышел из положения следующим образом: использую QSQLQuery не связанный с моделью TableView, Открываю транзакцию, выполняю запрос на удаление. закрываю транзакцию. после чего обновляю TableView. Может каряво и просто, но надежно работает. |
|
|
lvlad |
![]()
Сообщение
#4
|
Новичок Группа: Новичок Сообщений: 1 Регистрация: 18.6.2012 Пользователь №: 3427 Спасибо сказали: 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 |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 18.2.2025, 18:12 |