Форум: "Базы";
Текущий архив: 2003.12.12;
Скачать: [xml.tar.bz2];
ВнизОбработка исключения - Нет прав на выполнение действия Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c