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

Вниз

Обработка исключения - Нет прав на выполнение действия   Найти похожие ветки 

 
Nick-From ©   (2003-11-19 19:55) [0]

Хочу обрабатывать такое исключение при добавлении, скажем, нового поставщика в таблицу поставщиков В САМОЙ ХП НА ДОБАВЛЕНИЕ.

Текст процедуры такой:
result - возвращаемый процедурой код выполнения:
1 - вставили новую запись успешно.
-1 - нет прав на вставку у данного пользователя.
-2 - ошибка уникального индекса - такой поставщик уже есть.

CREATE PROCEDURE PROC_SUPPLIERS_ADDNEW
(
aSupplierId INTEGER,
aSupplierName VARCHAR(20),
aSupplierAddress VARCHAR(50),
aSupplierPhoneFax VARCHAR(30),
aSupplierDirector VARCHAR(30),
aSupplierIsActive INTEGER
)
RETURNS
(
result INTEGER
)
AS
BEGIN
INSERT INTO Suppliers (Sup_Id, Sup_Name, Sup_Address, Sup_PhoneFax, Sup_Director, Sup_IsActive) VALUES (:aSupplierId, :aSupplierName, :aSupplierAddress, :aSupplierPhoneFax, :aSupplierDirector, :aSupplierIsActive);
POST_EVENT "event_suppliers_addnew_done";
result = 1;

WHEN SqlCode -552 DO
BEGIN
result = -1;
END
WHEN SqlCode -803 DO
BEGIN
result = -2;
END
WHEN ANY DO
BEGIN
result = 5;
END
END^

как видно из процедуры, за обработку нашего исключения отвечает блок:

WHEN SqlCode -552 DO
BEGIN
result = -1;
END

Но почему-то результата -1 не бывает никогда.
Если пользователь лезет без прав, срабатывает исключение в самой Delphi:

fmMain.pFIBQuery1:
This user does not have privilege to perform this operation on this object. No permission for insert/write access to table SUPPLIERS.

При этом result = 0
т.е. хранимая процедура даже и не запускается похоже
(не срабатывает блок WHEN ANY DO result = 5) - а Exception возникает на клиенте.

Запускаю процедуру так:
pFIBQuery1.ExecProcedure("PROC_SUPPLIERS_ADDNEW", [StrToInt(Edit1.Text), Edit2.Text, Edit3.Text, Edit4.Text, Edit5.Text, Integer(CheckBox1.Checked)]);

Подскажите, как сделать так, чтобы обработка ошибки срабатывала на сервере в ХП, а не у pFIBQuery1 ???

Причем ошибка уникальности индекса работает нормально.


 
ЮЮ ©   (2003-11-20 02:27) [1]

>т.е. хранимая процедура даже и не запускается похоже

а откуда жн тогда попытка вставить в таблицу? :
No permission for insert/write access to table SUPPLIERS

М.б. SqlCode в этом случае другой?. Изначально присвой его Result-у, а затем модифицируй его


 
stud ©   (2003-11-20 09:22) [2]

embededsql стр.242
whenever может спасет?


 
Zacho ©   (2003-11-20 09:32) [3]


> stud © (20.11.03 09:22) [2]

Embedded SQL - это для препроцессора gpre, к хранимым процедурам никакого отношения не имеет.


 
stud ©   (2003-11-20 09:52) [4]

тогда наверное проще обработку исключения осуществлять в приложении


 
Digitman ©   (2003-11-20 10:49) [5]

попробуй анализировать не SQLCODE, а GDSCODE :

WHEN GDSCODE 335544553 DO EXCEPTION NO_SUCH_PRIVELEGIES


 
Nick-From ©   (2003-11-20 16:51) [6]

2 Digitman
А так почему-то вообще не компилится (IbExpert)


 
Digitman ©   (2003-11-20 17:27) [7]

и чего говорит ? мол, не знаю никаких "NO_SUCH_PRIVELEGIES" ?

ну так ты создай EXCEPTION этот перед компиляцией данного кода !

и вообще - это я в кач-ве возможной реакции на отказ, совершенно необязательно делать именно то, что я привел после DO ...


 
Nick-From ©   (2003-11-21 13:47) [8]

Ну так и не компилится до DO
ему не нравится сам GDSCODE т.е. 335544553
курсор после него становится перед DO и все - error

WHEN GDSCODE 335544553 DO
BEGIN
result = -1;
END

можт еще где можно скомпилить?


 
Nick-From ©   (2003-11-21 13:51) [9]

Ошибка такая:

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 16, char 14.
335544553.


 
Nick-From ©   (2003-11-21 13:53) [10]

А когда его в кавычки берешь, он компилится, но когда делаешь commit говорит:

Invalid token.
invalid request BLR at offset 269.
status code 335544553 unknown.


 
Zacho ©   (2003-11-21 20:15) [11]


> Nick-From © (21.11.03 13:53) [10]

Попробуй WHEN GDSCODE "isc_grant_nopriv"



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

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

Наверх




Память: 0.49 MB
Время: 0.02 c
14-36824
FoxPro
2003-11-19 13:34
2003.12.12
Вопрос по поводу FoxPro


7-36876
COSINUS
2003-10-07 19:04
2003.12.12
Пример использования COMport


1-36646
azazello
2003-11-30 00:16
2003.12.12
Как добавить фоновый рисунок в TRichEdit?


1-36659
K.L.
2003-11-30 18:09
2003.12.12
Проблема со SpeedButton ом


8-36772
RomanDD
2003-08-15 22:07
2003.12.12
Прошу совет у мастеров. Редактор объектов и связей