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

Вниз

Получение сообщения об ошибке   Найти похожие ветки 

 
LexxX ©   (2005-12-25 10:14) [0]

Доброго времени суток!
Есть такая задача: клиент, написанный на D7 отправляет на MSSQL 2000 скрипт, содержащий три операции INSERT в разные таблицы, причем перед внесением создается транзакция, а каждый инсерт проверяется на ошибку. Если ошибка внесения данных имеет место, то делается откат транзакции и последующие операции не выполняются.

Проблема: если произошла ошибка и транзакция откатилась, то я в клиенте не могу поймать это событие.. :((

Вопрос: как можно отловить ошибку "невнесения" данных средствами D7 ?

З.Ы. Проверку внесения данных в таблицу после выполнения скрипта не предлагать.

з.з.ы. Работаю через TADOQuery.

Спасибо.


 
Vlad ©   (2005-12-25 10:20) [1]


> LexxX ©   (25.12.05 10:14)  


> Вопрос: как можно отловить ошибку "невнесения" данных средствами
> D7 ?


что-то типа этого:

ADOQuery.BeginTrans
try
 ADOQuery.ExecSQL;
 ADOQuery.CommitTrans;
except
 ADOQuery.RollbackTrans;
 raise;
end;


 
Vlad ©   (2005-12-25 10:22) [2]

Прошу прощения, методы BeginTrans, CommitTrans и RollbackTrans относятся к TADOConnection, т.ч. необходимо внести соотв. изменения


 
LexxX ©   (2005-12-25 10:23) [3]

Vlad ©   (25.12.05 10:20) [1]
ADOQuery.BeginTrans
try
ADOQuery.ExecSQL;
ADOQuery.CommitTrans;
except
ADOQuery.RollbackTrans;
raise;
end;


в том-то и дело, что транзакция внутри скл скрипта обозначена и откатывается там же, так что при любой ошибке Вами приведенный код не сработает!

з.ы. ADOQuery.BeginTrans - а это что за метод такой?.. :-/


 
Vlad ©   (2005-12-25 10:30) [4]


> LexxX ©   (25.12.05 10:23) [3]


> в том-то и дело, что транзакция внутри скл скрипта обозначена
> и откатывается там же

Ты либо возлагай работу с транзакциями на сервер, либо на клиента.
Если работа ведется на сервере, значит откат транзакции должен сопровождаться возбуждением собственного исключения (в том же скрипте)
Если на клиенте, тогда убери работу с транзакциями из скрипта, и делай как в [1], но с учетом моей поправки [2].

Пожалуй, все-таки перепишу :-)

ADOConnection.BeginTrans
try
ADOQuery.ExecSQL;
ADOConnection.CommitTrans;
except
ADOConnection.RollbackTrans;
raise;
end;



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

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

Наверх




Память: 0.48 MB
Время: 0.062 c
6-1128355039
Evil Spirit
2005-10-03 19:57
2006.01.15
FTP через TClientSocket


2-1135506553
Дмитрий_177
2005-12-25 13:29
2006.01.15
Удаление из списка строк


2-1135261503
Majesto
2005-12-22 17:25
2006.01.15
Вызов обработчика события


6-1128578717
Ботвин Дмитрий
2005-10-06 10:05
2006.01.15
Отличия в работе


2-1134653305
Destroyer
2005-12-15 16:28
2006.01.15
Вопрос по потокам.