Forms FRM-40735 много читал думал и все равно не понял..

Mit
Дата: 06.03.2007 02:14:10
Есть Forms [32 Bit] Version 10.1.2.0.2. Прочитал все сообщения по перехватыванию ошибок в Forms и все равно ничего не выходит. Следующая ситуация. Есть кнопка при нажатии на которую возникает ошибка FRM-40735, которая рождена пользовательской ошибкой ORA-20103. На уровне формы в триггере on-error есть следующий код:
DECLARE 
errnum NUMBER := ERROR_CODE; 
errtxt VARCHAR2(80) := ERROR_TEXT; 
errtyp VARCHAR2(3) := ERROR_TYPE;
dbmserrcode NUMBER;
dbmserrtext VARCHAR2(200); 

BEGIN 
  IF 	errnum = 40401 
		THEN Message('Íåò çàïèñåé äëÿ ñîõðàíåíèÿ');
  ELSIF 	errnum = 40200
		THEN Message('Ðåäàêòèðîâàíèå ïîëÿ çàïðåùåíî'); 
	ELSIF 	errnum = 41049
		THEN Message('Çàïèñü íå ìîæåò áûòü óäàëåíà');
	ELSIF errnum = 40735
		then dbmserrcode := DBMS_ERROR_CODE; 
				 dbmserrtext := DBMS_ERROR_TEXT;
      IF dbmserrcode=-20103 THEN 
       message(dbmserrtext);
      END IF; 	
ELSE Message(errtyp||'-'||TO_CHAR(errnum)||': '||errtxt);
RAISE Form_Trigger_Failure; 
END IF;
END; 
но он почему то нее срабатывает при нажатии на кнопку.. ЧТо я делаю не так? При это если описать исключения в самом триггере WHEN-BUTTON-PRESSED то все нормально..
ё
Дата: 06.03.2007 16:16:55
Если обработать ошибку на уровне блока, то она "дальше не пойдет", если хотите передать исключение "выше" - пишите в процедуре кнопки
exception 
  	when others then
   		RAISE_APPLICATION_ERROR
Mit
Дата: 06.03.2007 16:21:52
попробую
Stax.
Дата: 06.03.2007 17:56:26
нет десятки
так что выдает?
функция
create or replace function frm_err return number is
begin
 RAISE_APPLICATION_ERROR(-20000,'Ой! Вы ошиблись.');
 return 1;
end;
кнопка
declare
	v number;
begin
	v:=frm_err ();
end;

on error
DECLARE 
 err_code          NUMBER         := ERROR_CODE; 
 err_type          VARCHAR2(3)    := ERROR_TYPE; 
 err_text          VARCHAR2(2000) := ERROR_TEXT;
 server_err_code   NUMBER         := DBMS_ERROR_CODE; 
 server_err_text   VARCHAR2(2000) := DBMS_ERROR_TEXT; 
BEGIN 
  if err_code=40735 then
    --message(server_err_code);
    message(server_err_text);
  end if;
end;
......
stax
Фалюра
Дата: 06.03.2007 19:48:24
Mit
но он почему то нее срабатывает при нажатии на кнопку.. ЧТо я делаю не так? При это если описать исключения в самом триггере WHEN-BUTTON-PRESSED то все нормально..


Нарисуй в форум триггер WHEN-BUTTON-PRESSED. Скорее всего "не так" в нём.

Вообще сообщение FRM-40735 возникает если в триггере не обработано исключение (нет блока exception when ..., или этот блок не поймал определённую ошибку). В рабочем приложении такого быть не должно, это ошибка разработки. Все исключения триггера нужно обработать, выдать сообщения и при необходимости кинуть FORM_TRIGGER_FAILURE.