Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-36653
Alex
2003-11-30 16:22
2003.12.12
Смысловое сравнение записей


7-36868
--olg-
2003-10-03 09:53
2003.12.12
Управление притером через WinSpool (WinXP)


14-36848
oleg111
2003-11-20 13:59
2003.12.12
помогите найти TExpression


4-36898
Volia
2003-09-12 01:31
2003.12.12
Чтение из блока памяти, выделенной в чужом адр. пространстве


14-36798
ИМХО
2003-11-20 20:58
2003.12.12
Иконки больше, чем 32 на 32





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