Как удалить FRM-40401 при вставке значений в таблицу в Oracle Forms - PullRequest
0 голосов
/ 09 июня 2018

Я не могу отобразить сообщение после вставки значения в таблицу.Вместо этого он продолжает отображать FRM-40401

 CREATE TABLE NUMBERS
 (
 NUM1 INT
 );

Хотя мой код для WHEN_BUTTON_PRESSED -

 DECLARE
   VAR_VALUE INT;
 BEGIN
   VAR_VALUE := :MYNUMBERS.MYVALUE;

   INSERT INTO NUMBERS (NUM1) VALUES (VAR_VALUE);   

   MESSAGE('YOU INSERTED '||var_value);
   commit;
 END;

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

Я не могу отобразить сообщение после вставки значения в таблицу.Вместо этого он продолжает отображать ORA40401

Это из-за

MESSAGE('YOU INSERTED '||var_value);
commit;

Если вы запустите форму в режиме отладки, вы увидите, что сообщение на самом деле равно отображается в нижней части экрана, но commit - который следует - немедленно перезаписывает предыдущее сообщение.

Самый простой способ «исправить» это показать сообщение в виде предупреждения, т.е.всплывающее окно на экране, и это можно сделать двумя последующими MESSAGE вызовами:

MESSAGE('YOU INSERTED '||var_value);
MESSAGE('YOU INSERTED '||var_value);
commit;

Кстати, вам не нужна локальная переменная;вместо этого введите значение элемента:

INSERT INTO NUMBERS (NUM1) VALUES (:MYNUMBERS.MYVALUE); 
0 голосов
/ 09 июня 2018

Когда выдан коммит, FRM-40400 или FRM-40401 может возникнуть, чтобы показать, что транзакция произошла или нет проблем, возникших во время транзакции, соответственно.

Для подавленияПри таком типе сообщений можно рассмотреть два метода:

  1. в триггер ON-MESSAGE на уровне формы можно поместить следующее:

    If  Message_Code in (40400, 40401) Then 
         null;  
    End If;
    
  2. В качестве альтернативы в триггер можно поместить следующее, где выдан коммит

    (может быть внутри триггера WHEN-BUTTON-PRESSED):

    :system.message_level := '5'; 
    -- to suppress all messages with severity below level 5.
     commit;
    :system.message_level := '0';
    

    Где уровни сообщений являются:

    0  - Default value. All types of messages from the other levels of severity. 
    5  - Reaffirms an obvious condition. 
    10 - Indicates that the operator has made a procedural mistake. 
    15 - Declares that the operator is attempting to perform a function 
         for which the form is not designed. 
    20 - Indicates a condition where the operator cannot continue an intended 
         action due to a problem with a trigger or another outstanding condition. 
    25 - Indicates a condition that could result in the form performing incorrectly.
    
...