Вниз
Скачать: CL | DM;

Ошибка при вставке записи и коммит транзакции   Найти похожие ветки 

← →
pavel_guzhanov ©   (2007-05-08 14:22) [0]

Здравствуйте!

Подскажите пожалуйста в таком теоретическом вопросе. Я в цикле вставляю записи в базу. Для вставки использую хранимую процедуру. Цикл повторяется много раз (допустим, 10000) После выхода из цикла я делаю IBTransaction.commit. Все проходит без ошибок. А если произойдет следующее: Во время одной итерации цикла вставятся некорректные данные. При выполнении коммита после цикла вставится что-нибудь в базу? И что вставится? Все данные до ошибочной записи? Или вообще ничего не вставится?


← →
Sergey13 ©   (2007-05-08 14:36) [1]

> [0] pavel_guzhanov ©   (08.05.07 14:22)
> Или вообще ничего не вставится?

Именно так. Если транзакция работает именно так, как ты описал.


← →
ANB ©   (2007-05-08 15:21) [2]


> Именно так. Если транзакция работает именно так, как ты
> описал.

Вообще то тут код надо смотреть.
Но я не увидел по тексту, что автор перехватывал исключения и делал роллбэк.
ИМХО :
Т.к. инсерты идут не одним оператором, а в цикле, то получив исключение на ошибочной записи, процедура прервется и БД останется в незакоммиченном состоянии. При этом ранее добавленные записи окажуться в подвешенном состоянии.
Далее, если при выходе из приложения у него пройдет автоматический коммит, то записи сядут в базу окончательно, а если роллбэк - то отваляться.


← →
pavel_guzhanov ©   (2007-05-08 15:27) [3]


> записи сядут в базу окончательно, а если роллбэк - то отваляться

Все-таки не так... После цикла идет принудительный коммит, но в базе не появляется ни одной записи...

> Но я не увидел по тексту, что автор перехватывал исключения
> и делал роллбэк.

Я не перехватывал исключений, и, соответственно, не делал роллбэка....


← →
Desdechado ©   (2007-05-08 15:37) [4]

Если твоя хранимая процедура сама обрабатывает исключительные ситуации, то на клиента их отдавать не нужно, т.е. транзакцию можно подтвердить.


← →
ANB ©   (2007-05-08 15:39) [5]


> После цикла идет принудительный коммит, но в базе не появляется
> ни одной записи...

У тебя до коммита явно выполнение не доходит.
Значит, все остается на усмотрение деструктора TIBTransaction.
Вроде как в нем можно настраивать, чего он должен сделать при выходе из программы - коммит или роллбэк.
А до выхода из программы добавленные записи никто не увидит, кроме твоей же программы (да еще и из той же транзакции).


← →
Johnmen ©   (2007-05-08 17:36) [6]


> А если произойдет следующее: Во время одной итерации цикла
> вставятся некорректные данные. При выполнении коммита после
> цикла вставится что-нибудь в базу? И что вставится?

Закоммитится всё, что успешно вставилось.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.026 c
2-1186662007
Gamer
2007-08-09 16:20
2007.09.02
работа с Firebird из Delphi 2006


15-1186234015
de.
2007-08-04 17:26
2007.09.02
Проблема!!!


2-1186325797
Roun
2007-08-05 18:56
2007.09.02
как за-ZIP-овать несколько файлов в один архив?


2-1186039851
Xmen
2007-08-02 11:30
2007.09.02
проблема с OraSQL.ParamByName


8-1164867476
Павел123456
2006-11-30 09:17
2007.09.02
Как "склеить" Bitmap-ы в видео?




   Наверх