|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
Я считал что при загрузке базы сначала выполняется макрос autoexec, а потом грузится форма, указанная в параметрах загрузки базы. И вот столкнулся с такой вещью. У меня в autoexec вызываются несколько функций, а те в свою очередь вызывают другие функции. И получается, что autoexec ещё не отработал, а форма уже загрузилась. У меня должны в autoexec выполниться следующие проверки - наличие пути к удалённой базе - наличие самой удалённой базы - отсутствие подключенных пользователей к удалённой базе. В случаи невыполнения очередной проверки выводится MsgBox с сообщением об этом и работа оканчивается. Но у меня выводится загружаемая форма, а поверх её висит этот MsgBox с сообщением об ошибке. Странно это. ------------------------------------------------------------- А ты вложил уже свой кровный рубль в 50-ти миллиардное состояние Билла Гейтса? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2016, 12:46 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
А зачем вы это совмещаете? Проверяйте что нужно в автоэкзеке и оттуда же запускайте форму. Автоэкзек и форма грузятся параллельно ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2016, 13:02 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
MrShinА зачем вы это совмещаете? Проверяйте что нужно в автоэкзеке и оттуда же запускайте форму. Автоэкзек и форма грузятся параллельно Такое у нас требование к программе. Её потом включают в систему и запускают при помощи своеобразного диспетчера программ. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2016, 13:12 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
JossТакое у нас требование к программе Очень необычное требование. А можно попдробнее, почему возникло такое требование? Пока не понимаю, где это может потребоваться. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2016, 13:56 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
Joss- наличие пути к удалённой базе - наличие самой удалённой базы - отсутствие подключенных пользователей к удалённой базе. проверять в самой форме при открытии, autoexec убрать вообще... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2016, 14:16 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
У меня все проверки санкционированности доступа и переопределение связей в стартовой форме. AutoExec-ом никогда не пользовалась. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2016, 14:43 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
Объект автозагрузки должен быть один. Только так можно гарантировать порядок загрузки/выполнения компонентов алгоритма. Так что или форму грузить из макроса, или действия макроса выполнять при загрузке формы из её модуля. Поскольку логически сначала выполняются проверки, потом грузится форма - попытка выполнения проверок из кода модуля формы не соответствует требуемой логике в полном объёме. Вывод: воспользуйтесь советом MrShin . JossТакое у нас требование к программе. Её потом включают в систему и запускают при помощи своеобразного диспетчера программ. Это требование (по тексту - совершенно идиотское) никак не интерферирует с предлагаемой реализацией. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2016, 14:44 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
AkinaОбъект автозагрузки должен быть один. Только так можно гарантировать порядок загрузки/выполнения компонентов алгоритма. Так что или форму грузить из макроса, или действия макроса выполнять при загрузке формы из её модуля. ... Во вложении пример и с формой, и с макросом, не согласный с этим утверждением. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2016, 15:20 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
Predeclaredне согласный с этим утверждением.Каким именно? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2016, 15:21 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
AkinaКаким именно? Так я же процитировал. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2016, 15:25 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
Predeclared , там не одно утверждение. Причём базовым является утверждение AkinaТолько так можно гарантировать порядок загрузки/выполнения компонентов алгоритма. а всё остальное - следствия. Вы оспариваете именно базовое утверждение? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2016, 15:29 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
К чему относится кусок "базового утверждения": AkinaТолько так ... Утверждения с такими вставками на роль базового не подходят. Не? AkinaВы оспариваете именно базовое утверждение? Нет. Целиком процитированное. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2016, 15:43 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
PredeclaredУтверждения с такими вставками на роль базового не подходят. В среде MS Access выполнение автоматической загрузки макроса Autoexec и стартовой формы выполняется параллельно и асинхронно. Механизм какого-либо управления порядком выполнения безотносительно к содержимому указанных процедур - отсутствует. Следовательно, из трёх вариантов (только макрос, только форма, макрос и форма) только первые два варианта способны обеспечить гарантированный порядок выполнения процедур (при отсутствии в тексте вызовов асинхронных процедур, понятно). Соответственно, в данном конкретном случае слова "только так" легитимны и оправданы. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2016, 16:57 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
Akina... В среде MS Access выполнение автоматической загрузки макроса Autoexec и стартовой формы выполняется параллельно и асинхронно. Механизм какого-либо управления порядком выполнения безотносительно к содержимому указанных процедур - отсутствует. Следовательно, из трёх вариантов (только макрос, только форма, макрос и форма) только первые два варианта способны обеспечить гарантированный порядок выполнения процедур (при отсутствии в тексте вызовов асинхронных процедур, понятно). Вот это должно было быть на месте вставки "Только так", тогда фраза, безусловно годилась бы на роль "Базового утверждения". Считаем, что там оно так и было. Будем от этого и отталкиваться. Однако, приложенный пример доступно показывает несостоятельность второй части этого "Базового" утверждения, и, как следствие, остальных двух утверждений, ибо: 1. >>Объект автозагрузки должен быть один В примере их оба два. 2. >>только первые два варианта способны обеспечить гарантированный порядок выполнения процедур В примере выбран третий вариант и он 100% обеспечивает "гарантированный порядок выполнения процедур". 3. >>Так что или форму грузить из макроса, или действия макроса выполнять при загрузке формы из её модуля. ... В примере нет ни первого, ни второго варианта. Каждый сам по себе. Причем "гарантированный порядок выполнения процедур" абсолютно не зависит от того, какой объект автозагрузки сработал первым, и поднял инстанс класса. Не? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2016, 17:26 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
Если нам заранее неизвестен порядок загрузки взаимозаменяемых объектов, то логичнее пользоваться одним. То, что зависимость объектов от порядка загрузки можно обойти, не заменяет общего надежного решения. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2016, 17:39 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
mds_world..., то логичнее пользоваться одним. ... :) http://hiprog.com/forum/read.php?id_forum=1&id_theme=11795&page=1 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2016, 17:41 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
PredeclaredВ примере выбран третий вариант и он 100% обеспечивает "гарантированный порядок выполнения процедур". Да ни хрена. В примере вызов функции выполняется дважды - и при загрузке формы, и при выполнении макроса autoexec. Измените функцию на Код: vbnet 1. 2. 3. 4. 5. 6.
Очень любопытный итог в Immediate Window... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2016, 17:44 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
У меня один раз: (а2003) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2016, 17:49 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
И, кстати говоря, весь стартапный экшн по проверке должен быть описан в процедуре инициализации класса, а не в функции CheckIt. Задача функции CheckIt только в одном: дернуть инстанс класса, потому как макросы не умеют дергать методы/свойства инстансов классов. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2016, 17:53 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
PredeclaredЗадача функции CheckIt только в одном: дернуть инстанс класса, Не-а... конкретный инстанс нигде не описан и не формируется. Обращение идёт к абстрактному шаблону. PredeclaredУ меня один раз: (а2003) Один раз и должно - по озвученной выше причине. Но жаль, что Вы смухлевали и поставили вывод в процедуре после обращения к методу класса... пропустили всё самое интересное. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2016, 18:05 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
Поправка: Predeclared... весь стартапный экшн по проверке должен быть описан вызываться в процедуре инициализации класса... Описан то он может быть и в других местах. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2016, 18:06 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
Да, кстати... а потом определите (Dim) в функции экземпляр класса Project, и вызовите метод этого экземпляра. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2016, 18:08 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
Akina... Не-а... конкретный инстанс нигде не описан и не формируется. Обращение идёт к абстрактному шаблону. Вы не знакомы с Attribute VB_PredeclaredId? :) А меня мембер 13 квартал ознакомил, заочно. Akina... Но жаль, что Вы смухлевали и поставили вывод в процедуре после обращения к методу класса... пропустили всё самое интересное. Вот скрин по вашему листингу: ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2016, 18:12 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
Predeclared... А меня мембер 13 квартал ознакомил, заочно... здесь: 13829891 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2016, 18:17 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
О! по коду сперва должна выводиться единичка, а на самом деле наоборот... ни на какие мысли не наталкивает? Тогда попробуйте вот такой код: Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Сколько таки раз выполняется вызов? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2016, 18:18 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
AkinaО! по коду сперва должна выводиться единичка, а на самом деле наоборот... ни на какие мысли не наталкивает? ... Очень даже наталкивает. Форма сработала быстрее макроса, потому и сначала инстанс поднялся, а потом макрос дернул функцию. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2016, 18:22 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
Akina...Тогда попробуйте вот такой код: Код: vbnet 1. 2. 3.
Даже пробовать не буду. В моей реализации нет нужды в New Project. И прекратите "портить" мой пример своими врезками. Работайте с тем как я описал, ибо ваши врезки сродни применению полутораметрового лома в ремонте наручных швейцарских часов. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2016, 18:27 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
PredeclaredФорма сработала быстрее макроса, потому и сначала инстанс поднялся, а потом макрос дернул функцию.Увы, в корне неверно. И ещё раз повторю - в Вашем коде нет инстанса. Вот в моём последне - есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2016, 18:50 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
AkinaPredeclaredФорма сработала быстрее макроса, потому и сначала инстанс поднялся, а потом макрос дернул функцию.Увы, в корне неверно. Ну добавьте в дебаг вывод VBA.Timer в обоих случаях. Кстати говоря, у меня и на 2003 и на 2007 форма дергает инстанс впереди макроса. AkinaИ ещё раз повторю - в Вашем коде нет инстанса. Вот в моём последне - есть. А весь экшн выполняет дух святой. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2016, 18:54 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
У меня с таймером как-то так получается: ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2016, 18:59 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
Михаил, можете у себя глянуть с таймером? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2016, 19:02 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
Form_Open 14418.86 Class_Initialize 14418.86 CheckIt 14418.9 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2016, 02:05 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
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 изменили этот порядок. Или речь о том, что функция, которую запускает макрос и код открытия стартовой формы выполняются в разных потоках и поэтому может так получится, что в силу разных причин выполнение кода в одном потоке обгонит выполнение кода в другом? Это можно проверить (в одном или в разных), но мне не хочется, просто не вижу причин, почему это должно быть в разных потоках. Как думаете? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2016, 03:46 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
Читал не все, может и не понял. В AutoExec нужна одна строчка - Запуск программы, например, Start() И уже в модуле в функции Start() прописывается порядок выполнения команд/ проверок. И уже в конце Start()-а открываем форму и тд. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2016, 04:03 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
mds_world, спасибо. Вакшуль Сергей... Только я не понял зачем, чтобы определить что сработает первым, форма или функция из макроса, пользоваться для этого каким-то классом. ... Совершенно не за чем. Применение класса призвано рассечь логику старта приложения на две части: 1. неуправляемую авторВ среде MS Access выполнение автоматической загрузки макроса Autoexec и стартовой формы выполняется параллельно и асинхронно. Механизм какого-либо управления порядком выполнения безотносительно к содержимому указанных процедур - отсутствует. 2. управляемую ЯПричем "гарантированный порядок выполнения процедур" (описанный в процедуре инициализации) абсолютно не зависит от того, какой объект автозагрузки сработал первым, и поднял инстанс класса. А с тем, кто первый дергает, мы уже по ходу решили заодно "поиграться". :) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2016, 09:48 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
Горе от ума... А ведь 99 % прогеров даже не знают что есть такая проблема, херачат потихоньку... Сказали им в детстве, что макросы это отстой и нет пробемы... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2016, 10:12 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
PredeclaredПрименение класса призвано рассечь логику старта приложения на две части: 1. неуправляемую ... 2. управляемую я просто не пойму что вообще обсуждается, зачем нужны эти две части? Это все из-за вот этих фраз: JossЯ считал что при загрузке базы сначала выполняется макрос autoexec, а потом грузится форма, указанная в параметрах загрузки базы AkinaВ среде MS Access выполнение автоматической загрузки макроса Autoexec и стартовой формы выполняется параллельно и асинхронно. Какие этому есть подтверждения? Я их не вижу, поэтому и спросил, зачем вообще применять класс. Если в приложении задана стартовая форма, то сначала грузится она, а потом уже выполняется макрос. Какие проявления асинхронности? В чем? Не хочется делать лишних тестов. Кто-то может это подтвердить? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2016, 10:30 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
Вакшуль Сергей... Если в приложении задана стартовая форма, то сначала грузится она, а потом уже выполняется макрос. ... Мне НЕ удалось это опровергнуть своими немногочисленными потугами. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2016, 11:13 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
Из-за чего возникла проблема Тут кто-то спрашивал, почему используются сразу autoexec и стартовая форма. Поясняю. Для работы окно Access программно растягивается на весь экран. Чтоб не растягивать вручную (большие формы). Задачи находятся на сервере и работают с ними при помощи сервера терминалов. Почему-то получается так, что если стартовую форму прописываешь последней строкой макроса autoexec, то окно Access уменьшается до "нормального" размера (не на весь экран). А если форму грузишь как стартовую то окно Access остаётся максимальным. Почему так происходит, не разобрались. Вот и организуем загрузку программ подобным образом. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2016, 15:32 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
А что мешает максимизировать окно Акцесса программно? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2016, 16:34 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
MrShinА что мешает максимизировать окно Акцесса программно?Третья строка в предыдущем посте. Окно Access максимализируется программно, но потом почему-то сбрасывается в обычный режим. Возможно это особенности нашей конфигурации и у других такого не будет. Локально на компьютере всё отрабатывается правильно при запуске формы из макроса autoexec. А вот при работе через терминальный сервер такие фокусы и происходят ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2016, 10:14 |
|
Порядок выполнения макроса autoexec и загружаемой формы
|
|||
---|---|---|---|
#18+
vmagГоре от ума... А ведь 99 % прогеров даже не знают что есть такая проблема, херачат потихоньку... Сказали им в детстве, что макросы это отстой и нет пробемы... Я точно не знал. Как жить дальше? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2016, 11:20 |
|
|
start [/forum/topic.php?all=1&fid=45&tid=1613690]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
72ms |
get tp. blocked users: |
1ms |
others: | 10ms |
total: | 160ms |
0 / 0 |