Задачи:
· создание текущей схемы базы данных для определения ее текущей структуры;
· сжатие базы данных для экономии места и улучшения производительности;
· восстановление базы данных в случае уничтожения или повреждения
Для схематизации базы данных часто используется следующая конструкция:
For Each объект in коллекция
'отображение свойства объекта
Next объект
Сокращенный вариант сбора информации о базе данных
Sub MapDatabase()
Dim MyDB As Database
Dim MyWs As Workspace
Dim path As String
Dim db As Database, Td As TableDef, fld As Field
Dim Idx As Index, Rel As Relation
Dim i As Integer, n As Integer
Dim ss As String
Dim hFileOut As Long
path = ActiveWorkbook.path
Set db = DBEngine.Workspaces(0).OpenDatabase(path & "\DBProbaRel.mdb")
ss = ""
'Снимаем схему со свойств Database
ss = ss + vbLf + "База данных DATABASE"
ss = ss + vbLf + "Название:" & db.Name
'Снимаем схему с коллекции TableDefs
ss = ss + vbLf + "Таблицы (TABLEDEFS)"
For Each Td In db.TableDefs
ss = ss + vbLf + vbLf + "Название ТАБЛИЦЫ: " + Td.Name
If Td.Updatable = True Then
ss = ss + vbLf + "Обновляемая"
Else
ss = ss + vbLf + "Необновляемая"
End If
'Атрибуты объекта TableDef
ss = ss + vbLf + "Аттрибуты:" + Hex$(Td.Attributes)
If (Td.Attributes And dbSystemObject) <> 0 Then
ss = ss + vbLf + "Системный объект"
End If
'Снимаем схему семейств Fields для каждого объекта TableDef
ss = ss + vbLf + vbLf + "Поля(Fields)"
For Each fld In Td.Fields
ss = ss + vbLf + "Название поля: " + fld.Name
Next fld
'Снимаем схему коллекции Indexes для каждого TableDef
ss = ss + vbLf + vbLf + "Индексы (INDEXES)"
If (Td.Attributes And dbSystemObject) = 0 Then
For Each Idx In Td.Indexes
'Установим переменную Index
ss = ss + vbLf + vbLf + "Название индекса: " + Idx.Name
If Idx.Foreign Then
ss = ss + vbLf + "Foreign индекс"
Else
If Idx.Primary Then
ss = ss + vbLf + "Primary индекс"
End If
End If
'Снимаем схему коллекции Fields объекта Index
For Each fld In Idx.Fields
ss = ss + vbLf + "Название поля индекса: " + fld.Name
Next fld
Next Idx
End If
ss = ss + vbLf + "-----------------------------------"
Next Td
' Снимаем схему Relations
ss = ss + vbLf + vbLf + "Отношения (RELATIONS)"
For Each Rel In db.Relations
ss = ss + vbLf + vbLf + "Название Отношения:" + Rel.Name
'Снимаем схему полей Fields отношения
For Each fld In Rel.Fields
ss = ss + vbLf + "Название поля отношения:" + fld.Name
ss = ss + vbLf + "Внешнее название поля отношения:" + fld.ForeignName
Next fld
Next Rel
db.Close
hFileOut = FreeFile
Open path + "\FileOutX.txt" For Output Access Write As hFileOut
Print #hFileOut, ss
Close hFileOut
End Sub
________________________________________________________________________
"База данных DATABASE"
"Название:", db.Name
"Строка подключения:", db.Connect
"Поддержка транзакций:", db.Transactions
"Обновляемая?:", db.Updatable
"Порядок сортировки:", db.CollatingOrder
"Время ожидания запроса:", db.QueryTimeout
"Таблицы (TABLEDEFS)"
"Название:", Td.Name
"Создана:", Td.DateCreated
"Обновлена:", Td.LastUpdated
Td.Updatable (True, False)
Hex$(Td.Attributes)
Td.Attributes And dbSystemObject (0 или не 0)
Td.Attributes And dbAttachedTable "Присоединенная таблица"
Td.Attributes And dbAttachedODBC "Присоединенная ODBC-таблица"
Td.Attributes And dbAttachExclusive "Присоединенная таблица открыта в монопольном режиме"
"Поля(Fields)"
"Название:", fld.Name
"Тип:", fld.Type
"Размер:", fld.Size
"Биты атрибутов:", Hex$(fld.Attributes)
"Порядок сортировки:", fld.CollatingOrder
"Порядковый номер:", fld.OrdinalPosition
"Поле источника", fld.SourceField
"Таблица источника", fld.SourceTable
"Индексы (INDEXES)"
"Название:", Idx.Name
"Группированный:", Idx.Clustered
"Внешний:", Idx.Foreign
"Игнорировать Null:", Idx.IgnoreNulls
"Первичный:", Idx.Primary
"Неповторяющийся:", Idx.Unique
"Обязательный:", Idx.Required
"Поля(Fields)"
"Название", fld.Name
"Внешнее название", fld.ForeignName
"Отношения (RELATIONS)"
"Название:", Rel.Name
"Атрибуты:", Rel.Attributes
"Таблица:", Rel.Table
"Внешняя таблица:", Rel.ForeignTable
"Поля(Fields)"
"Название:", fld.Name
"Внешнее название:", fld.ForeignName
____________________________________________________________________________