Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / экспорт (как объединить 3 процедуры из статьи Юрия Шермана в одну) / 3 сообщений из 3, страница 1 из 1
06.11.2004, 10:52:08
    #32771652
vvb152
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт (как объединить 3 процедуры из статьи Юрия Шермана в одну)
Всем привет. Думаю, многие знают статью "О мусоре в модулях Access и крахе проектов VBA" (Автор: Юрий Шерман).
Я тоже попробовал воспользоваться приведённым в ней кодом. В акцессе 97 прокатило. А вот в ХР - нет.
И как-то я сам открыл для себя одну вещь - того же самого можно добиться, экспортируя всю базу (вернее, файл) в новый файл. С учётом большого количества объектов решил написАть прогу. Привожу её.

Function Экспорт()
On Error GoTo выход
Dim db As Database, wrk As Workspace, NewDb As Database, контейнер As Container, _
документ As Document, qd As QueryDef, strmdb As String, Что
Set db = CurrentDb
strmdb = Application.CurrentProject.Path & "\temp1.mdb" ' Путь новой временной базы
If Dir(strmdb) <> "" Then Kill strmdb 'Уничтожаем старую базу данных
DBEngine.CreateDatabase strmdb, dbLangGeneral
Set wrk = CreateWorkspace("", "admin", "", dbUseJet)
Set NewDb = wrk.OpenDatabase(strmdb)
For Each контейнер In db.Containers
Select Case контейнер.Name
Case "Forms", "Modules", "Reports", "Scripts"
Select Case контейнер.Name
Case "Forms"
Что = acForm
Case "Modules"
Что = acModule
Case "Reports"
Что = acReport
Case "Scripts"
Что = acMacro
End Select
For Each документ In контейнер.Documents
DoCmd.TransferDatabase acExport, "Microsoft Access", NewDb.Name, Что, документ.Name, документ.Name
Next
End Select
Next
For Each qd In db.QueryDefs
DoCmd.TransferDatabase acExport, "Microsoft Access", NewDb.Name, acQuery, qd.Name, qd.Name
Next
NewDb.Close
DBEngine.CompactDatabase strmdb, Application.CurrentProject.Path & "\temp.mdb" ' а вот, собственно, и новая база
Kill strmdb
MsgBox "Экспорт в базу " & Application.CurrentProject.Path & "\temp.mdb" & " всех объектов текущей базы закончен.", vbInformation + vbOKOnly, "Внимание!"
выход:
On Error Resume Next
NewDb.Close
wrk.Close
Set wrk = Nothing
Set db = Nothing
Set NewDb = Nothing
End Function

сейчас эту функцию повесил на макрос - достаточно удобно.
програмка работает нормально (я сам сейчас пользую А-ХР). Но есть несколько моментов. Заключаются они в том, что акцесс по умолчанию создает файл с одним набором свойств, ссылок и т.д., а реально требуются несколько другие (к примеру, автосжатие при закрытии и т.д., чего по умолчанию в акцессе нет).
Вот процедура, вытягивающая списком свойства файла и его ссылки:

Sub ksdjfh()
On Error Resume Next
Dim db As Database, prop As Property, ref As Reference
Set db = CurrentDb
For Each prop In db.Properties
Debug.Print prop.Name & ": " & prop.Value
Next
Debug.Print "=============================="
For Each ref In Application.References
Debug.Print ref.Name & ": " & ref.FullPath
Next
Set db = Nothing
End Sub

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

и, наконец, где-то (уже не помню), нашёл такую вот прогу, которая компилирует проект:

Function SaveAndCompile() As Boolean
SysCmd 504, 16483
SaveAndCompile = Application.IsCompiled
If Not IsCompiled Then
MsgBox "Compilation process failed due to non-syntax errors in source code!" _
& vbCr & "Please use menu command Debug /Compile And Save All Modules to find the error!"
Else
MsgBox "Successfully compiled and saved all modules!"
End If
End Function

Суть просьбы такая: подскажите, как объединить все 3 процедуры в одну. Цель - запустил макрос, и можно идти курить, машина всё сама сделает за тебя.
Заранее благодарствую.
Вячеслав

зы. не думаю, что изобрёл велосипед, но эффект сжатия довольно сильный.
...
Рейтинг: 0 / 0
20.11.2004, 00:39:28
    #32792437
vvb152
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт (как объединить 3 процедуры из статьи Юрия Шермана в одну)
Пардон, что снова поднимаю топик, но вот решил свою небольшую проблему, и процедура стала корректно работать. Повторюсь, предназначена она для экспорта всей базы в новый файл. Результат - файл не содержит в себе временных объектов, скомпилирован и сжат до минимально возможных размеров. Когда разрабатываешь/вносишь изменения в базу, то нередко она "пухнет" до тех пор, пока не упадет. Для меня спасением явилась эта моя программа. Может, кому-нибудь и пригодится.
Работает с единственным замечанием: заточена именно под ХР. Правда, на других версиях не пробовал, но часть кода, где идёт установка свойств нового файла (SetOption), к Access'у 97 однозначно не применима (хотя, если выкинуть отсутствующие в нём свойства, то, думаю, прокатит).
Может, кому-нибудь и пригодится.
...
Рейтинг: 0 / 0
20.11.2004, 00:59:27
    #32792441
vvb152
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт (как объединить 3 процедуры из статьи Юрия Шермана в одну)
см. аттач
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / экспорт (как объединить 3 процедуры из статьи Юрия Шермана в одну) / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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