Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: СУБД и Delphi/Lazarus

  Все выпуски  

RusFAQ.ru: СУБД и Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / СУБД и Delphi

Выпуск № 239
от 14.11.2006, 11:05

Администратор:CJ
В рассылке:Подписчиков: 279, Экспертов: 36
В номере:Вопросов: 1, Ответов: 2


Вопрос № 61844: Господа! Обстоятельства вынудили перейти с Firebird + IBX на связку MSSQL + ADO. Не могу сообразить, как при этом управлять транзакциями. Мне нужно внести изменения в несколько таблиц, перехватить ошибку (если возникнет) и все откатить.<b...

Вопрос № 61.844
Господа!
Обстоятельства вынудили перейти с Firebird + IBX на связку MSSQL + ADO.
Не могу сообразить, как при этом управлять транзакциями.
Мне нужно внести изменения в несколько таблиц, перехватить ошибку (если возникнет) и все откатить.
Помогите советом или примером.
Спасибо.

Vitaly Grobshtein
Отправлен: 08.11.2006, 21:19
Вопрос задал: Vitaly (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: sir henry
Здравствуйте, Vitaly!
Желательно, как и в любой серверной СУБД, все операции отслеживающие целостность данных размещать на сервере в БД, в триггерах, а не в клиентском приложении.
Принцип работы с транзакциями в MSSQL точно такой-же, как и в FireBird.
Начало транзакции - BEGIN TRANSACTION
Подтверждение транзакции - COMMIT TRANSACTION
Отмена транзакции - ROLLBACK TRANSACTION
Допустим перед вставкой данных (триггер BEFORE INSERT) можно проверить, не противоречат ли вставляемые данные данным из другой, связанной таблицы.
IF (Условие_проверки)
{Если проверка успешна}
COMMIT TRANSACTION
ELSE
BEGIN
{Если не успешна, возбуждаем иключение с сообщением об ошибке}
RAISERROR('Такие данные вставлять нельзя!', 16)
ROLLBACK TRANSACTION
END
16, в сообщении об ошибке, это уровень опасности ошибки. За обычным пользователем, не администратором, закреплен диапазон от 11 до 16. Естественно чем больше номер, тем серьезнее ошибка.
Таким образом, если пользователь неправильно ввел данные в своем приложении, несоответствующие условию проверки, то он увидит сообщение сервера, то-то типа:
[Microsoft][ADO SQL Server driver][SQL Server]
Такие данные вставлять нельзя!
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 09.11.2006, 04:28

Отвечает: PaVeL_Ekt
Здравствуйте, Vitaly!

При использовании компонента TADOConnection:

ADOConnection.BeginTrans;
ADOConnection.CommitTrans;
ADOConnection.RollbackTrans;

также может понадобиться функция
ADOConnection.InTransaction (проверяет есть ли транзакция)
и обработчик
ADOConnection.OnCommitTransComplete;

---------
Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: 3-ий класс)
Ответ отправлен: 09.11.2006, 06:48
Оценка за ответ: 5
Комментарий оценки:
Спасибо. Это и было нужно.


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное