MyTetra Share
Делитесь знаниями!
FAQ: Безопасное сжатие базы (mdb) или проекта (adp) Access
12.10.2019
20:37
Текстовые метки: VBA_Access, Compress
Раздел: !Закладки - VBA - Access - Compress

FAQ: Безопасное сжатие базы (mdb) или проекта (adp) Access

(обращений: 12383 с 29.11.2007)

Разделы:  ЧаВо (FAQ), Базы

 

Описание: Как можно просто реализовать управление сжатием базы или проекта для пользователей.

Автор: Дмитрий Сонных (AKA Joss)

Добавил на сайт: Joss 29.11.2007

О сжатии многопользовательских баз данных можно посмотреть вот здесь. Сжатие и архивирование БД я же остановлюсь на сжатии клиентских приложений сделанных как в формате MDB (базы), так и формате ADP (проекты).

Ещё, когда начинал писать на Access 97, возник вопрос, как периодически сжимать базу данных? За время работы она довольно сильно распухала. Решений было несколько, но все они по тем или иным причинам были не оптимальны.
1) давать пользователю доступ к полному меню Access, что бы он мог сжимать базу не очень хорошо. Он может изменить какую-нибудь важную установку.
2) Поставлять с базой утилиту
JetCompact тоже не давало желательного эффекта. Утилиту часто теряли, забывали передавать или устанавливать вместе с базой, При использовании защиты, требовалось задавать дополнительные параметры. Кроме того, многие пользователи были так сказать, «не квалифицированными» и затруднялись ею воспользоваться.
3) Использование параметров командной строки
/compact и /repair требовало размещение на рабочем столе дополнительных иконок и иногда сбивало пользователя с толку, если у иконок оказывалось одинаковое изображение. Автоматическое создание иконок на рабочем столе требовало дополнительных знаний в программировании, а вручную создавать было не всегда возможно. Хотя это и был, на мой взгляд, наиболее корректный способ обеспечения пользователя инструментом для сжатия базы.
4) Всевозможные программные ухищрения на основе Access и VBScript. Генерировались всевозможные скрипты для запуска программы на сжатие, программно создавались кнопки, на которые вешались команды на сжатие, создавались специальные программы (mdb) сжималки. Если поикать по форумам, то можно найти много следов этой деятельности.
С появлением Access 2000 ситуация несколько улучшилась. В параметрах базы появился флажок «Сжимать при закрытии». Но им не очень-то спешили воспользоваться. Постоянное сжимание базы, хоть и позволяло минимизировать объем базы, но замедляло работу (в и-нете это обсуждалось). Одно ожидание завершения сжатия, особенно когда объем базы перевалил за 10 Мб, может помотать пользователю нервы (а он, естественно, помотает Вам). Вот если бы можно было управлять этим флажком из программы. Тогда можно дать указание на сжатие файла базы при закрытии, а при открытии базы, сбрасывать установку флажка. Так можно реализовать однократное сжатие базы. Можно написать подпрограмму сжатия базы по расписанию. Осталось только узнать, как это можно сделать. Оказывается, сделать это очень просто. Всего две строчки кода

SetOption "Auto Compact", True ' включить


и

SetOption "Auto Compact", False ' выключить


Теперь одну строку надо повесить на кнопку включения сжатия файла, а вторую вставить в макрос AutoExec или стартовую форму. Вот всё и готово.

Работает для Access 2000. 2002, 2003. Для 97 не работает. Для 2007 не проверялось.

Для написания статьи были использованы материалы с сайта SQL.RU (топик
Иры с параметрами базы )

[Back]


Текущий рейтинг:
5 из 5 (проголосовало:2).

Скажите, почему Вы оценили так (необязательно):


Обсуждение статьи:  

Безопасное сжатие базы (mdb) или проекта (adp) Access

NIC

 

Всё это конечно хорошо, но если эта БД используется как файл-сервер и в данный момент какой-то пользователь просто открыл хоть одну таблицу из этой БД ( а такой всегда найдётся), то сжатия не будет! Было бы перспективно используя дополнительный блок обработки (по расписанию или процентное увеличение размера БД)так же из программы отключать всех подключённых к этой БД ( монопольный режим)без перезагрузки БД, вот это имело бы перспективу! Сам имею такую проблему и периодически вынужден делать " закат солнца в ручную".

18.12.2007 14:53


Безопасное сжатие базы (mdb) или проекта (adp) Access

NIC

 

Теже проблемы и при резервном копировании БД.

18.12.2007 15:00


Ответ NIC

Joss

 

В самом начале статьи я указал ссылку на статью, где рассматривается сжатие многопользовательских баз данных. Я подчеркнул, что здесь рассматривается сжатие клиентских приложений. Сжатие многопользовательских файл-серверных баз я тоже реализовывал. Но не хотелось дублировать вышеуказанную статью.
Алгоритм сжатия был такой.
а) Заблокировать базу на подключение новых пользователей.
б) Проверить, сколько пользователей подключено к базе, если пользователей нет, то приступить к сжатию.
в) Послать всем подключенным пользователям предупреждение о необходимости завершить работу.
г) Через заданное количество минут отключить всех пользователей.
д) Проверить, все ли пользователи отключены
е) Приступить к сжатию базы
ж) Разблокировать базу после сжатия для подключения пользователей.
Весь этот алгоритм запускался нажатием одной кнопки, и в случае необходимости мог быть отменен во время пункта г).

19.12.2007 01:10


Безопасное сжатие базы (mdb) или проекта (adp) Access

NIC

 

Извинения за мою невнимательность!

19.12.2007 11:42


 

 
MyTetra Share v.0.52
Яндекс индекс цитирования