Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Zeos транзакции / 24 сообщений из 24, страница 1 из 1
21.02.2015, 15:44:51
    #38885661
Евгений1000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zeos транзакции
Добрый день, уважаемые форумчане.
Сменил в проекте 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.
SQLConnection.AutoCommit:=True;
SQLConnection.Connect;

SQLConnection.StartTransaction;
try
   SQLQuery.ExecSQL;
   SQLConnection.Commit;
except
   SQLConnection.Rollback;
end;



Если запрос проходит нормально, то проблем с Commit нет. А если возникает эксепшн, то на строке SQLConnection.Rollback, возникает второй эксепшн:
авторInvalid operation in AutoCommit mode
никто не подскажет что это за баг и как решить?
...
Рейтинг: 0 / 0
21.02.2015, 16:24:20
    #38885675
peter64
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zeos транзакции
Перед ролбеком проверь, активна ли транзакция.
...
Рейтинг: 0 / 0
21.02.2015, 20:17:30
    #38885727
Евгений1000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zeos транзакции
peter64,

SQLConnection.InTransaction - оно?
...
Рейтинг: 0 / 0
21.02.2015, 22:02:18
    #38885767
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zeos транзакции
Евгений1000,

Ну дык отключи режим AutoCommit ...
...
Рейтинг: 0 / 0
21.02.2015, 22:28:15
    #38885775
Евгений1000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zeos транзакции
DarkMaster,

если AutoCommit отключить - экспешн будет уже на StartTransaction. Все хитро сделано))
...
Рейтинг: 0 / 0
22.02.2015, 00:47:58
    #38885824
peter64
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zeos транзакции
Евгений1000,

скорее всего, попробуй
...
Рейтинг: 0 / 0
22.02.2015, 22:20:06
    #38886133
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zeos транзакции
Евгений1000если AutoCommit отключить - экспешн будет уже на StartTransaction. Все хитро сделано))так уберите StartTransaction
Евгений1000SQLQuery.ExecSQL, открывает и закрывает соединениеБред. Соединение открывается в SQLConnection, все остальные его используют
...
Рейтинг: 0 / 0
23.02.2015, 14:51:50
    #38886427
Евгений1000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zeos транзакции
_Vasilisk_, если не делать SQLConnection.Connect, SQLQuery.ExecSQL будет работать
...
Рейтинг: 0 / 0
23.02.2015, 15:09:17
    #38886434
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zeos транзакции
Евгений1000,

Ну значит этот ExecSQL поднимает еще одну транзакцию. Либо в Zeos`e чего-то сильно намутили, либо ты не разобрался, как вручную рулить транзакциями.
...
Рейтинг: 0 / 0
23.02.2015, 15:14:49
    #38886437
Евгений1000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zeos транзакции
DarkMaster, ответ выше наверное был правильным. При эксепшене транзакция видимо закрывается автоматом. На всякий случай добавил проверку
if SQLConnection.InTransaction then
SQLConnection.Commit;

if SQLConnection.InTransaction then
SQLConnection.Rollback;
все нормально работает. Без эксепшена, InTransaction=True и коммит выполняется, если возникает эксепшн InTransaction=False.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
27.12.2017, 14:07:24
    #39576829
shiva52
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zeos транзакции
Всем привет.

Озаботился подобной темой. Посмотрел выше написанное и возникли вопросы так ли все здорово.

Использовал компоненты 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. Результат тот же.
...
Рейтинг: 0 / 0
27.12.2017, 14:21:02
    #39576840
shiva52
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zeos транзакции
Добавлю на счет TOAD.

Попробовал в нем:

START TRANSACTION

затем какое либо изменение в БД. В моем случае сделал UPDATE на 1 запись.

Затем выполнил Rollback.

В итоге изменение не откатилось. Т.е. результат Того UPDATE что был выполнен - остался!
...
Рейтинг: 0 / 0
27.12.2017, 14:46:20
    #39576872
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zeos транзакции
У него встроенное управление транзакциями вроде как... Посему картина выглядит следующим образом:
1. Внутренний старт транзакции
2. Выполнение скрипта (пользовательский старт транзакции)
3. Закрытие транзакции
...
Рейтинг: 0 / 0
27.12.2017, 14:47:24
    #39576873
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zeos транзакции
Думаю, что такое поведение отключается настройками. В общем, я с ним долго работал и проблем с транзакциями совсем не помню. Хороший, хоть и перегруженный, инструмент.
...
Рейтинг: 0 / 0
27.12.2017, 15:09:08
    #39576892
shiva52
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zeos транзакции
Поковырялся еще в документации на сайтах.

Пробовал использовать:

SET AUTOCOMMIT=0
UPDATE TABLE..
ROLLBACK



Так же пробовал вместо

SET AUTOCOMMIT=0

команду

BEGIN WORK

тоже не работает ни в TOAD ни из Делфи+ZEOS

Версия БД MY SQL 5.7

В Oracle таких проблем нет..как же с этой БД то быть?
...
Рейтинг: 0 / 0
27.12.2017, 15:10:48
    #39576897
shiva52
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zeos транзакции
Уважаемый wadman, о чем речь идет в ваших сообщениях? TOAD?
...
Рейтинг: 0 / 0
27.12.2017, 15:13:48
    #39576899
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zeos транзакции
shiva52Версия БД MY SQL 5.7А движок таблицы какой? Транзакции поддерживают только InnoDB и NDB (NDBCLUSTER)
...
Рейтинг: 0 / 0
27.12.2017, 15:28:09
    #39576916
shiva52
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zeos транзакции
Только что нашел ответ:

http://www.sql.ru/forum/710019/mysql-tranzakciya?hl=rollback mysql

а конкретнее оттуда:

1. В MySQL существует несколько типов таблиц. Это ISAM, HEAP, MyISAM, InnoDB, BDB и т.д. Транзакционный механизм поддерживают только InnoDB и BDB. Поэтому все таблицы с которыми вы хотите работать через транзакции следует переконвертировать в соответствующий тип

у меня MYISAM

Как понимаю это и есть причина. Вопрос как переконвертировать таблицы в другой тип..теперь за это надо искать инфу.

Ттип таблиц еще на что то влияет в работе с таблицами?
Может ли быть часть таблиц в одной базе одного типа, а часть другого? Например из MYISAM брать данные и в другие таблицы допустим innoDB записывать используя транзакции?
...
Рейтинг: 0 / 0
27.12.2017, 15:47:26
    #39576930
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zeos транзакции
shiva52Ттип таблиц еще на что то влияет в работе с таблицами? на все
shiva52Может ли быть часть таблиц в одной базе одного типа, а часть другого?Может

shiva52Например из MYISAM брать данные и в другие таблицы допустим innoDB записывать используя транзакции?Можно. Но внешние ключи MyISAM тоже не поддерживает.

Честно говоря, кроме работы с геометрией у MyISAM нет преимуществ перед InnoDB
...
Рейтинг: 0 / 0
27.12.2017, 15:51:31
    #39576936
shiva52
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zeos транзакции
> Честно говоря, кроме работы с геометрией у MyISAM нет преимуществ перед InnoDB

Если не сложно, объясните что понимается под этой фразой?
...
Рейтинг: 0 / 0
27.12.2017, 15:59:45
    #39576946
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zeos транзакции
shiva52Если не сложно, объясните что понимается под этой фразой?Какое слово Вам не понятно? Вы поссылке ходили? Читали? Таблицу сравнения видели?
...
Рейтинг: 0 / 0
27.12.2017, 16:01:26
    #39576947
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zeos транзакции
_Vasilisk_кроме работы с геометриейВру. Забыл еще самое важное. Только MyISAM поддерживает полнотекстовый поиск
...
Рейтинг: 0 / 0
27.12.2017, 16:17:26
    #39576965
shiva52
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zeos транзакции
В общем вроде все получилось.

Через встроенную mysql.exe изменил движки отдельных таблиц. Попробовал запись с отключением автокомита

SET AUTOCOMMIT=0

и без него.

Теперь результаты те что ожидались. Вопрос закрыт. Осталось почитать теперь на счет разницы в движках.

Единственно что не понятно, почему в TOAD попытка изменить тип движека приводила к тому что TOAD задумывался на неограниченное время..типа идет транзакция или что то такое. При этом что я более ничего не делал в нем на тот момент. Даже перезапускал его (Toad). (делал не через SQL-запрос в TOAD-е а средствами TOAD через выпадающий список движков)
...
Рейтинг: 0 / 0
27.12.2017, 16:30:02
    #39576984
shiva52
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Zeos транзакции
Да, спасибо за помощь, забыл сказать. :)
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Zeos транзакции / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]