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

Вниз

Как перехватить исключение из MS SQL сервера?   Найти похожие ветки 

 
AndrewK   (2003-04-29 09:53) [0]

Как перехватить исключение из MS SQL сервера?
Например, пользователь хочет выполнить хранимую процедуру к которой не имеет доступа. Сервер при попытке вызова выдает сообщение

"EXECUTE permission denied on object "spGetList", database "DB", owner "dbo"".

Как можно отловить такое сообщение и заменить его на что-то типа:

"Нет доступа"


 
Yuraz   (2003-04-29 09:57) [1]

хранимая проц. пишется так:
BEGIN
EXCEPTION
//здесь сообщение, которое посылаешь пользователю при ошибке
END;



 
NAlexey   (2003-04-29 10:08) [2]

>EXCEPTION
> //здесь сообщение, которое посылаешь пользователю при ошибке
>END
Ты не ошибаешся случаем? По моему это справедливо для Oracle но не для MSSQL?

тебе где его надо перехватить? На клиенте или на серевере?
Если на клиенте то обрабатывай try...except...end; если на сервере то @@ERROR и RAISEERROR...


 
AndrewK   (2003-04-29 10:41) [3]

Хочу это сделать на клиенте, но не получается.

Вот код
...
var E : Exception;
...
try
qUsers.Active := True;
except
ShowMessage(E.Message);
end;
...

если без try .. except .. end, то выдает сообщение "EXECUTE permission denied on ...", если с ним, то выдает пустую строку.
Как бы узнать код возвращаемой ошибки, или хотя бы строку для анализа.


 
sniknik   (2003-04-29 10:54) [4]

а так?
...
try
qUsers.Active := True;
except
on E: Exception do ShowMessage(E.Message);
end;
...
(если хочеш код лови EOSError)


 
NAlexey   (2003-04-29 11:33) [5]

>var E : Exception;
>try
> qUsers.Active := True;
>except
> ShowMessage(E.Message);
>end;
>если с ним, то выдает пустую строку.
Да, силен брат. А что же еще тебе должно выдаваться? E то еще и в помине нет. Это всеравно что такое вот:
var
S: String;
try
except
ShowMessage(S);
end;
И удивляться почему это у тебя пустую строку выдает.
>on E: Exception do ShowMessage(E.Message);
Вот это уже правильно, здесь E уже существует, и ты може шь к ниму обращаться, но on E: Exception слишком широко. Используй EDatabaseError и EADOError а в else или еще какие блоки обрабатывай другие ошибки.


 
AlexGof   (2003-04-29 11:51) [6]

Я отлавливал ошибки на ApplicationEvents вот таким макаром
procedure TGMenu.ApplicationEvents1Exception(Sender: TObject;
E: Exception);
var Er : EOleException;
i : integer;
begin
If (E is EOleException) then
begin
Er:=E as EOleException;
case Er.ErrorCode of
-2147217911 : begin
Application.MessageBox("У вас недостаточно прав, для доступа к данным","",MB_OK+MB_ICONERROR);
end;
end;
end;

end;
код ошибки можно отловить в пошаговом режиме программы твоей, может это и неправильно, но работает....


 
sniknik   (2003-04-29 13:00) [7]

AlexGof © (29.04.03 11:51)
ну тут то тебе его передают параметром, другое дело, сам можеш так

try
qUsers.Active := True;
except
on E: Exception do ApplicationEvents1Exception(self, E);
end;

и там в процедуре оно будет
(кстати переменная лишняя по моему)
... case (E as EOleException).ErrorCode of ...
и можно убрать.


 
sniknik   (2003-04-29 13:03) [8]

и проверку тоже (в процедуре) тогда можно убрать, поставить
on E: EOleException do ApplicationEvents1Exception(self, E);
и все.


 
AndrewK   (2003-04-30 10:15) [9]

Спасибо.



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

Форум: "Базы";
Текущий архив: 2003.05.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
9-70084
UNIVERSAL
2002-12-03 16:40
2003.05.22
HELP по GLScene


1-70227
kznm
2003-05-11 17:13
2003.05.22
enabled:=false?


3-70154
Belkova
2003-05-02 11:09
2003.05.22
Скролинг


3-70129
BlackTiger
2003-04-30 16:06
2003.05.22
Как проинициализировать ADOConnection в сервисе?


3-70090
filin
2003-05-02 23:16
2003.05.22
Двойной клик на строке DBgrid. Номер строки в датасете???





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