powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Q: когда код VBA (в MS Access) загружается в оперативную память компьютера?
25 сообщений из 25, страница 1 из 1
Q: когда код VBA (в MS Access) загружается в оперативную память компьютера?
    #32765190
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть mdb-файл, и есть в нем многоразличные процедуры, написанные, есссно, на VBA: в модулях и классах, в формай и отчетах ... в чем там еще?

Я открываю этот файл и начинаю что-то в нем делать ... Вопрос: когда, в какой момент, все эти многоразличные процедуры загружается в оперативную память компьютера? Есть среди них те, которые загружаются сразу при открытии mdb-файла? А те, которые загружаются ... не сразу??
...
Рейтинг: 0 / 0
Q: когда код VBA (в MS Access) загружается в оперативную память компьютера?
    #32765193
Kelme
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что, это так важно знать?
...
Рейтинг: 0 / 0
Q: когда код VBA (в MS Access) загружается в оперативную память компьютера?
    #32765244
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, это вопрос жизни и смерти! ;-)
...
Рейтинг: 0 / 0
Q: когда код VBA (в MS Access) загружается в оперативную память компьютера?
    #32765256
Summerson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Загружаются, компилируются и исполняются только те, которые "поставлены" исполняться при стартапе. Можно отключить исполнение, если удерживать при запуске клавишу Shift. Но в память компьютера загружаются сразу все модули VBA, сопровождающие данный файл.
При помощи XP Developer'а можно создавать COM-надстройки, которые, если не ошибаюсь, ведут себя как dll, т. е. загружаются только при обращении к ним.
...
Рейтинг: 0 / 0
Q: когда код VBA (в MS Access) загружается в оперативную память компьютера?
    #32765286
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Позвольте уточнить, что означает фраза:
Summersonв память компьютера загружаются сразу все модули VBA,
сопровождающие данный файл.- ведь ТЕКСТЫ некоторых модулей могут вообще содержать ОШИБКИ, не позволяющие их откомпилировать!?
...
Рейтинг: 0 / 0
Q: когда код VBA (в MS Access) загружается в оперативную память компьютера?
    #32765287
Kelme
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan FXS - других забот нет? :) или задумал свой Access FXS написать? :)
...
Рейтинг: 0 / 0
Q: когда код VBA (в MS Access) загружается в оперативную память компьютера?
    #32765295
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У Гетца это написано:
загружаются все функции, находящиеся в модуле при обращении к любой функции из этого модуля.

Только там это написано для других целей:
рационально разносить фнукции по модулям, чтобы лишние не загружались в память.
...
Рейтинг: 0 / 0
Q: когда код VBA (в MS Access) загружается в оперативную память компьютера?
    #32765347
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, incold, - это важное уточнение!
Я, чесссно говоря, тоже помнил - откуда-то - что код, содержащийся в форме (например) - загружается в память только при открытии этой формы ... Но астаивать не решился ...

А не подскажите, - "обращение к функции", о котором "у Гетца это написано", - это ее ФАКТИЧЕСКИЙ вызов или просто "упоминание" ее? Например, код:
Код: plaintext
1.
2.
If FALSE Then
    call aaa( 1 )
end if
- содержит ли в себе "обращение к функции"?
...
Рейтинг: 0 / 0
Q: когда код VBA (в MS Access) загружается в оперативную память компьютера?
    #32765351
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXSДа, это вопрос жизни и смерти! ;-)
гм - а критерий истинности - положим я скажу грузиться каждый 3 модуль по алфавиту в хэшированном виде - как будем проверять ?
...
Рейтинг: 0 / 0
Q: когда код VBA (в MS Access) загружается в оперативную память компьютера?
    #32765371
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например, по объему памяти, выделенному под MS Access ...
...
Рейтинг: 0 / 0
Q: когда код VBA (в MS Access) загружается в оперативную память компьютера?
    #32765378
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА не подскажите, - "обращение к функции", о котором "у Гетца это написано", - это ее ФАКТИЧЕСКИЙ вызов или просто "упоминание" ее?

Вроде бы именно вызов, а не упоминание в коде.
Но точно не скажу, Гетца под рукой нет
...
Рейтинг: 0 / 0
Q: когда код VBA (в MS Access) загружается в оперативную память компьютера?
    #32765463
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXSНапример, по объему памяти, выделенному под MS Access ...
Access память не освобождает без закрытия mdb - увидеть последующие оверлеи не удастся - т.е. по обьёму не выход
...
Рейтинг: 0 / 0
Q: когда код VBA (в MS Access) загружается в оперативную память компьютера?
    #32765493
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторAccess память не освобождает без закрытия mdb - увидеть последующие оверлеи не удастся - т.е. по обьёму не выход

Не знаю для чего автору топика такая информация, но знать это не помешает.

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

Конечно для тех, у кого рабочие станции PIV + 512 RAM этот вопрос не актуален
...
Рейтинг: 0 / 0
Q: когда код VBA (в MS Access) загружается в оперативную память компьютера?
    #32765499
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXSА не подскажите, - "обращение к функции", о котором "у Гетца это написано", - это ее ФАКТИЧЕСКИЙ вызов или просто "упоминание" ее? Например, код:
Код: plaintext
1.
2.
If FALSE Then
    call aaa( 1 )
end if
- содержит ли в себе "обращение к функции"?
тест:
написать в новый модуль ф-ю aaa() с ошибкой КОМПИЛЯЦИИ , вызвать ф-ю test_aaa() ДРУГОГО модуля , имеющую в теле данный код (If FALSE Then call aaa(1)). Если ф-я исполнится, - значит аксесс не пытался "разместить в памяти" (т.е., в т.ч. откомпилировать aaa() И ее модуль) Если не исп-ся - пытался.
...
Рейтинг: 0 / 0
Q: когда код VBA (в MS Access) загружается в оперативную память компьютера?
    #32765947
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверить загружены ли модули в память можно так:
Код: plaintext
1.
2.
3.
4.
  Dim var As Variant

    For Each var In CurrentProject.AllModules
        Debug.Print var.name & " -> " & var.IsLoaded
    Next var

Загрузить в память можно (как уже сказали) при первом вызове любой процедуры/функции из модуля.
Правда не сказали - зачем это нужно - наверное одна из попыток "оптимизировать" работы программы :) но скорей весего не с того конца подход.
...
Рейтинг: 0 / 0
Q: когда код VBA (в MS Access) загружается в оперативную память компьютера?
    #32766249
Конечно не с того!
Вот например, код обработки необрабатываемых (гы) ошибок, ну тот, который кричит юзеру, типа, не знаю чё и делать, зови папу-программера, или код, который в тихаря пишет лог ошибок и правит их к папе - надо, конечно, разместить в одном модуле со старт-аповыми функциями. Ну что бы было! Правда, ошибки подобного рода не случаются уже давным-давно, но все равно, это мелочь ведь...
Или например, формирование квартального отчета. Ну не, не средствами стандартного Репорта, а собстными силами, так сказать. Тоже в тот же модуль! А вдруг квартал бывает каждый день?
Или вон, как Инколд заметил про многопрофильность... Ну и нефик! Пусть у кладовщиков в памяти валяются функции маркетологов! А пусть приучаются к "доброму-светлому-вечному", а то всё остатки, да остатки...
Или, опять же, функции импорта данных от удаленных филиалов. Ну вот почему бы им не грузиться в память сразу всех машин? Правильно, ни почему... А вдруг именно вот на этой из десятка машин будут делать импорт... 2 раза в неделю...

Полностью согласен с предыдущим оратором! Нефик так оптимизировать, и вообще, нефик это знать!
Я пральна понял?

з.ы. Гео, а с этим-то постом всё нормально? Соответствует Правилам? :)
...
Рейтинг: 0 / 0
Q: когда код VBA (в MS Access) загружается в оперативную память компьютера?
    #32766424
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а ещё архитектура у Intel/AMD фон-неймановская - посему и все данные хранятся здесь-же
...
Рейтинг: 0 / 0
Q: когда код VBA (в MS Access) загружается в оперативную память компьютера?
    #32766549
Фон-Нейман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А я то тут при чем?! Я что, учил Билла оставлять в памяти загруженные модули до терминирования процесса? Я, если честно, вообще не знал, что такое "процесс" в Вындоус :)
А данные... Данные в Акцессе могут быть выгружены (вытеснены из кэша), в отличии от модулей, поэтому в контексте данного обсуждения рассматриваться не должны! ИМХО

С уважением,
Ваш Нейм.
...
Рейтинг: 0 / 0
Q: когда код VBA (в MS Access) загружается в оперативную память компьютера?
    #32766623
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Senin ViktorПроверить загружены ли модули в память можно так:
Код: plaintext
1.
2.
3.
4.
  Dim var As Variant

    For Each var In CurrentProject.AllModules
        Debug.Print var.name & " -> " & var.IsLoaded
    Next var

Загрузить в память можно (как уже сказали) при первом вызове любой процедуры/функции из модуля.
Правда не сказали - зачем это нужно - наверное одна из попыток "оптимизировать" работы программы :) но скорей весего не с того конца подход.

потыкал кнопочки. Кажется .IsLoaded показывает не "загружен ли в память" , а открыт ли "объект" (после запуска ф-ий из любого модуля он (модуль) у меня не .IsLoaded, если не открыт в окне VBA - т.е. IsLoaded для него адекватно появлению в Application.Modules). Или я чего-то не так понимаю?

Вот даже и тест:
поместил процедуру от Senin Viktor в (Module1 ) и ее вызов - в код ф-ии из модуля uFileDirFunctions, закрыл все _окна_ модулей и запустил:

Immediate:?CurrentDbPath
...
uFileDirFunctions -> False
...
Module1 -> False
C:\...\уть т.е.\
ну неушшшш-то Аксесс выгружает модуль из памяти только для того, чтобы напечатать строчку в дебуг?
т.ч. в явном виде модули БД на загруженность себя в память не стучат.


Но основная проблема, как я понял не в том, как загрузить, а в том, как выгрузить. Может быть пихать все что можно в модули форм (или классов)? Уж они то, вроде, должны выгружаться при удалении последней ссылки на них (или их экземпляры).
...
Рейтинг: 0 / 0
Q: когда код VBA (в MS Access) загружается в оперативную память компьютера?
    #32766656
4321пускНо основная проблема, как я понял не в том, как загрузить, а в том, как выгрузить. Может быть пихать все что можно в модули форм (или классов)? Уж они то, вроде, должны выгружаться при удалении последней ссылки на них (или их экземпляры).
Не-не-не! Мы не выгружаемся! При удалении последней ссылки мы просто освобождаем память, выделенную под ДАННЫЕ класса (ну там, переменные, которые описаны в классе), а код (т.е. методы) остаются в памяти...
Точно...
...
Рейтинг: 0 / 0
Q: когда код VBA (в MS Access) загружается в оперативную память компьютера?
    #32766727
короче
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Модули классов Не-не-не! Мы не выгружаемся! При удалении последней ссылки мы просто освобождаем память, выделенную под ДАННЫЕ класса (ну там, переменные, которые описаны в классе), а код (т.е. методы) остаются в памяти...
Точно...

Ах да. Да еще чё-то там с какой-то таблицей было...
Помню, што читал. Не помню, - што читал. Давно это было. А че, методы в натуре круче свойств(ов), что им - постоянная прописка, а свойствам - временная? Или промеж их таки есть какая завалященькая справедливость? Может таки выгружает VB код иногда? Вот если я какой-нть ад-инн поюзал, его код так и провисит до конца в памяти, или отвалится таки? Может через разделения на взаимоссылающиеся приложения вопрос этот порешить?
...
Рейтинг: 0 / 0
Q: когда код VBA (в MS Access) загружается в оперативную память компьютера?
    #32766776
Гарвард
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Фон-НейманА я то тут при чем?! Я что, учил Билла оставлять в памяти загруженные модули до терминирования процесса? Я, если честно, вообще не знал, что такое "процесс" в Вындоус :)
А данные...
старый чёрт - забыл что у тебя данные и программа сидят в ОДНОМ пространстве ?
...
Рейтинг: 0 / 0
Q: когда код VBA (в MS Access) загружается в оперативную память компьютера?
    #32766780
корочеА че, методы в натуре круче свойств(ов), что им - постоянная прописка, а свойствам - временная? Или промеж их таки есть какая завалященькая справедливость?
Да есть я, есть я между ними... Методы - это как раз и есть код, который одинаков для всех объектов, созданных на основе данного класса. Т.е. метод DieBeach выполняется одним и тем же кодом для всех объектов данного класса. Но вот значения свойств объектов разные! Например свойство BeachName моежет быть у разных объектов разным - у одного "МарияИзольда", а у другого "МайклДжексон". И хранить их надо в разных местах, хотя "обработать" можно одним и тем же кодом. Капиш?

корочеВот если я какой-нть ад-инн поюзал, его код так и провисит до конца в памяти, или отвалится таки? Может через разделения на взаимоссылающиеся приложения вопрос этот порешить?
Себя ради должна сказать, что инфа на ЭТУ тему отсутствует... Извиняюся...
...
Рейтинг: 0 / 0
Q: когда код VBA (в MS Access) загружается в оперативную память компьютера?
    #32766785
Фон-Нейман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гарвардстарый чёрт - забыл что у тебя данные и программа сидят в ОДНОМ пространстве ?
Дык... это... А чего сразу я? И вообще, по какому поводу то? Нда... Альцгеймер никого не пощадит...
...
Рейтинг: 0 / 0
Q: когда код VBA (в MS Access) загружается в оперативную память компьютера?
    #32769944
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4321 Senin ViktorПроверить загружены ли модули в память можно так:
Код: plaintext
1.
2.
3.
4.
  Dim var As Variant

    For Each var In CurrentProject.AllModules
        Debug.Print var.name & " -> " & var.IsLoaded
    Next var

Загрузить в память можно (как уже сказали) при первом вызове любой процедуры/функции из модуля.
Правда не сказали - зачем это нужно - наверное одна из попыток "оптимизировать" работы программы :) но скорей весего не с того конца подход.

потыкал кнопочки. Кажется .IsLoaded показывает не "загружен ли в память" , а открыт ли "объект" (после запуска ф-ий из любого модуля он (модуль) у меня не .IsLoaded, если не открыт в окне VBA - т.е. IsLoaded для него адекватно появлению в Application.Modules). Или я чего-то не так понимаю?

Вот даже и тест:
поместил процедуру от Senin Viktor в (Module1 ) и ее вызов - в код ф-ии из модуля uFileDirFunctions, закрыл все _окна_ модулей и запустил:

Immediate:?CurrentDbPath
...
uFileDirFunctions -> False
...
Module1 -> False
C:\...\уть т.е.\
ну неушшшш-то Аксесс выгружает модуль из памяти только для того, чтобы напечатать строчку в дебуг?
т.ч. в явном виде модули БД на загруженность себя в память не стучат.


Но основная проблема, как я понял не в том, как загрузить, а в том, как выгрузить. Может быть пихать все что можно в модули форм (или классов)? Уж они то, вроде, должны выгружаться при удалении последней ссылки на них (или их экземпляры).


Ты прав :(
Действительно IsLoaded - лишь только загрузка в IDE VBA. Почему то я считал иначе.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Q: когда код VBA (в MS Access) загружается в оперативную память компьютера?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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