powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Возможность временной остановки выполнения функции
9 сообщений из 9, страница 1 из 1
Возможность временной остановки выполнения функции
    #32501214
AVKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопросик насущный появился.

Access-2000. В модуле хранится злобная функция, которая перелопачивает БД, что-то выбирает, перекидывает в MS Word, подгружает туда же картинки и т.п. Все происходит очень неторопливо (полностью функция отрабатывает минут за 15). На это время Акцесс становится просто невменяемым, т.е абсолютно ни на что не реагирует. Остановить процесс можно либо закрыв Wordовский документ, в который передаются данные (и вызвав тем самым ошибку), либо через диспетчер задач.

Теперь, собственно, вопрос. Как можно заставить Акцесс реагировать на воздействие во время выполнения функции. Например, чтобы при нажатии Esc получить MsgBox типа "Прекратить или продолжить?"
...
Рейтинг: 0 / 0
Возможность временной остановки выполнения функции
    #32501365
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значиться так...

1/ Создаешь модуль
В нем в третьей сверху строчке
глобальные переменные
Public fProgress as integer, fCancel as boolean


2/ Создаешь форму formProgress
кидаешь на нее кнопку Command1
и метку Label1
ставишь у формы свойство TimerInterval = 1000 (1 сек )
и пишешь в ее (формы) коде обработчики:

Private Sub Form_Timer()
Label1.caption=fProgress
Me.Repaint
End Sub

Private Sub Command1_Click()
fCancel=TRUE
End Sub

3/ В коде долгой процедуры
в тело каждого долгоиграющего цикла
(Do...loop / for..next)
вставляешь ОДИН Doevents,
расчет прогресса
и отменяющую команду:

Do
...
fProgress=чему-то нужному
Doevents
If fCancel then
здесь пожешь спросить пользователя о подтверждении
и если да : exit do:exit sub
end if
loop


Все!
...
Рейтинг: 0 / 0
Возможность временной остановки выполнения функции
    #32501369
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
естественно,
что перед запуском долгого процесса
эту форму надо открыть поверх всех

docmd.openform ....., acdialog

а по завершении или прерывании - закрыть
...
Рейтинг: 0 / 0
Возможность временной остановки выполнения функции
    #32501383
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне больше нравится использовать API Sleep, синтаксис примитив (не считая конечно декларации) а процесс реально останавливается и не грузит проц как если вертит пустой цикл с DoEvents
...
Рейтинг: 0 / 0
Возможность временной остановки выполнения функции
    #32501387
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sleep конечно если надо конкретно заснуть
...
Рейтинг: 0 / 0
Возможность временной остановки выполнения функции
    #32501400
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 SergeySV:

а человек-то хочет не спать, а уметь прерывать ;))))
...
Рейтинг: 0 / 0
Возможность временной остановки выполнения функции
    #32501404
AVKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Возможность временной остановки выполнения функции
    #32501467
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для этого придуман DoEvents
...
Рейтинг: 0 / 0
Возможность временной остановки выполнения функции
    #32501470
AVKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Alexus12:

Спасибо большое! Спать я, действительно, пока не хотел:) А прервать удалось "на ура". Хотя со Sleep-ом тоже попробую поупражняться.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Возможность временной остановки выполнения функции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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