Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.01.15;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.016 c
2-1135686629
фома
2005-12-27 15:30
2006.01.15
канва


14-1134978957
Чапаев
2005-12-19 10:55
2006.01.15
CDMA-телефон и Internet callback


14-1134898418
Virgo_Style
2005-12-18 12:33
2006.01.15
аська и почта на мобильном


2-1135271634
oleggar
2005-12-22 20:13
2006.01.15
queryperformance


4-1131178490
Святослав
2005-11-05 11:14
2006.01.15
Неизвестное програмное исключение OS !!!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский