powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сжатие нескольких баз одним махом
7 сообщений из 7, страница 1 из 1
Сжатие нескольких баз одним махом
    #32037686
Anatoliy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ежедневно приходится сжимать несколько (около 20) Access97 баз. Написал что-то вроде такой проги:

Public Sub CompactDataBase()
Dim rst As Recordset
Dim s1 As String 'путь и имя исходной базы
Dim s2 As String 'копия сжимаемой базы
Dim sQ As String

'есть таблица ListDb с полными (путь + имя) именами баз данный, подлежащих сжатию
sQ = "SELECT NmDb FROM ListDb"
Set rst = CurrentDb.OpenRecordset(sQ)
With rst
.MoveFirst
Do Until .EOF 'пройдемся по всем базам и сожмем каждую из них
s1 = .Fields("NmDb")
s2 = Mid(s1, 1, Len(s1) - 4) & "_1" & ".mdb" 'копия сжимаемой базы (добавляется суффикс "_1" к исходному имени)

DBEngine.CompactDataBase s1, s2
'Пока эта строка сжимает незапароленные базы - все ОК!, Но как только база запаролена, надо ручками вводить его родимого pwd. Как бы это автоматизировать? Тогда возможно было бы сжимать базы ночью с помощью планировщика заданий, а не тащиться на работу раньше всех

Kill s1 'удаляю старую базу
Name s2 As s1 'переименовываю сжатую в новую

.MoveNext
Loop

End With
Set rst = Nothing
End Sub
...
Рейтинг: 0 / 0
Сжатие нескольких баз одним махом
    #32037698
sFx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так в чем проблема хелп прочитать?
вот выжимка
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Синтаксис

DBEngine.CompactDatabase стараяБД, новаяБД, порядок, параметры, пароль

Синтаксис метода CompactDatabase содержит следующие элементы.

Элемент	Описание
стараяБД	Выражение или переменная типа String, определяющая существующую закрытую базу данных.  Следует указать полный путь и имя файла, например  "C:\db1.mdb" .  это поддерживается сетевой операционной системой, можно также указать сетевой путь к файлу, например,  "\\server1\share1\dir1\db1.mdb" .
новаяБД	Выражение или переменная типа String, содержащая полный путь к создаваемой сжатой базе данных.  Для этого аргумента также допускается указание сетевого пути к файлу.  В аргументе новаяБД нельзя задавать ту же базу данных, которая указана в аргументе стараяБД.
порядок	Необязательный.  Выражение или переменная типа Variant, содержащая строковое выражение, применяемое для определения порядка символов (национальной языковой), который будет использоваться в операциях сравнения и сортировки в базе данных, определяемой аргументом новаяБД, как указано ниже в разделе  "Значения" .  Если данный аргумент опущен, национальная настройка новой базы данных будет определяться порядком символов, заданным в старой базе данных.
Допускается также создание пароля для базы данных новаяБД путем слияния строки пароля (начинающейся с символов  ";pwd=" ) с константой в аргументе порядок, например:
dbLangCyrillic &  ";pwd=МойПароль" 
Если требуется задать то же значение аргумента порядок, что и в базе данных стараяБД (значение по умолчанию), но указать новый пароль, достаточно ввести строку пароля как значение аргумента порядок:
 ";pwd=НовыйПароль" 
параметры	Необязательный.  Константа или комбинация констант, которая определяет один или несколько параметров, как указано ниже в разделе  "Значения" .  Пользователь имеет возможность комбинировать параметры путем суммирования констант.
пароль	Необязательный.  Выражение или переменная типа Variant, содержащая выражение, задающее пароль для базы данных с парольной защитой.  Паролю должна предшествовать строка  ";pwd=" .  Если пароль задан в аргументе порядок, данный аргумент игнорируется.
...
Рейтинг: 0 / 0
Сжатие нескольких баз одним махом
    #32037699
Anatoliy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати, обязательно ли надо восстанавливать базу после ее сжатия? Раньше я писал батничек такого типа:

"C:\Program Files\Microsoft Office\Office\Msaccess.exe" "D:\MyDb_1.mdb" /Excl /Compact
"C:\Program Files\Microsoft Office\Office\Msaccess.exe" "D:\MyDb_1.mdb" /Excl /Repair
................................... и так далее N раз по списку

"C:\Program Files\Microsoft Office\Office\Msaccess.exe" "D:\MyDb_N.mdb" /Excl /Compact
"C:\Program Files\Microsoft Office\Office\Msaccess.exe" "D:\MyDb_N.mdb" /Excl /Repair

но тогда приходилось сидеть и каждый раз нажимать кнопку "ОК", когда Access выдавало сообщение "Приложежние 'MicrosoftAccess' успешно восстановило базу данных MyDb_1.mdb". И так N раз. Да и от ввода паролей это не освобождает никак.
...
Рейтинг: 0 / 0
Сжатие нескольких баз одним махом
    #32037706
sFx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, проверка что база сжалась есть или нет? а то новая база рухнет во время сжатия, а старую Вы удалите... и пиндык, как говорится :))) или у Вас есть бэкап ночной? :))
...
Рейтинг: 0 / 0
Сжатие нескольких баз одним махом
    #32037715
sFx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а почему батник, а не VB код? если можно сделать программно компакт, то вы думаете нельзя программно восстановит? :)))) все тоже самое и тамже (Великий хелп)
а вообщения можно по Setwarnings = false/True сделать.
...
Рейтинг: 0 / 0
Сжатие нескольких баз одним махом
    #32037717
Anatoliy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да действительно сработало, я не там ставил пароль. Надо было так:
DBEngine.CompactDataBase "D:\db1.mdb", "D:\db1_1.mdb", , ,";pwd=123"
Спасибо
...
Рейтинг: 0 / 0
Сжатие нескольких баз одним махом
    #32090033
Максим$
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в ADO нет что нибуть типа DBEngine.CompactDataBase?
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сжатие нескольких баз одним махом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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