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

Вниз

как различать ошибки одного класса (EADOException, напр.)   Найти похожие ветки 

 
unreger   (2003-05-03 13:50) [0]

как различать ошибки средствами дельфи, например,
отсутствие прав доступа на запуск хранимой процедуры
и отсутствие такой процедуры на сервере и т.д.
Где хранится код ошибки?

пробовал такое
try
ADOConnection1.Open;
ADOStoredProc1.Open;
// строка
Edit1.Text:= ADOStoredProc1.Recordset.Fields[1].Value;
except
Edit2.Text:=IntToStr(GetLastError);
end;
в процессе выполнения останавливал сервер,
переименовывал хранимую процедуру, отменял права на запуск -
все время возвращается 0


 
Palladin   (2003-05-03 14:27) [1]

а ты справку по try смотрел?


 
unreger   (2003-05-03 18:03) [2]

on EZeroDivide do HandleZeroDivide;
on EOverflow do HandleOverflow;
on EMathError do HandleMathError;

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


 
sniknik   (2003-05-03 18:13) [3]

вся эта "мелочь" - это оно и есть, фильтруй именно то чего тебе необходимо.

on E: EADOError do begin ErrMessage:= "EADOError : "+ E.Message; Err:= True; end;
on E: EOleException do begin ErrMessage:= "EOleException : "+ E.Message; Err:= True; end;
on E: EDataBaseError do begin ErrMessage:= "EDataBaseError : "+ E.Message; Err:= True; end;
on E: Exception do begin ErrMessage:= "OtherErrors : "+ E.Message; Err:= True; end;
else begin ErrMessage:= "Неизвестная ошибка!"; Err:= True; end;


 
unreger   (2003-05-03 19:58) [4]

Мда... хелп надо читать внимательно. Спасибо.
Работает, но хочется узнать код ошибки, а то есть подозрение, что в русифицированной версии E.Message будет другим и сравнение строк (для проверки конкретной ошибки) не сработает.


 
sniknik   (2003-05-03 23:01) [5]

ну посмотри исключения которые возвращают коды
EOleSysError, EOSError
и потом Ado конект тоже дает доступ к ошибкам по коду если нужно свое отловить (RAISERROR "" xxxx) или собщения от PRINT. но в обшем то случае зачем это нужно? выдавай юзеру в том виде как пришло, для этого и нужны чтобы не думать об этом дополнительно.


 
unreger   (2003-05-04 06:22) [6]

юзер не должен знать английский и особенности SQL-сервера, АДО соединения и проч., а вот узнать о том, что "не хватает прав для выполнения операции" (необязательно это права на доступ к физическим объектам сервера), "невозможно установить соединение с сервером" и т.д. - можно. Чтобы просто и быстро сообщить администратору. Кроме того, часть таких ошибок можно устранять автоматически.


"Кто такой генерал Файлура и почему он читает мой диск?" :)


 
unreger   (2003-05-04 08:45) [7]

А ведь это ошибки COM-объекта, а не операционной системы, поэтому
GetLastError о них даже не догадывается.


 
sniknik   (2003-05-04 11:47) [8]

unreger (04.05.03 06:22)
и ты их все собираешся переводить? побаловать так сказать юзера?, ну так флаг тебе в руки (и древко в задницу :о))). Это гигантский труд, ты хоть смотрел сколько их? (не говоря уж о частных случаях, в смысле когда в своей процедуре подымаеш ексепшен со своим номером) чтобы все предусмотреть нужно полностью все ексепшены переписать (я так думаю в борланде не один человек этим занимался (да и не два :)).
гораздо проще поставить руский сервис пак, в котором все эксепты уже на руском. (ну не все конечно но многие)

unreger (04.05.03 08:45)
> А ведь это ошибки COM-объекта
E OleSysError, EOSError
ну и в чем проблема? Тебе же вроде код ошибки нужен был? ну так они его возвращают.

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


 
Palladin   (2003-05-04 12:22) [9]


> unreger (04.05.03 08:45)

глупая затея доностить до пользователя смысл ошибки...
даже если там по русски будет написано "У вас нет прав на это действие" он все равно побежит к программисту выяснять, что да как...


 
unreger   (2003-05-05 06:13) [10]

"и ты их все собираешся переводить? "
я этого не говорил и даже не думал :)
пока мне надо различать пару-тройку ситуаций -
"отсутствие прав доступа на запуск хранимой процедуры
и отсутствие такой процедуры на сервере", например.
Остальные будут идти как "ошибка на сервере"

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

если "У вас нет прав на это действие" относится к операции предметной области (выписка накладной, напр.), то бежать нужно к главному менеджеру, который раздает права на эти операции. Физических объектов сервера, на которых реализованы операции предметной области не видит никто. Но это надо уже долго и подробно.

Чтобы подвести какой-то итог. Меня устраивает EOleSysError
Тестовый пример:
try
ADOConnection1.Open;
ADOStoredProc1.Open;
Edit1.Text:=ADOStoredProc1.Recordset.Fields[1].Value;
except
on E: EOleSysError do Edit1.Text:=IntToStr(E.ErrorCode);
end;

Всем спасибо. Вопросы по разработке проекта задам чуть позже. В другой ветке.



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

Форум: "Основная";
Текущий архив: 2003.05.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.009 c
1-46789
mazik
2003-04-30 10:07
2003.05.15
TStringList


1-46678
V-A-V
2003-04-30 11:03
2003.05.15
глюки с Word


1-46808
Semen
2003-05-02 16:54
2003.05.15
Сравнить два списка. Как?


8-46856
Blacked
2003-01-31 00:49
2003.05.15
Помогите с ACM (дубль два)


14-46908
DenisS
2003-04-28 16:34
2003.05.15
Threads и Dll





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский