powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / ON-LOCK, ON-ERROR
4 сообщений из 4, страница 1 из 1
ON-LOCK, ON-ERROR
    #36703229
Alex_79_K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Помогите разрешить такую ситуацию: Есть блок построенный на таблице - "А". Создаю такую ситуация: Открываю вторую сессию и обновляю строку из таблицы "А", но не делаю commit т.е. блокирую обновляемую строку. Потом возвращаюсь в форму на блок (первая сессия), который построен на таблице "А" и пытаюсь изменить эту же строку. Выскакивает формсовое cообщение - Could not reserve record (2 tries). Keep trying? , мол не может использовать строку.
Мне необходимо отловить это сообщение и вставлять свое сообщение. Вот тут и возникает для меня проблема. Думал перехватить это сообщение с помощью триггера ON-ERROR, но он срабатывает только после формсового сообщения, но в нем отображается ID ошибки. Потом использовал ON-LOCK, формсового сообщения нет, но зануляется ID ошибки, а мне нужно быть увереным, что я обрабатываю именно эту ошибку. Как мне сохранить ID ошибки и использоать его в ON-LOCK.
Если есть другие варианты обхода этого сообщения,желательно без таймера, то подскажите, пожалуйста:)
Всем благодарен за помощь!:)
...
Рейтинг: 0 / 0
ON-LOCK, ON-ERROR
    #36704046
One1Up
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_79_K,

В триггере ON-LOCK надо написать примерно следующее:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
declare
  counter number;
  cursor c is
    select * from my_table
    where ... -- условия для выбора блокируемой строки
    for update nowait;
  rec c%rowtype;
begin
  counter :=  0 ;
  loop
    begin
      counter := counter +  1 ;
      open c;
      fetch c into rec;
      if c%notfound then
       close c;
       fnd_message.set_name('FND','FORM_RECORD_DELETED');
       fnd_message.error;
       raise form_trigger_failure;
      end if;
      close c;
      if (rec.field1 = :block_name.field1 or
          rec.field1 is null and :block_name.field1 is null) and
        -- и т.д. по всем полям
      then
        exit;
      else
        fnd_message.set_name('FND','FORM_RECORD_CHANGED');
        fnd_message.error;
        raise form_trigger_failure;
      end if;
    exception
      when app_exceptions.record_lock_exception then
         if c%isopen then
           close c;
         end if;
         app_exception.record_lock_error(counter);
    end;
  end loop;
end;

Строки
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
fnd_message.set_name(...);
fnd_message.error;
raise form_trigger_failure;

и

app_exception.record_lock_error(counter);
выкидывают сообщения об ошибке. Их, если хотите, можно заменить своими.
...
Рейтинг: 0 / 0
ON-LOCK, ON-ERROR
    #36705063
Alex_79_K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
One1Up, спасибо большое!:)
Но я сделал так -

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
declare 
	v_id number; 
	resource_busy exception;
	pragma exception_init(resource_busy,- 54 );
begin
	  select id into v_id from A 
	  where id = :sl_kodif.id for update nowait; 
    lock_record;
    exception 
	     when resource_busy then
	         display_mess('ваше сообщение);
	         raise form_trigger_failure;      
end;
...
Рейтинг: 0 / 0
ON-LOCK, ON-ERROR
    #36941465
cardyshad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, пожалуйста, а что делать, если задача состоит в том, чтобы при чтении другим пользователем этой же записи выдавалась не ошибка, а просто форма открывалась только на чтение, в каком месте нужно добавить ограничение?
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / ON-LOCK, ON-ERROR
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]