crossplatform.ru

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

> QIBASE + транзакции, не возможно выполнить более одного раза
Litkevich Yuriy
  опции профиля:
сообщение 18.3.2010, 20:42
Сообщение #1


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Тут порешал для работы с Firebird'ом воспользоваться драйвером QIBASE, до этого работал через QODBC.
Наткнулся на проблему, более одного раза (!) не могу воспользоваться транзакцией. Выжимка из кода:
model->database().transaction();
model->submitAll();
model->database().commit();
такой код почему-то срабатывает только один раз, если его вызвать повторно, то на 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
  опции профиля:
сообщение 21.3.2010, 0:52
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Продолжаю раскопки проблемы.
--1--
Заменил QSqlTableModel, на простой QSqlQuery. Все работает в любом окружении, при любой версии Qt для компиляции. Стало быть проблема именно с QSqlTableModel + Драйвер Interbse/Firebird

--2--
сегодня наткнулся на странную ситуацию.
Поставил на свой нетбук, с Вин ХП домашней, Qt SDK 2010.02 (Qt 4.6.2), запустил эту тестовую прогу уже скомпиленную с помощью Qt 4.4.3
И она работает! т.е. все десять транзакций выполняются.
Я обрадовался, скомпилил, в консоли, ту прогу в окружении Qt 4.6.2.
И она опять НЕ работает!

Этого я вообще не понял.

П.С. обновил первое сообщение, добавив полное описание окружения.

--3--
Засунув в драйвер QIBASE кучу отладки, на сегодня, выяснил только одну вещь:
Старт транзакции происходит всякий раз, с новым номером транзакции. Но, почему-то сама запись в базу (второй и последующие разы) происходит с номером транзакции, который был у первой транзакции
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


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


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




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