powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Forms 6i, окно приложений
12 сообщений из 12, страница 1 из 1
Forms 6i, окно приложений
    #37031949
levonast
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые коллеги. Форма написана в FORMS 6 и отображает ход некоего процесса:
:blk.counter :=0; -- -- счетчик циклов на форме
For i in (select FLD from MY_TBL) loop
my_proc(FLD);
:blk.counter := :blk.counter+1;
End loop;
message('OK');
Счетчик нормально отсчитывает количество циклов. Но стоит кликнуть где нибудь в окне формы
вне окна или активизировать другое приложение, как счетчик сразу замораживается,
хотя цикл нормально продолжает работать до своего завершения. Пробовал тип окна MODAL / DOCUMENT. Не помогает. Где решение проблемы. Спасибо, заранее
...
Рейтинг: 0 / 0
Forms 6i, окно приложений
    #37032096
-=APS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может, SYNCHRONIZE поможет?
...
Рейтинг: 0 / 0
Forms 6i, окно приложений
    #37032196
levonast
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пробовал, нет. Я забыл привесити SYNCHRONIZE в тексте.
...
Рейтинг: 0 / 0
Forms 6i, окно приложений
    #37036600
OmegaMale
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
levonast,

сделать таймер и цикл реализовать на триггере When-Timer-Expired
...
Рейтинг: 0 / 0
Forms 6i, окно приложений
    #37036644
levonast
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо.
Но неужели нет других способов ?
...
Рейтинг: 0 / 0
Forms 6i, окно приложений
    #37036715
Les
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я предпочитаю пускать джоб, в форме стартовать отдельное окошко, где по таймеру считывать сообщения от джоба через dbms_pipe, заодно ему могу послать сообщение, что бы прекращал
А у тебя попробуй все-таки синхронайз, но если цикл слишком большой, то сделай внутри цикла счетчик, и вызывай синхронайз не на каждый чих, а допустим через 100 проходов основного цикла
...
Рейтинг: 0 / 0
Forms 6i, окно приложений
    #37036747
levonast
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если так, то не помогает
--
:blk.counter :=0; -- -- счетчик циклов на форме
vC :=0;
For i in (select FLD from MY_TBL) loop
my_proc(FLD); --это не stored procedure, a program unit in FORMS
vC :=vC+1;
If mod(vC,100)=0 then
:blk.counter := vC;
synchronize;
End if;
End loop;
message('OK');
...
Рейтинг: 0 / 0
Forms 6i, окно приложений
    #37037655
-=APS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ХЗ... Возможно, это связано с тем, что операционка решает, что процесс слишко долго не опрашивал очередь системных сообщений... Во всяком случае, склепал нечто подобное под Forms6i + XP SP3 - воспроизводится (т.е., щелкнешь мышой где-нить через 4-4.5 сек после начала - "замерзает"; не щелкнешь - красиво отрисовывается до конца цикла).
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
declare
	i number;
	j number;
begin
	i :=  0 ;
	go_block('curren');
	loop
	  exit when :system.last_record = 'TRUE';
	  next_record;
	  for j in  1  ..  500000  loop
	  	null;
	  end loop;
	  i := i +  1 ;
	  :block4.item6 := i;
	  synchronize;
	end loop;
end;
...
Рейтинг: 0 / 0
Forms 6i, окно приложений
    #37037833
levonast
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
какой же выход ?
...
Рейтинг: 0 / 0
Forms 6i, окно приложений
    #37038435
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
levonastкакой же выход ?

Как минимум - написать используемую версию Формс. Или спрашивать в пустоту, в надежде, что найдется владелец хрустального шара.
...
Рейтинг: 0 / 0
Forms 6i, окно приложений
    #37038446
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=APS=-ХЗ... Возможно, это связано с тем, что операционка решает, что процесс слишко долго не опрашивал очередь системных сообщений... Во всяком случае, склепал нечто подобное под Forms6i + XP SP3 - воспроизводится (т.е., щелкнешь мышой где-нить через 4-4.5 сек после начала - "замерзает"; не щелкнешь - красиво отрисовывается до конца цикла).


Клиент-сервер?
У меня всегда просто SYNCHRONIZE помогал.

Возможно, что не обработанное события WM_CLICK висит в очереди и не дает пройти WM_PAINT. Но странно это все. Я такого за несколько лет работы с Forms не встречал. Да... Если закрыть окно формс другой программой, а потом обратно другую программу свернуть - то выглядит не красиво. Но счетчик (при синхронизе) всегда нормально перерисовывался.

В любом случае, совет Les насчет таймера работать должен. Таймер не будет блокировать очередь сообщений.
...
Рейтинг: 0 / 0
Forms 6i, окно приложений
    #37038946
levonast
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И тем не менее спасибо всем. И с Новым Годом.
Главное не падать духом при работе с Формс.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Forms 6i, окно приложений
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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