powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Зависает форма
19 сообщений из 19, страница 1 из 1
Зависает форма
    #40023565
MSerg1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, уважаемые программисты и просто пользователи MS Access.
У меня несложный, надеюсь, вопрос. Если Панугр заглянет, буду рад его мнению.

Проблема - при выполнении кода виснет форма, откуда этот код запускали. Намертво, с сообщением "Not Responding" Но! При этом код продолжает выполняться, процедура большая, емкая, по ее окончании все нормально, форма оживает, результат на лицо, можно работать дальше. На форме предусмотрена минимальная анимация, ну в лейбл выводится счетчик цикла, чтобы пользователь понимал, что идет работа. Но вот все встает колом и ничего не обновляется спустя сотню циклов.

Подозреваю, что плохо работаю с ресурсами, память, процессор, что-то переполняется. Хотя загрузка процессора на уровне 14 процентов, память тоже отьедает не слишком.

Суть программы - в одном случае выполняется довольно затейливый запрос 30 тыс раз, в другом случае - отбор нужной информации из текстовых файлов, около 9.5 тыс файлов.


Подскажите пожалуйста, что нужно улучшить, какие средства для этого есть в арсенале VBA.
...
Рейтинг: 0 / 0
Зависает форма
    #40023568
MSerg1968
На форме предусмотрена минимальная анимация, ну в лейбл выводится счетчик цикла, чтобы пользователь понимал, что идет работа. Но вот все встает колом и ничего не обновляется спустя сотню циклов.
После изменения лейбла (или в любом другом месте внутри цикла) добавьте команду DoEvents .
...
Рейтинг: 0 / 0
Зависает форма
    #40023569
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не стоит выделять кого-то из мемберов...

MSerg1968, попробуй в циклах (но не на каждой итерации!) использовать DoEvents .
...
Рейтинг: 0 / 0
Зависает форма
    #40023571
MSerg1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Благодарю, пошел изучать
...
Рейтинг: 0 / 0
Зависает форма
    #40023602
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSerg1968,

не однократно на 2003 наблюдалась такая ситуация:
- совместно с DoEvents анимация выполняется идеально (использовался прогресс бар) хоть 100 раз подряд...
- но стоит свернуть приложение, а в некоторых случаях и просто открыть по верх например эксель и анимация прекращается, хотя после этого сам процесс как и у вас отрабатывает до конца без проблем...
Такое ощущение что сам интерпретатор (акцесс) понимая что его свернули говорит типа: а... ну раз не интересно - баба с воза, кобыле легче, не надо - так не надо...

У одного клиента (единственного) иногда долгий процесс выполнения мог зависнуть в любом месте прогресса,
причину вычислил случайно по морганию экрана ноута - usb модем мегафона, оказывается он при бездействии периодически делает подобие инициализации процессов... после сноса - проблема исчезла...
...
Рейтинг: 0 / 0
Зависает форма
    #40023648
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSerg1968
Добрый день, уважаемые программисты и просто пользователи MS Access.
У меня несложный, надеюсь, вопрос. Если Панугр заглянет, буду рад его мнению.

Проблема - при выполнении кода виснет форма, откуда этот код запускали. Намертво, с сообщением "Not Responding" Но! При этом код продолжает выполняться, процедура большая, емкая, по ее окончании все нормально, форма оживает, результат на лицо, можно работать дальше. На форме предусмотрена минимальная анимация, ну в лейбл выводится счетчик цикла, чтобы пользователь понимал, что идет работа. Но вот все встает колом и ничего не обновляется спустя сотню циклов.

Подозреваю, что плохо работаю с ресурсами, память, процессор, что-то переполняется. Хотя загрузка процессора на уровне 14 процентов, память тоже отьедает не слишком.

Суть программы - в одном случае выполняется довольно затейливый запрос 30 тыс раз, в другом случае - отбор нужной информации из текстовых файлов, около 9.5 тыс файлов.


Подскажите пожалуйста, что нужно улучшить, какие средства для этого есть в арсенале VBA.


я с акцессом уже 14 лет как не работаю, но предложил бы начать с применения метода формы Repaint,
после измения значения в контроле.
Форма не виснет, она продолжает работать, просто события отрисовки не возникают до окончания ее выполнения.

С DoEvents будь осторожнее.
Он заставляет отрабатывать все накопившиеся события интерфейса вообще.
Так, если ты будешь, как проклятый, шмакать в клаву или мышью, DoEvents отработает их все, включая нажатия на твои кнопки, повторно запускающие твой длинный процесс.
Хотя польза, в виде перетаскивания окна по экрану, от него тоже появится...
Поэтому, на время работы своего длинного кода дизейбли все опасное/ненужное на форме, если собираешься использовать DoEvents.

улучшай способ использования своего затейливого запроса (его точно нужно дергать 30 тысяч раз?) и работу с файлами.

PS
Хочешь улучшений - показывай код.
...
Рейтинг: 0 / 0
Зависает форма
    #40023867
MSerg1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
booby,
В данном случае запрос уникален тем, что это единственный раз в жизни, когда понадобился и полностью оправдан именно запрос из категории "сложный". Сколько ни программировал ранее (ладно, непрофессионально) но никогда не случалось чтобы нельзя было обойтись простыми запросами. И вот такое.

Задача простая вроде бы - есть куча народу, 1000 человек, есть календарный месяц, 30 дней (как правило), есть места приписки каждого человека. Приписка эта меняется произвольное количество раз и на произвольное количество дней за произвольный период времени (с даты найма индивида). Есть журнал, в котором содержится вся история о том, к какому обьекту был (и есть) приписан человек.

Нужно. Определить где в любой день месяца был каждый человек. Вроде бы просто, казалось бы. Ну, попробуй.

Решение. Цикл по каждому человеку и каждому дню месяца. С выполнением этого сложного запроса. Красота решения в том, что процедура получилась очень компактная, и просто хирургически точная, 100 попаданий из 100, ни одной ошибки за все время работы.
...
Рейтинг: 0 / 0
Зависает форма
    #40023872
MSerg1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag,
Применил DoEvents в процедуре поиска информации по текстовым файлам. 9600 файлов обрабатываются, каждый построчно.
поставил DoEvents через 200 файлов. Да, помогло, работает нормально, ни мышь ни клавиатуру не дергаю, просто смотрю. Выполнение спотыкается, видимо все же желательно сократить интервал до 100-150. Но инструкция пугает что этот метод сильно тормозит процесс, и так общее время получилось минуты 4-5
У меня возникает дополнительный интерес, хорошо, вот момент передачи процесса оперсистеме известен, а как поймать момент возврата управления ядру Access? Есть такая возможность?

Спасибо всем откликнувшимся.
...
Рейтинг: 0 / 0
Зависает форма
    #40023878
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSerg1968
... есть куча народу, 1000 человек, есть календарный месяц, 30 дней (как правило), есть места приписки каждого человека. Приписка эта меняется произвольное количество раз и на произвольное количество дней за произвольный период времени (с даты найма индивида). Есть журнал, в котором содержится вся история о том, к какому обьекту был (и есть) приписан человек.
...Определить где в любой день месяца был каждый человек...
решается запросом судя по постановке задачи.
...
Рейтинг: 0 / 0
Зависает форма
    #40023884
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSerg1968, в Канаде есть прописка?
...
Рейтинг: 0 / 0
Зависает форма
    #40023890
MSerg1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург,
Прописки нет, есть статус, по нему живи, где хочешь (или где можешь)
...
Рейтинг: 0 / 0
Зависает форма
    #40023906
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSerg1968
...

Решение. Цикл по каждому человеку и каждому дню месяца. С выполнением этого сложного запроса. Красота решения в том....


это техническая ошибка, брак, а не красота.
У вас компьютер слишком быстро работает, поэтому вам и кажется, что "красота".
Вместо цикла у вас должен быть один запрос.

Но здесь немедленно прилетит проблема - программа ускорится в 30 раз.
Вот куда вы тогда свой, нажитый непосильным трудом, DoEvents девать будете?
...
Рейтинг: 0 / 0
Зависает форма
    #40023931
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSerg1968
Панург,
Прописки нет, есть статус, по нему живи, где хочешь (или где можешь)
ну у нас тоже просто регистрация и живи где можешь )))
я не знал, что у вас нужно ставить власти в известность
...
Рейтинг: 0 / 0
Зависает форма
    #40023934
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
Вместо цикла у вас должен быть один запрос.
кому должен? так-то, как смог, так и решил...
...
Рейтинг: 0 / 0
Зависает форма
    #40023937
MSerg1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург,
В Канаде есть такая штука, живешь и живи. Государство знает о тебе ровно то, что ты сообщил и коммуницирует с тобой по указанному адресу. Если адрес меняется, то ты должен в установленное время оповестить госслужбы (налоговая, полиция (для прав) и еще там некоторые ) о новом адресе. Например для прав установлен строк 6 дней. (если не путаю). Потому, что адрес прямо в правах и написан. Если этого не сделать, то права будут не совсем действительны. Права кстати перевыпускаются. Раньше, лет 10 назад, на почте можно было заказать услугу такую, сообщаешь им новый адрес и они рассылают куда надо. Сейчас не знаю, ужа наверное электронные сервисы есть.
У меня правда вопрос иногда возникает, а если ты живешь в трейлере и перемещаешься в нем, то какой адрес тогда? Фиг его знает.
Ну то такое, ладно.
...
Рейтинг: 0 / 0
Зависает форма
    #40023940
MSerg1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
booby,
Ну, как говорится, нет предала совершенству, я тоже, когда приступал, думал аналогично, что сейчас вжик, и одним запросом всех выведу на чистую воду. Но по мере погружения в задачу энтузиазм поубавился. Я конечно не дам голову на отсечение, что одним запросом не решить, но и, пардон муа, ставку на удачное решение такого рода тоже не сделаю. Тем более что там такой нюанс, что этот процесс делается немного задним числом, за отчетный период вроде того. И к моменту когда он собирается, в журнале уже набегают новые записи о новых назначениях на новые места работников. Так что еще и диапазон дат нужно держать как строй на бородинском поле.
...
Рейтинг: 0 / 0
Зависает форма
    #40023942
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSerg1968,

много букв, мало кода.
дело ваше.

Зашибись - значит, зашибись.
Пусть живет красота...
...
Рейтинг: 0 / 0
Зависает форма
    #40023953
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSerg1968
Панург,
В Канаде есть такая штука, живешь и живи. Государство знает о тебе ровно то, что ты сообщил и коммуницирует с тобой по указанному адресу. Если адрес меняется, то ты должен в установленное время оповестить госслужбы (налоговая, полиция (для прав) и еще там некоторые ) о новом адресе. Например для прав установлен строк 6 дней. (если не путаю). Потому, что адрес прямо в правах и написан. Если этого не сделать, то права будут не совсем действительны. Права кстати перевыпускаются. Раньше, лет 10 назад, на почте можно было заказать услугу такую, сообщаешь им новый адрес и они рассылают куда надо. Сейчас не знаю, ужа наверное электронные сервисы есть.
У меня правда вопрос иногда возникает, а если ты живешь в трейлере и перемещаешься в нем, то какой адрес тогда? Фиг его знает.
Ну то такое, ладно.
мда... нигде бедному крестьянину нет свободы...
...
Рейтинг: 0 / 0
Зависает форма
    #40024025
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSerg1968
vmag,
поставил DoEvents через 200 файлов. Да, помогло, работает нормально, ни мышь ни клавиатуру не дергаю, просто смотрю. Выполнение спотыкается, видимо все же желательно сократить интервал до 100-150.

Видимо после изменения лейбла нужно добавить
Me.Repaint
MSerg1968
Но инструкция пугает что этот метод сильно тормозит процесс

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


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