![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
![]() Всем привет)
Столкнулся с такой ерундовиной, что, если в блоке Код:
try ADOConnection.BeginTrans; // вставка в БД ADOConnection.CommitTrans; except ADOConnection.RollbackTrans; end; Как избежать? Отключаться не вариант... Я за здоровый экстрим! Спасибо за "спасибо") |
#2
|
||||
|
||||
![]() А что за база? Может лучше явно вызывать ExecSQL('BEGIN TRANSACTION')?
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#3
|
||||
|
||||
![]() MySQL
Да, забыл сказать, что между beginTrans и CommitTrans не только вставка, но и много всего всякого - апдейт, селект и т.д. Что, впрочем, логично Я за здоровый экстрим! Спасибо за "спасибо") |
#4
|
||||
|
||||
![]() А не может быть так, что означенные манипуляции с транзакцией всунуты в какой-нибудь обработчик события DataSet-а, и в процессе его выполнения происходит неявный рекурсивный вход в него?
Не стоит путать форумы с богадельнями. © Bargest |
Этот пользователь сказал Спасибо Freeman за это полезное сообщение: | ||
Mrak (04.04.2014)
|
#5
|
||||
|
||||
![]() Я делаю явный запуск транзакции через выполнение запроса begin transaction, чтоб уж наверняка. На адо как-то не особо полагаюсь (из всего адо использую только квери и команд).
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение: | ||
Mrak (04.04.2014)
|
#6
|
||||
|
||||
![]() Вобщем, извините, но разбираться нет времени(((
Скажите, так правильно оформлять: Код:
try dm.PROTO_Connection.BeginTrans; if query_open(false, ADOQuery_Slut, 'INSERT INTO klients.klients ' + '(поля) VALUES (значения)', 'Ошибка подключения к БД!') = false then exit; if query_open(true, ADOQuery_Slut, 'SELECT LAST_INSERT_ID() FROM klients.klients', 'Ошибка подключения к БД!') = false then exit; IdKlient:=ADOQuery_Slut.FieldByName('last_insert_id()').AsString; if query_open(false, ADOQuery_Slut, 'INSERT INTO proto.sc_zn ' + '(поля) VALUES (значения)', 'Ошибка подключения к БД!') = false then exit; dm.PROTO_Connection.CommitTrans; except dm.PROTO_Connection.RollbackTrans; exit; end; ... function query_open(for_select: Boolean; querik: tadoquery; zapros, err_msg: string): boolean; // возвращает True, если запрос выполнился begin Result:= true; querik.Close; Querik.SQL.text:=zapros; try if for_select = true then Querik.open else querik.ExecSQL; except on E : Exception do begin screen.Cursor:=crDefault; messageDlg(err_msg + #13 + #13 + '[' + E.Message + ']', mtError, [mbOK], 0); querik.Close; Result:= false; end; end; end; Я за здоровый экстрим! Спасибо за "спасибо") |