powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Порядок выполнения макроса autoexec и загружаемой формы
43 сообщений из 43, показаны все 2 страниц
Порядок выполнения макроса autoexec и загружаемой формы
    #39210978
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я считал что при загрузке базы сначала выполняется макрос autoexec, а потом грузится форма, указанная в параметрах загрузки базы. И вот столкнулся с такой вещью. У меня в autoexec вызываются несколько функций, а те в свою очередь вызывают другие функции. И получается, что autoexec ещё не отработал, а форма уже загрузилась.

У меня должны в autoexec выполниться следующие проверки
- наличие пути к удалённой базе
- наличие самой удалённой базы
- отсутствие подключенных пользователей к удалённой базе.

В случаи невыполнения очередной проверки выводится MsgBox с сообщением об этом и работа оканчивается.
Но у меня выводится загружаемая форма, а поверх её висит этот MsgBox с сообщением об ошибке. Странно это.

-------------------------------------------------------------
А ты вложил уже свой кровный рубль в 50-ти миллиардное состояние Билла Гейтса?
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39210999
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем вы это совмещаете? Проверяйте что нужно в автоэкзеке и оттуда же запускайте форму. Автоэкзек и форма грузятся параллельно
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211012
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MrShinА зачем вы это совмещаете? Проверяйте что нужно в автоэкзеке и оттуда же запускайте форму. Автоэкзек и форма грузятся параллельно Такое у нас требование к программе. Её потом включают в систему и запускают при помощи своеобразного диспетчера программ.
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211059
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JossТакое у нас требование к программе
Очень необычное требование. А можно попдробнее, почему возникло такое требование? Пока не понимаю, где это может потребоваться.
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211082
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Joss- наличие пути к удалённой базе
- наличие самой удалённой базы
- отсутствие подключенных пользователей к удалённой базе.

проверять в самой форме при открытии, autoexec убрать вообще...
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211125
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня все проверки санкционированности доступа и
переопределение связей в стартовой форме.

AutoExec-ом никогда не пользовалась.
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211128
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Объект автозагрузки должен быть один. Только так можно гарантировать порядок загрузки/выполнения компонентов алгоритма. Так что или форму грузить из макроса, или действия макроса выполнять при загрузке формы из её модуля. Поскольку логически сначала выполняются проверки, потом грузится форма - попытка выполнения проверок из кода модуля формы не соответствует требуемой логике в полном объёме.
Вывод: воспользуйтесь советом MrShin .

JossТакое у нас требование к программе. Её потом включают в систему и запускают при помощи своеобразного диспетчера программ.
Это требование (по тексту - совершенно идиотское) никак не интерферирует с предлагаемой реализацией.
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211174
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaОбъект автозагрузки должен быть один. Только так можно гарантировать порядок загрузки/выполнения компонентов алгоритма. Так что или форму грузить из макроса, или действия макроса выполнять при загрузке формы из её модуля. ...
Во вложении пример и с формой, и с макросом,
не согласный с этим утверждением.
:)
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211176
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Predeclaredне согласный с этим утверждением.Каким именно?
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211182
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaКаким именно?
Так я же процитировал.
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211188
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Predeclared , там не одно утверждение. Причём базовым является утверждение
AkinaТолько так можно гарантировать порядок загрузки/выполнения компонентов алгоритма.
а всё остальное - следствия.

Вы оспариваете именно базовое утверждение?
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211208
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К чему относится кусок "базового утверждения":
AkinaТолько так ...
Утверждения с такими вставками на роль базового не подходят.
Не?

AkinaВы оспариваете именно базовое утверждение?
Нет.
Целиком процитированное.
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211283
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PredeclaredУтверждения с такими вставками на роль базового не подходят.
В среде MS Access выполнение автоматической загрузки макроса Autoexec и стартовой формы выполняется параллельно и асинхронно. Механизм какого-либо управления порядком выполнения безотносительно к содержимому указанных процедур - отсутствует.
Следовательно, из трёх вариантов (только макрос, только форма, макрос и форма) только первые два варианта способны обеспечить гарантированный порядок выполнения процедур (при отсутствии в тексте вызовов асинхронных процедур, понятно). Соответственно, в данном конкретном случае слова "только так" легитимны и оправданы.
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211307
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina... В среде MS Access выполнение автоматической загрузки макроса Autoexec и стартовой формы выполняется параллельно и асинхронно. Механизм какого-либо управления порядком выполнения безотносительно к содержимому указанных процедур - отсутствует. Следовательно, из трёх вариантов (только макрос, только форма, макрос и форма) только первые два варианта способны обеспечить гарантированный порядок выполнения процедур (при отсутствии в тексте вызовов асинхронных процедур, понятно).

Вот это должно было быть на месте вставки "Только так",
тогда фраза, безусловно годилась бы на роль "Базового утверждения".

Считаем, что там оно так и было.
Будем от этого и отталкиваться.

Однако, приложенный пример доступно показывает несостоятельность второй части этого "Базового" утверждения, и, как следствие, остальных двух утверждений, ибо:

1. >>Объект автозагрузки должен быть один
В примере их оба два.

2. >>только первые два варианта способны обеспечить гарантированный порядок выполнения процедур
В примере выбран третий вариант и он 100% обеспечивает "гарантированный порядок выполнения процедур".

3. >>Так что или форму грузить из макроса, или действия макроса выполнять при загрузке формы из её модуля. ...
В примере нет ни первого, ни второго варианта. Каждый сам по себе.

Причем "гарантированный порядок выполнения процедур" абсолютно не зависит от того,
какой объект автозагрузки сработал первым, и поднял инстанс класса.

Не?
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211327
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если нам заранее неизвестен порядок загрузки взаимозаменяемых объектов, то логичнее пользоваться одним. То, что зависимость объектов от порядка загрузки можно обойти, не заменяет общего надежного решения.
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211329
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mds_world..., то логичнее пользоваться одним. ...
:)
http://hiprog.com/forum/read.php?id_forum=1&id_theme=11795&page=1
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211338
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PredeclaredВ примере выбран третий вариант и он 100% обеспечивает "гарантированный порядок выполнения процедур".
Да ни хрена. В примере вызов функции выполняется дважды - и при загрузке формы, и при выполнении макроса autoexec.

Измените функцию на
Код: vbnet
1.
2.
3.
4.
5.
6.
Public Function CheckIt() As Boolean
Static cnt As Integer
    cnt = cnt + 1
    Debug.Print cnt
    CheckIt = Project.CheckCompleted()
End Function


Очень любопытный итог в Immediate Window...
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211344
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня один раз: (а2003)
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211351
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И, кстати говоря,
весь стартапный экшн по проверке должен быть описан в процедуре инициализации класса,
а не в функции CheckIt.
Задача функции CheckIt только в одном: дернуть инстанс класса,
потому как макросы не умеют дергать методы/свойства инстансов классов.
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211359
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PredeclaredЗадача функции CheckIt только в одном: дернуть инстанс класса,
Не-а... конкретный инстанс нигде не описан и не формируется. Обращение идёт к абстрактному шаблону.

PredeclaredУ меня один раз: (а2003)
Один раз и должно - по озвученной выше причине.
Но жаль, что Вы смухлевали и поставили вывод в процедуре после обращения к методу класса... пропустили всё самое интересное.
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211361
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поправка:
Predeclared... весь стартапный экшн по проверке должен быть описан вызываться в процедуре инициализации класса...
Описан то он может быть и в других местах.
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211364
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, кстати... а потом определите (Dim) в функции экземпляр класса Project, и вызовите метод этого экземпляра.
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211370
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina... Не-а... конкретный инстанс нигде не описан и не формируется. Обращение идёт к абстрактному шаблону.
Вы не знакомы с Attribute VB_PredeclaredId?
:)
А меня мембер 13 квартал ознакомил, заочно.

Akina... Но жаль, что Вы смухлевали и поставили вывод в процедуре после обращения к методу класса... пропустили всё самое интересное.
Вот скрин по вашему листингу:
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211373
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Predeclared... А меня мембер 13 квартал ознакомил, заочно...
здесь: 13829891
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211375
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О! по коду сперва должна выводиться единичка, а на самом деле наоборот... ни на какие мысли не наталкивает?
Тогда попробуйте вот такой код:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Public Function CheckIt() As Boolean
Dim prj As New Project
Static cnt As Integer
    cnt = cnt + 1
    Debug.Print cnt
    CheckIt = prj.CheckCompleted()
End Function


Сколько таки раз выполняется вызов?
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211380
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaО! по коду сперва должна выводиться единичка, а на самом деле наоборот... ни на какие мысли не наталкивает?
...
Очень даже наталкивает.
Форма сработала быстрее макроса, потому и сначала инстанс поднялся,
а потом макрос дернул функцию.
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211386
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina...Тогда попробуйте вот такой код:
Код: vbnet
1.
2.
3.
Public Function CheckIt() As Boolean
Dim prj As New Project
...



Даже пробовать не буду.
В моей реализации нет нужды в New Project.

И прекратите "портить" мой пример своими врезками.
Работайте с тем как я описал, ибо ваши врезки сродни
применению полутораметрового лома в ремонте наручных швейцарских часов.
:)
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211405
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PredeclaredФорма сработала быстрее макроса, потому и сначала инстанс поднялся,
а потом макрос дернул функцию.Увы, в корне неверно.

И ещё раз повторю - в Вашем коде нет инстанса. Вот в моём последне - есть.
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211411
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaPredeclaredФорма сработала быстрее макроса, потому и сначала инстанс поднялся,
а потом макрос дернул функцию.Увы, в корне неверно.
Ну добавьте в дебаг вывод VBA.Timer в обоих случаях.

Кстати говоря, у меня и на 2003 и на 2007 форма дергает инстанс впереди макроса.

AkinaИ ещё раз повторю - в Вашем коде нет инстанса. Вот в моём последне - есть.
А весь экшн выполняет дух святой.
:)
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211417
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня с таймером как-то так получается:
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211419
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил, можете у себя глянуть с таймером?
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211555
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Form_Open 14418.86 Class_Initialize 14418.86 CheckIt 14418.9
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211564
Вакшуль Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaPredeclaredФорма сработала быстрее макроса, потому и сначала инстанс поднялся,
а потом макрос дернул функцию.
Увы, в корне неверно.

Akina, та не, все верно. Не спешите. Все так, как говорит Predeclared. Сначала идет открытие формы frm1(проверял в 2010-ом). На событии открытия происходит первое обращение к классу Project, что вызывает его инициализацию. Потом уже срабатывает макрос, вызывая функцию CheckIt.
Андрей просто вас путает тем, что он изменил в описании класса атрибут Attribute VB_PredeclaredId с False на True, а вы этого, очевидно не заметили. Считайте, что это равнозначно объявлению на уровне стандартного модуля: Public Project as New Project.

Только я не понял зачем, чтобы определить что сработает первым, форма или функция из макроса, пользоваться для этого каким-то классом. Просто в соотв.процедурах сделать Debug.Print "загрузка формы" и Debug.Print "выполнение функции из макроса", что первым будет выведено в окно отладки, того и тапки.

mds_world Если нам заранее неизвестен порядок загрузки взаимозаменяемых объектов, то логичнее пользоваться одним. То, что зависимость объектов от порядка загрузки можно обойти, не заменяет общего надежного решения.
Ну, почему неизвестен? Ну, вот вывели в окно отладки сообщения и узнали, что первой грузится форма. Как выяснили, так происходит в 2010-ом, 2007-ом, 2003-ем. Было бы непоследовательно, если бы Microsoft изменили этот порядок.
Или речь о том, что функция, которую запускает макрос и код открытия стартовой формы выполняются в разных потоках и поэтому может так получится, что в силу разных причин выполнение кода в одном потоке обгонит выполнение кода в другом? Это можно проверить (в одном или в разных), но мне не хочется, просто не вижу причин, почему это должно быть в разных потоках.
Как думаете?
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211565
Александр Маркин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читал не все, может и не понял.

В AutoExec нужна одна строчка - Запуск программы,
например, Start()

И уже в модуле в функции Start()
прописывается порядок выполнения команд/ проверок.
И уже в конце Start()-а открываем форму и тд.
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211591
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mds_world, спасибо.

Вакшуль Сергей... Только я не понял зачем, чтобы определить что сработает первым, форма или функция из макроса, пользоваться для этого каким-то классом. ...
Совершенно не за чем.

Применение класса призвано рассечь логику старта приложения на две части:
1. неуправляемую
авторВ среде MS Access выполнение автоматической загрузки макроса Autoexec и стартовой формы выполняется параллельно и асинхронно. Механизм какого-либо управления порядком выполнения безотносительно к содержимому указанных процедур - отсутствует.
2. управляемую
ЯПричем "гарантированный порядок выполнения процедур" (описанный в процедуре инициализации)
абсолютно не зависит от того,
какой объект автозагрузки сработал первым, и поднял инстанс класса.


А с тем, кто первый дергает, мы уже по ходу решили заодно "поиграться".
:)
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211597
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Горе от ума...
А ведь 99 % прогеров даже не знают что есть такая проблема, херачат потихоньку...
Сказали им в детстве, что макросы это отстой и нет пробемы...
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211601
Вакшуль Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PredeclaredПрименение класса призвано рассечь логику старта приложения на две части:
1. неуправляемую
...
2. управляемую

я просто не пойму что вообще обсуждается, зачем нужны эти две части? Это все из-за вот этих фраз:

JossЯ считал что при загрузке базы сначала выполняется макрос autoexec, а потом грузится форма, указанная в параметрах загрузки базы
AkinaВ среде MS Access выполнение автоматической загрузки макроса Autoexec и стартовой формы выполняется параллельно и асинхронно.

Какие этому есть подтверждения? Я их не вижу, поэтому и спросил, зачем вообще применять класс. Если в приложении задана стартовая форма, то сначала грузится она, а потом уже выполняется макрос.
Какие проявления асинхронности? В чем? Не хочется делать лишних тестов. Кто-то может это подтвердить?
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39211622
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вакшуль Сергей... Если в приложении задана стартовая форма, то сначала грузится она, а потом уже выполняется макрос.
...
Мне НЕ удалось это опровергнуть своими немногочисленными потугами.
:)
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39213766
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из-за чего возникла проблема

Тут кто-то спрашивал, почему используются сразу autoexec и стартовая форма. Поясняю.

Для работы окно Access программно растягивается на весь экран. Чтоб не растягивать вручную (большие формы). Задачи находятся на сервере и работают с ними при помощи сервера терминалов.
Почему-то получается так, что если стартовую форму прописываешь последней строкой макроса autoexec, то окно Access уменьшается до "нормального" размера (не на весь экран). А если форму грузишь как стартовую то окно Access остаётся максимальным.

Почему так происходит, не разобрались. Вот и организуем загрузку программ подобным образом.
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39213875
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что мешает максимизировать окно Акцесса программно?
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39214336
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MrShinА что мешает максимизировать окно Акцесса программно?Третья строка в предыдущем посте. Окно Access максимализируется программно, но потом почему-то сбрасывается в обычный режим.
Возможно это особенности нашей конфигурации и у других такого не будет. Локально на компьютере всё отрабатывается правильно при запуске формы из макроса autoexec. А вот при работе через терминальный сервер такие фокусы и происходят
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39214441
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmagГоре от ума...
А ведь 99 % прогеров даже не знают что есть такая проблема, херачат потихоньку...
Сказали им в детстве, что макросы это отстой и нет пробемы...
Я точно не знал. Как жить дальше?
...
Рейтинг: 0 / 0
Порядок выполнения макроса autoexec и загружаемой формы
    #39214583
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JossОкно Access максимализируется программно, но потом почему-то сбрасывается в обычный режим
Ок, а если все проверки в событии Open стартовой формы делать?
...
Рейтинг: 0 / 0
43 сообщений из 43, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Порядок выполнения макроса autoexec и загружаемой формы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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