Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.02;
Скачать: 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 вся ветка

Текущий архив: 2007.09.02;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.022 c
2-1186039851
Xmen
2007-08-02 11:30
2007.09.02
проблема с OraSQL.ParamByName


2-1186488091
Petro
2007-08-07 16:01
2007.09.02
ComboBox


2-1186828495
Снова я
2007-08-11 14:34
2007.09.02
Сокеты и слияние команд


2-1186919229
Lavrenty
2007-08-12 15:47
2007.09.02
Подключение к сети


2-1185991030
Comp
2007-08-01 21:57
2007.09.02
Создать нечто подобное StringGrid на API