|
Зависает форма
|
|||
---|---|---|---|
#18+
Добрый день, уважаемые программисты и просто пользователи MS Access. У меня несложный, надеюсь, вопрос. Если Панугр заглянет, буду рад его мнению. Проблема - при выполнении кода виснет форма, откуда этот код запускали. Намертво, с сообщением "Not Responding" Но! При этом код продолжает выполняться, процедура большая, емкая, по ее окончании все нормально, форма оживает, результат на лицо, можно работать дальше. На форме предусмотрена минимальная анимация, ну в лейбл выводится счетчик цикла, чтобы пользователь понимал, что идет работа. Но вот все встает колом и ничего не обновляется спустя сотню циклов. Подозреваю, что плохо работаю с ресурсами, память, процессор, что-то переполняется. Хотя загрузка процессора на уровне 14 процентов, память тоже отьедает не слишком. Суть программы - в одном случае выполняется довольно затейливый запрос 30 тыс раз, в другом случае - отбор нужной информации из текстовых файлов, около 9.5 тыс файлов. Подскажите пожалуйста, что нужно улучшить, какие средства для этого есть в арсенале VBA. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2020, 11:24 |
|
Зависает форма
|
|||
---|---|---|---|
#18+
MSerg1968 На форме предусмотрена минимальная анимация, ну в лейбл выводится счетчик цикла, чтобы пользователь понимал, что идет работа. Но вот все встает колом и ничего не обновляется спустя сотню циклов. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2020, 11:32 |
|
Зависает форма
|
|||
---|---|---|---|
#18+
не стоит выделять кого-то из мемберов... MSerg1968, попробуй в циклах (но не на каждой итерации!) использовать DoEvents . ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2020, 11:33 |
|
Зависает форма
|
|||
---|---|---|---|
#18+
Благодарю, пошел изучать ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2020, 11:38 |
|
Зависает форма
|
|||
---|---|---|---|
#18+
MSerg1968, не однократно на 2003 наблюдалась такая ситуация: - совместно с DoEvents анимация выполняется идеально (использовался прогресс бар) хоть 100 раз подряд... - но стоит свернуть приложение, а в некоторых случаях и просто открыть по верх например эксель и анимация прекращается, хотя после этого сам процесс как и у вас отрабатывает до конца без проблем... Такое ощущение что сам интерпретатор (акцесс) понимая что его свернули говорит типа: а... ну раз не интересно - баба с воза, кобыле легче, не надо - так не надо... У одного клиента (единственного) иногда долгий процесс выполнения мог зависнуть в любом месте прогресса, причину вычислил случайно по морганию экрана ноута - usb модем мегафона, оказывается он при бездействии периодически делает подобие инициализации процессов... после сноса - проблема исчезла... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2020, 12:48 |
|
Зависает форма
|
|||
---|---|---|---|
#18+
MSerg1968 Добрый день, уважаемые программисты и просто пользователи MS Access. У меня несложный, надеюсь, вопрос. Если Панугр заглянет, буду рад его мнению. Проблема - при выполнении кода виснет форма, откуда этот код запускали. Намертво, с сообщением "Not Responding" Но! При этом код продолжает выполняться, процедура большая, емкая, по ее окончании все нормально, форма оживает, результат на лицо, можно работать дальше. На форме предусмотрена минимальная анимация, ну в лейбл выводится счетчик цикла, чтобы пользователь понимал, что идет работа. Но вот все встает колом и ничего не обновляется спустя сотню циклов. Подозреваю, что плохо работаю с ресурсами, память, процессор, что-то переполняется. Хотя загрузка процессора на уровне 14 процентов, память тоже отьедает не слишком. Суть программы - в одном случае выполняется довольно затейливый запрос 30 тыс раз, в другом случае - отбор нужной информации из текстовых файлов, около 9.5 тыс файлов. Подскажите пожалуйста, что нужно улучшить, какие средства для этого есть в арсенале VBA. я с акцессом уже 14 лет как не работаю, но предложил бы начать с применения метода формы Repaint, после измения значения в контроле. Форма не виснет, она продолжает работать, просто события отрисовки не возникают до окончания ее выполнения. С DoEvents будь осторожнее. Он заставляет отрабатывать все накопившиеся события интерфейса вообще. Так, если ты будешь, как проклятый, шмакать в клаву или мышью, DoEvents отработает их все, включая нажатия на твои кнопки, повторно запускающие твой длинный процесс. Хотя польза, в виде перетаскивания окна по экрану, от него тоже появится... Поэтому, на время работы своего длинного кода дизейбли все опасное/ненужное на форме, если собираешься использовать DoEvents. улучшай способ использования своего затейливого запроса (его точно нужно дергать 30 тысяч раз?) и работу с файлами. PS Хочешь улучшений - показывай код. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2020, 14:48 |
|
Зависает форма
|
|||
---|---|---|---|
#18+
booby, В данном случае запрос уникален тем, что это единственный раз в жизни, когда понадобился и полностью оправдан именно запрос из категории "сложный". Сколько ни программировал ранее (ладно, непрофессионально) но никогда не случалось чтобы нельзя было обойтись простыми запросами. И вот такое. Задача простая вроде бы - есть куча народу, 1000 человек, есть календарный месяц, 30 дней (как правило), есть места приписки каждого человека. Приписка эта меняется произвольное количество раз и на произвольное количество дней за произвольный период времени (с даты найма индивида). Есть журнал, в котором содержится вся история о том, к какому обьекту был (и есть) приписан человек. Нужно. Определить где в любой день месяца был каждый человек. Вроде бы просто, казалось бы. Ну, попробуй. Решение. Цикл по каждому человеку и каждому дню месяца. С выполнением этого сложного запроса. Красота решения в том, что процедура получилась очень компактная, и просто хирургически точная, 100 попаданий из 100, ни одной ошибки за все время работы. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2020, 11:07 |
|
Зависает форма
|
|||
---|---|---|---|
#18+
vmag, Применил DoEvents в процедуре поиска информации по текстовым файлам. 9600 файлов обрабатываются, каждый построчно. поставил DoEvents через 200 файлов. Да, помогло, работает нормально, ни мышь ни клавиатуру не дергаю, просто смотрю. Выполнение спотыкается, видимо все же желательно сократить интервал до 100-150. Но инструкция пугает что этот метод сильно тормозит процесс, и так общее время получилось минуты 4-5 У меня возникает дополнительный интерес, хорошо, вот момент передачи процесса оперсистеме известен, а как поймать момент возврата управления ядру Access? Есть такая возможность? Спасибо всем откликнувшимся. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2020, 11:18 |
|
Зависает форма
|
|||
---|---|---|---|
#18+
MSerg1968 ... есть куча народу, 1000 человек, есть календарный месяц, 30 дней (как правило), есть места приписки каждого человека. Приписка эта меняется произвольное количество раз и на произвольное количество дней за произвольный период времени (с даты найма индивида). Есть журнал, в котором содержится вся история о том, к какому обьекту был (и есть) приписан человек. ...Определить где в любой день месяца был каждый человек... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2020, 11:32 |
|
Зависает форма
|
|||
---|---|---|---|
#18+
MSerg1968, в Канаде есть прописка? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2020, 11:37 |
|
Зависает форма
|
|||
---|---|---|---|
#18+
Панург, Прописки нет, есть статус, по нему живи, где хочешь (или где можешь) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2020, 11:49 |
|
Зависает форма
|
|||
---|---|---|---|
#18+
MSerg1968 ... Решение. Цикл по каждому человеку и каждому дню месяца. С выполнением этого сложного запроса. Красота решения в том.... это техническая ошибка, брак, а не красота. У вас компьютер слишком быстро работает, поэтому вам и кажется, что "красота". Вместо цикла у вас должен быть один запрос. Но здесь немедленно прилетит проблема - программа ускорится в 30 раз. Вот куда вы тогда свой, нажитый непосильным трудом, DoEvents девать будете? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2020, 12:09 |
|
Зависает форма
|
|||
---|---|---|---|
#18+
MSerg1968 Панург, Прописки нет, есть статус, по нему живи, где хочешь (или где можешь) я не знал, что у вас нужно ставить власти в известность ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2020, 12:54 |
|
Зависает форма
|
|||
---|---|---|---|
#18+
booby Вместо цикла у вас должен быть один запрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2020, 12:55 |
|
Зависает форма
|
|||
---|---|---|---|
#18+
Панург, В Канаде есть такая штука, живешь и живи. Государство знает о тебе ровно то, что ты сообщил и коммуницирует с тобой по указанному адресу. Если адрес меняется, то ты должен в установленное время оповестить госслужбы (налоговая, полиция (для прав) и еще там некоторые ) о новом адресе. Например для прав установлен строк 6 дней. (если не путаю). Потому, что адрес прямо в правах и написан. Если этого не сделать, то права будут не совсем действительны. Права кстати перевыпускаются. Раньше, лет 10 назад, на почте можно было заказать услугу такую, сообщаешь им новый адрес и они рассылают куда надо. Сейчас не знаю, ужа наверное электронные сервисы есть. У меня правда вопрос иногда возникает, а если ты живешь в трейлере и перемещаешься в нем, то какой адрес тогда? Фиг его знает. Ну то такое, ладно. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2020, 13:09 |
|
Зависает форма
|
|||
---|---|---|---|
#18+
booby, Ну, как говорится, нет предала совершенству, я тоже, когда приступал, думал аналогично, что сейчас вжик, и одним запросом всех выведу на чистую воду. Но по мере погружения в задачу энтузиазм поубавился. Я конечно не дам голову на отсечение, что одним запросом не решить, но и, пардон муа, ставку на удачное решение такого рода тоже не сделаю. Тем более что там такой нюанс, что этот процесс делается немного задним числом, за отчетный период вроде того. И к моменту когда он собирается, в журнале уже набегают новые записи о новых назначениях на новые места работников. Так что еще и диапазон дат нужно держать как строй на бородинском поле. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2020, 13:18 |
|
Зависает форма
|
|||
---|---|---|---|
#18+
MSerg1968, много букв, мало кода. дело ваше. Зашибись - значит, зашибись. Пусть живет красота... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2020, 13:23 |
|
Зависает форма
|
|||
---|---|---|---|
#18+
MSerg1968 Панург, В Канаде есть такая штука, живешь и живи. Государство знает о тебе ровно то, что ты сообщил и коммуницирует с тобой по указанному адресу. Если адрес меняется, то ты должен в установленное время оповестить госслужбы (налоговая, полиция (для прав) и еще там некоторые ) о новом адресе. Например для прав установлен строк 6 дней. (если не путаю). Потому, что адрес прямо в правах и написан. Если этого не сделать, то права будут не совсем действительны. Права кстати перевыпускаются. Раньше, лет 10 назад, на почте можно было заказать услугу такую, сообщаешь им новый адрес и они рассылают куда надо. Сейчас не знаю, ужа наверное электронные сервисы есть. У меня правда вопрос иногда возникает, а если ты живешь в трейлере и перемещаешься в нем, то какой адрес тогда? Фиг его знает. Ну то такое, ладно. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2020, 13:49 |
|
Зависает форма
|
|||
---|---|---|---|
#18+
MSerg1968 vmag, поставил DoEvents через 200 файлов. Да, помогло, работает нормально, ни мышь ни клавиатуру не дергаю, просто смотрю. Выполнение спотыкается, видимо все же желательно сократить интервал до 100-150. Видимо после изменения лейбла нужно добавить Me.Repaint MSerg1968 Но инструкция пугает что этот метод сильно тормозит процесс тут уже нужно выбирать, DoEvents таки делает "паузы" в общем процессе, как бы жмет на тормоза дабы мыша и клава не висли... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2020, 17:37 |
|
|
start [/forum/topic.php?fid=45&fpage=11&tid=1609854]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 161ms |
0 / 0 |