Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.09;
Скачать: CL | DM;

Вниз

Откат группы изменений в БД   Найти похожие ветки 

 
VadimKV   (2004-12-09 10:15) [0]

Работаю в Delphi7 с БД FB1.5 через компоненты DBExpress.
Подскажите если кто знает.

Как сделать откат группы изменений в БД.
Например:
 ....
 /*Добавление нового поля*/
 ALTER TABLE t1 ADD f4 "INT";
 /*Заполнение поля*/
 UPDATE t1 SET f4 = 1;
 /*Создание внешнего ключа*/
 ALTER TABLE t1 ADD CONSTRAINT FK_t1
 FOREIGN KEY (f4) REFERENCES t2(f1);
 /*Добавление Уникально ограничения*/
 ALTER TABLE t1 ADD CONSTRAINT UC_t1_f2 UNIQUE (f2)
 ....
Если в каком либо месте произошла ошибка, то мне необходимо отменить все изменения.


 
Val ©   (2004-12-09 10:23) [1]

Насколько я помню - в ИБ изменение метаданных также нужно коммитить(если не включен autocommit), т.е. по идее, достаточно стандартного
begin
 ...
 Commit
except
 RollBack
end;


 
Johnmen ©   (2004-12-09 10:26) [2]

>Если в каком либо месте произошла ошибка, то мне необходимо
>отменить все изменения.

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


 
VadimKV   (2004-12-09 10:33) [3]

Можно ли сделать какую нибудь "Большую" транзакцию, а все изменения которые необходимо совершить сделать как вложенные транзакции.
И в случае ошибки сделать откат Первой ("Большой"), что бы она откатила все вложенные?


 
Val ©   (2004-12-09 10:37) [4]

Лучше отделите изменение данных от метаданных, если при попытке изменения метаданных произойдет откат, то и изменить данные вы не сможете в данном случае (такого поля попросту не будет), т.е. тоже получите откат.


 
VadimKV   (2004-12-09 10:43) [5]

Отделить не получится.
Последующей причине.

Если происходит добавление поля (F4) к не пустой таблице и необходимо по этому полю создать Внешний ключ (FK_t1), то это поле (F4)необходиом сначало заполнить данными чтобы не нарушалась ссылочная целостность данных.


 
Val ©   (2004-12-09 10:48) [6]

при пустом поле нарушится ссылочная целостность?


 
Zacho ©   (2004-12-09 10:54) [7]

VadimKV   (09.12.04 10:43) [5]

Так не выйдет.
1. В IB нет вложенных транзакций
2. Невозможно в одной транзакции создать метаданные и заполнить их данными, перед работой с объектами БД, транзакция, в к-рой они создавались должна быть завершена.

Пересматривай логику работы приложения.

Johnmen ©   (09.12.04 10:26) [2]
Т.к. в рамках одной транзакции можно менять либо только метаданные, либо только не их...


Ну, не совсем так :) В одной тр-ции можно создать одну таблицу и работать с данными другой :)


 
Johnmen ©   (2004-12-09 10:58) [8]

>Zacho ©   (09.12.04 10:54) [7]

Да. Просто недостаточно внятно подчеркнул В данном случае
:)


 
Johnmen ©   (2004-12-09 11:01) [9]

http://sql.ru/forum/actualthread.aspx?tid=144575



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

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

Наверх




Память: 0.49 MB
Время: 0.039 c
1-1103571981
Константинов
2004-12-20 22:46
2005.01.09
Программы для тестирования студентов в локальной сети


1-1103703324
liver
2004-12-22 11:15
2005.01.09
MDI & MainMenu


14-1103455952
Cerberus
2004-12-19 14:32
2005.01.09
Самарцам


4-1100988304
Юпитер
2004-11-21 01:05
2005.01.09
Поймать запуск EXE и переделать после загрузки в память


4-1100790422
integer
2004-11-18 18:07
2005.01.09
Подскажите как найти в какой *.dll сидят свойства притера