|
|
|
экспорт (как объединить 3 процедуры из статьи Юрия Шермана в одну)
|
|||
|---|---|---|---|
|
#18+
Всем привет. Думаю, многие знают статью "О мусоре в модулях 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 процедуры в одну. Цель - запустил макрос, и можно идти курить, машина всё сама сделает за тебя. Заранее благодарствую. Вячеслав зы. не думаю, что изобрёл велосипед, но эффект сжатия довольно сильный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2004, 10:52:08 |
|
||
|
экспорт (как объединить 3 процедуры из статьи Юрия Шермана в одну)
|
|||
|---|---|---|---|
|
#18+
Пардон, что снова поднимаю топик, но вот решил свою небольшую проблему, и процедура стала корректно работать. Повторюсь, предназначена она для экспорта всей базы в новый файл. Результат - файл не содержит в себе временных объектов, скомпилирован и сжат до минимально возможных размеров. Когда разрабатываешь/вносишь изменения в базу, то нередко она "пухнет" до тех пор, пока не упадет. Для меня спасением явилась эта моя программа. Может, кому-нибудь и пригодится. Работает с единственным замечанием: заточена именно под ХР. Правда, на других версиях не пробовал, но часть кода, где идёт установка свойств нового файла (SetOption), к Access'у 97 однозначно не применима (хотя, если выкинуть отсутствующие в нём свойства, то, думаю, прокатит). Может, кому-нибудь и пригодится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2004, 00:39:28 |
|
||
|
|

start [/forum/topic.php?fid=45&tid=1670229]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
28ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 320ms |

| 0 / 0 |
