Эксплуатация базы данных

Задачи:

· создание текущей схемы базы данных для определения ее текущей структуры;

· сжатие базы данных для экономии места и улучшения производительности;

· восстановление базы данных в случае уничтожения или повреждения

Для схематизации базы данных часто используется следующая конструкция:

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

____________________________________________________________________________


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: