powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Zeos транзакции
24 сообщений из 24, страница 1 из 1
Zeos транзакции
    #38885661
Евгений1000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, уважаемые форумчане.
Сменил в проекте 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
Zeos транзакции
    #38885675
Фотография peter64
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перед ролбеком проверь, активна ли транзакция.
...
Рейтинг: 0 / 0
Zeos транзакции
    #38885727
Евгений1000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
peter64,

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

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

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

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

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

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

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

Использовал компоненты 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
Zeos транзакции
    #39576840
shiva52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добавлю на счет TOAD.

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

START TRANSACTION

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

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

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

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

SET AUTOCOMMIT=0
UPDATE TABLE..
ROLLBACK



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

SET AUTOCOMMIT=0

команду

BEGIN WORK

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

Версия БД MY SQL 5.7

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

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
Zeos транзакции
    #39576930
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shiva52Ттип таблиц еще на что то влияет в работе с таблицами? на все
shiva52Может ли быть часть таблиц в одной базе одного типа, а часть другого?Может

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

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

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

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

SET AUTOCOMMIT=0

и без него.

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

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


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