|
|
|
Возможность временной остановки выполнения функции
|
|||
|---|---|---|---|
|
#18+
Вопросик насущный появился. Access-2000. В модуле хранится злобная функция, которая перелопачивает БД, что-то выбирает, перекидывает в MS Word, подгружает туда же картинки и т.п. Все происходит очень неторопливо (полностью функция отрабатывает минут за 15). На это время Акцесс становится просто невменяемым, т.е абсолютно ни на что не реагирует. Остановить процесс можно либо закрыв Wordовский документ, в который передаются данные (и вызвав тем самым ошибку), либо через диспетчер задач. Теперь, собственно, вопрос. Как можно заставить Акцесс реагировать на воздействие во время выполнения функции. Например, чтобы при нажатии Esc получить MsgBox типа "Прекратить или продолжить?" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2004, 16:55 |
|
||
|
Возможность временной остановки выполнения функции
|
|||
|---|---|---|---|
|
#18+
Значиться так... 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 Все! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2004, 17:49 |
|
||
|
Возможность временной остановки выполнения функции
|
|||
|---|---|---|---|
|
#18+
естественно, что перед запуском долгого процесса эту форму надо открыть поверх всех docmd.openform ....., acdialog а по завершении или прерывании - закрыть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2004, 17:50 |
|
||
|
Возможность временной остановки выполнения функции
|
|||
|---|---|---|---|
|
#18+
мне больше нравится использовать API Sleep, синтаксис примитив (не считая конечно декларации) а процесс реально останавливается и не грузит проц как если вертит пустой цикл с DoEvents ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2004, 17:55 |
|
||
|
Возможность временной остановки выполнения функции
|
|||
|---|---|---|---|
|
#18+
Sleep конечно если надо конкретно заснуть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2004, 17:56 |
|
||
|
Возможность временной остановки выполнения функции
|
|||
|---|---|---|---|
|
#18+
2 SergeySV: а человек-то хочет не спать, а уметь прерывать ;)))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2004, 18:02 |
|
||
|
Возможность временной остановки выполнения функции
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2004, 18:04 |
|
||
|
Возможность временной остановки выполнения функции
|
|||
|---|---|---|---|
|
#18+
для этого придуман DoEvents ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2004, 18:34 |
|
||
|
|

start [/forum/topic.php?fid=45&gotonew=1&tid=1674954]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
77ms |
get topic data: |
13ms |
get first new msg: |
8ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 210ms |
| total: | 414ms |

| 0 / 0 |
