|
|
|
Zeos транзакции
|
|||
|---|---|---|---|
|
#18+
Добрый день, уважаемые форумчане. Сменил в проекте ADO на Zeos База mysql 5.6 Из того что намутил - чтоб работали транзакции, соединение должно быть открыто. SQLQuery.ExecSQL, открывает и закрывает соединение, а SQLConnection.Commit работать не будет, если предварительно не сделать SQLConnection.Connect. Второе, работа с транзакциями поддерживается только в режиме SQLConnection.AutoCommit:=True третий вопрос не могу решить Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Если запрос проходит нормально, то проблем с Commit нет. А если возникает эксепшн, то на строке SQLConnection.Rollback, возникает второй эксепшн: авторInvalid operation in AutoCommit mode никто не подскажет что это за баг и как решить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2015, 15:44 |
|
||
|
Zeos транзакции
|
|||
|---|---|---|---|
|
#18+
Перед ролбеком проверь, активна ли транзакция. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2015, 16:24 |
|
||
|
Zeos транзакции
|
|||
|---|---|---|---|
|
#18+
peter64, SQLConnection.InTransaction - оно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2015, 20:17 |
|
||
|
Zeos транзакции
|
|||
|---|---|---|---|
|
#18+
Евгений1000, Ну дык отключи режим AutoCommit ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2015, 22:02 |
|
||
|
Zeos транзакции
|
|||
|---|---|---|---|
|
#18+
DarkMaster, если AutoCommit отключить - экспешн будет уже на StartTransaction. Все хитро сделано)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2015, 22:28 |
|
||
|
Zeos транзакции
|
|||
|---|---|---|---|
|
#18+
Евгений1000, скорее всего, попробуй ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2015, 00:47 |
|
||
|
Zeos транзакции
|
|||
|---|---|---|---|
|
#18+
Евгений1000если AutoCommit отключить - экспешн будет уже на StartTransaction. Все хитро сделано))так уберите StartTransaction Евгений1000SQLQuery.ExecSQL, открывает и закрывает соединениеБред. Соединение открывается в SQLConnection, все остальные его используют ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2015, 22:20 |
|
||
|
Zeos транзакции
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, если не делать SQLConnection.Connect, SQLQuery.ExecSQL будет работать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2015, 14:51 |
|
||
|
Zeos транзакции
|
|||
|---|---|---|---|
|
#18+
Евгений1000, Ну значит этот ExecSQL поднимает еще одну транзакцию. Либо в Zeos`e чего-то сильно намутили, либо ты не разобрался, как вручную рулить транзакциями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2015, 15:09 |
|
||
|
Zeos транзакции
|
|||
|---|---|---|---|
|
#18+
DarkMaster, ответ выше наверное был правильным. При эксепшене транзакция видимо закрывается автоматом. На всякий случай добавил проверку if SQLConnection.InTransaction then SQLConnection.Commit; if SQLConnection.InTransaction then SQLConnection.Rollback; все нормально работает. Без эксепшена, InTransaction=True и коммит выполняется, если возникает эксепшн InTransaction=False. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2015, 15:14 |
|
||
|
Zeos транзакции
|
|||
|---|---|---|---|
|
#18+
Всем привет. Озаботился подобной темой. Посмотрел выше написанное и возникли вопросы так ли все здорово. Использовал компоненты ZEOS. Установил свойство AutoCommit для ZConnection = True Сделал отдельно кнопки на действия: - StartTransaction - Insert в таблицу - Rollback т.е. 1-я кнопка выполняет: ZConnection.StartTransaction ; 2-я кнопка выполняет: Insert в мою таблицу 3-я кнопка выполняет: Rollback (пробовал Rollback через ZConnection и sql-запрос от ZQuery) Делаю по очереди (нажимаю кнопки): StartTransaction Insert в мою таблицу RollBack В итоге запись все равно сохраняется. Затем пробовал следующее: 1. Отключил AutoCommit в ZConnection 2. Исключил StartTransaction из алгоритма выше. делаю Insert а затем Rollback . Запись снова сохраняется! Подключился к MYSQL через TOAD . В нем выполняю SQL-запрос: INSERT INTO ... Запись есть. Выполняю все в том же TOAD: Rollback Запись все равно есть! В итоге вопрос: как организовать запись в БД MYSQL что бы в случае чего можно было откатиться к состоянию до начала изменений в БД. Добавлю что пробовал и UPDATE делать над отдельной записью в TOAD и откат через Rollback. Результат тот же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 14:07 |
|
||
|
Zeos транзакции
|
|||
|---|---|---|---|
|
#18+
Добавлю на счет TOAD. Попробовал в нем: START TRANSACTION затем какое либо изменение в БД. В моем случае сделал UPDATE на 1 запись. Затем выполнил Rollback. В итоге изменение не откатилось. Т.е. результат Того UPDATE что был выполнен - остался! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 14:21 |
|
||
|
Zeos транзакции
|
|||
|---|---|---|---|
|
#18+
У него встроенное управление транзакциями вроде как... Посему картина выглядит следующим образом: 1. Внутренний старт транзакции 2. Выполнение скрипта (пользовательский старт транзакции) 3. Закрытие транзакции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 14:46 |
|
||
|
Zeos транзакции
|
|||
|---|---|---|---|
|
#18+
Думаю, что такое поведение отключается настройками. В общем, я с ним долго работал и проблем с транзакциями совсем не помню. Хороший, хоть и перегруженный, инструмент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 14:47 |
|
||
|
Zeos транзакции
|
|||
|---|---|---|---|
|
#18+
Поковырялся еще в документации на сайтах. Пробовал использовать: SET AUTOCOMMIT=0 UPDATE TABLE.. ROLLBACK Так же пробовал вместо SET AUTOCOMMIT=0 команду BEGIN WORK тоже не работает ни в TOAD ни из Делфи+ZEOS Версия БД MY SQL 5.7 В Oracle таких проблем нет..как же с этой БД то быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 15:09 |
|
||
|
Zeos транзакции
|
|||
|---|---|---|---|
|
#18+
Уважаемый wadman, о чем речь идет в ваших сообщениях? TOAD? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 15:10 |
|
||
|
Zeos транзакции
|
|||
|---|---|---|---|
|
#18+
shiva52Версия БД MY SQL 5.7А движок таблицы какой? Транзакции поддерживают только InnoDB и NDB (NDBCLUSTER) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 15:13 |
|
||
|
Zeos транзакции
|
|||
|---|---|---|---|
|
#18+
Только что нашел ответ: http://www.sql.ru/forum/710019/mysql-tranzakciya?hl=rollback mysql а конкретнее оттуда: 1. В MySQL существует несколько типов таблиц. Это ISAM, HEAP, MyISAM, InnoDB, BDB и т.д. Транзакционный механизм поддерживают только InnoDB и BDB. Поэтому все таблицы с которыми вы хотите работать через транзакции следует переконвертировать в соответствующий тип у меня MYISAM Как понимаю это и есть причина. Вопрос как переконвертировать таблицы в другой тип..теперь за это надо искать инфу. Ттип таблиц еще на что то влияет в работе с таблицами? Может ли быть часть таблиц в одной базе одного типа, а часть другого? Например из MYISAM брать данные и в другие таблицы допустим innoDB записывать используя транзакции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 15:28 |
|
||
|
Zeos транзакции
|
|||
|---|---|---|---|
|
#18+
shiva52Ттип таблиц еще на что то влияет в работе с таблицами? на все shiva52Может ли быть часть таблиц в одной базе одного типа, а часть другого?Может shiva52Например из MYISAM брать данные и в другие таблицы допустим innoDB записывать используя транзакции?Можно. Но внешние ключи MyISAM тоже не поддерживает. Честно говоря, кроме работы с геометрией у MyISAM нет преимуществ перед InnoDB ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 15:47 |
|
||
|
Zeos транзакции
|
|||
|---|---|---|---|
|
#18+
> Честно говоря, кроме работы с геометрией у MyISAM нет преимуществ перед InnoDB Если не сложно, объясните что понимается под этой фразой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 15:51 |
|
||
|
Zeos транзакции
|
|||
|---|---|---|---|
|
#18+
shiva52Если не сложно, объясните что понимается под этой фразой?Какое слово Вам не понятно? Вы поссылке ходили? Читали? Таблицу сравнения видели? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 15:59 |
|
||
|
Zeos транзакции
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_кроме работы с геометриейВру. Забыл еще самое важное. Только MyISAM поддерживает полнотекстовый поиск ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 16:01 |
|
||
|
Zeos транзакции
|
|||
|---|---|---|---|
|
#18+
В общем вроде все получилось. Через встроенную mysql.exe изменил движки отдельных таблиц. Попробовал запись с отключением автокомита SET AUTOCOMMIT=0 и без него. Теперь результаты те что ожидались. Вопрос закрыт. Осталось почитать теперь на счет разницы в движках. Единственно что не понятно, почему в TOAD попытка изменить тип движека приводила к тому что TOAD задумывался на неограниченное время..типа идет транзакция или что то такое. При этом что я более ничего не делал в нем на тот момент. Даже перезапускал его (Toad). (делал не через SQL-запрос в TOAD-е а средствами TOAD через выпадающий список движков) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 16:17 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=38885675&tid=2041402]: |
0ms |
get settings: |
11ms |
get forum list: |
19ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
216ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
75ms |
get tp. blocked users: |
2ms |
| others: | 241ms |
| total: | 587ms |

| 0 / 0 |
