Транзакции, не работают :( |
Здравствуйте, гость ( Вход | Регистрация )
Транзакции, не работают :( |
potkin |
30.8.2010, 11:53
Сообщение
#1
|
Студент Группа: Участник Сообщений: 77 Регистрация: 18.6.2010 Пользователь №: 1819 Спасибо сказали: 0 раз(а) Репутация: 0 |
Почему-то не работают транзакции.
Пример кода:
Делаю "db.rollback();", но все изменения сохраняются в БД |
|
|
DEADHUNT |
30.8.2010, 11:57
Сообщение
#2
|
Активный участник Группа: Участник Сообщений: 430 Регистрация: 15.4.2009 Пользователь №: 686 Спасибо сказали: 26 раз(а) Репутация: 2 |
|
|
|
Алексей1153 |
30.8.2010, 11:58
Сообщение
#3
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
а submitAll сохраняет, тогда роллбэк вхолостую отрабатывает Хотя, обычно это называется commit, но тут, наверное, это одно и то же
Цитата bool QSqlTableModel::submitAll () [slot] Submits all pending changes and returns true on success. Returns false on error, detailed error information can be obtained with lastError(). On success the model will be repopulated. Any views presenting it will lose their selections. Note: In OnManualSubmit mode, already submitted changes won't be cleared from the cache when submitAll() fails. This allows transactions to be rolled back and resubmitted again without losing data. See also revertAll() and lastError(). |
|
|
Litkevich Yuriy |
30.8.2010, 12:04
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
с моделью вообще всё не так себе. Даже при ручном сохранении (OnManualSubmit), я ещё в цикле пробовал:
Изменения - фиксация, и по новой. Фигушки, только одна транзакция удачно прощодит |
|
|
potkin |
30.8.2010, 12:38
Сообщение
#5
|
Студент Группа: Участник Сообщений: 77 Регистрация: 18.6.2010 Пользователь №: 1819 Спасибо сказали: 0 раз(а) Репутация: 0 |
MySQL 5.1 Вроде, с версии выше 4 потдерживает. Алексей1153
Я привёл пример специально, чтоб показать, что при "Откате" транзакции, всё равно всё сохраняется, даже это:
Litkevich Yuriy И что вообще можите посоветовать ??? |
|
|
molchanoviv |
30.8.2010, 12:49
Сообщение
#6
|
Старейший участник Группа: Сомодератор Сообщений: 597 Регистрация: 18.7.2008 Из: Саратов Пользователь №: 238 Спасибо сказали: 41 раз(а) Репутация: 5 |
Точно не помню в каком классе(а ассистента под рукой нет), но помнится были в Qt функции beginTransaction(), commitTransaction() и rollbackTransaction(). Поищи в ассистенте.
|
|
|
Litkevich Yuriy |
30.8.2010, 13:10
Сообщение
#7
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
MySQL 5.1 это зависит от движка, двиг с транзакциями появился не давно. При установке мускуля, нужно ставить переключатель - "использовать оба" ну и при создании БД нужно указывать какой двиг использовать.Вроде, с версии выше 4 потдерживает. И что вообще можите посоветовать ??? да в принципе ничего. Не созрела Qt ещё для этого. QSqlQuery только нормально работает
|
|
|
potkin |
30.8.2010, 13:47
Сообщение
#8
|
Студент Группа: Участник Сообщений: 77 Регистрация: 18.6.2010 Пользователь №: 1819 Спасибо сказали: 0 раз(а) Репутация: 0 |
Litkevich Yuriy
Во папандос |
|
|
Litkevich Yuriy |
30.8.2010, 16:23
Сообщение
#9
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Во папандос ага, я аж два дня матюкался. Может будет полезной такая тема: QIBASE + транзакции, не возможно выполнить более одного разаВ принципе я на неё забил. |
|
|
potkin |
30.8.2010, 16:37
Сообщение
#10
|
Студент Группа: Участник Сообщений: 77 Регистрация: 18.6.2010 Пользователь №: 1819 Спасибо сказали: 0 раз(а) Репутация: 0 |
Litkevich Yuriy
Получается мне надо съежать с QSqlTableModel и переходить полностью на QSqlQuery ??? Отказаться от модели и QtableView заполнять используя QSqlQuery, тоесть циклом и также сохранять в БД ??? |
|
|
Текстовая версия | Сейчас: 27.12.2024, 12:03 |