
- •Введение
- •1. Базы данных и системы
- •1.1. Наборы записей RecordSet
- •1.2 Элементы управления Data
- •1.3.Свойства элемента управления Data
- •1.4. Методы элемента управления Data
- •Option Compare Text,
- •Option Compare Binary.
- •1.5. Реляционные связи
- •1.5.1. Первичный ключ
- •1.5.2. Внешний ключ
- •1.5.3 Индексы
- •2. Структура базы данных biblio
- •3. Проверка корректности данных
- •3.1 Событие Validate
- •3.2. Событие Error
- •4. Ввод данных
- •5. Доступ к полям в объектах recordset
- •6. Введение в sql
- •Select (список полей) from (список таблиц) [where (выражение)]
- •11. Пример использования внутреннего объединения.
- •6.2. Использование sql-операторов
- •7. Усовершенствованные элементы управления, связанные с данными
- •7.1. Связанный с данными элемент управления List
- •7.3. Связанный с данными элемент управления Grid
- •8. Отображение баз данных
- •8.1 Объект Database
- •8.2 Объект TableDef: определение таблиц
- •8.2.1 Идексы таблицы
- •8.2.2 Поля таблицы
- •8.3 Объект QueryDef: определение запросов
- •8.4. Описание проекта dbStructure
8.4. Описание проекта dbStructure
Приложение DBStruct (см. рис. 17) позволяет открыть любую БД и про смотреть имена ее таблиц, их структуру, запросы, сохраненные в БД, и их определения. Таблицы и запросы БД отображаются в двух списках слева. Под именем каждой таблицы находятся названия ее индексов. Щелкните на имени таблицы, чтобы отобразить ее поля, или на имени запроса, чтобы отобразить его определение.
Рис.17. Приложение DatabaseStructure
Код приложения DatabaseStructure
Option Explicit
Dim DB As Database
Private Sub Command1_Click()
On Error GoTo NoDatabase
CommonDialog1.CancelError = True
CommonDialog1.Filter = "Databases|*.mdb"
CommonDialog1.ShowOpen
If CommonDialog1.FileName <> "" Then
Set DB = OpenDatabase(CommonDialog1.FileName)
Label1.Caption = CommonDialog1.FileName
End If
FldList.Clear
TblList.Clear
Dim tbl As TableDef
Dim idx As Index
Dim TName As String
Debug.Print "К-во таблиц в БД” & DB.TableDefs.Count
For Each tbl In DB.TableDefs
If Left(tbl.Name, 4) <> "MSys" And Left(tbl.Name, 4) <> "USys" Then
TblList.AddItem tbl.Name
For Each idx In tbl.Indexes
TblList.AddItem " " & idx.Name
Next
End If
Next
Dim qry As QueryDef
Debug.Print "К-во запросов в БД " & DB.QueryDefs.Count
For Each qry In DB.QueryDefs
QryList.AddItem qry.Name
Next
NoDatabase:
MsgBoxErr.Description
End Sub
Private Sub TblList_Click()
Dim fld As Field
Dim idx As Index
If Left(TblList.Text, 2) = " " Then Exit Sub
FldList.Clear
For Each fld In DB.TableDefs(TblList.Text).Fields
FldList.AddItem fld.Name
Next
End Sub
Private Sub QryList_Click()
Dim qry As QueryDef
txtSQL.Text = DB.QueryDefs(QryList.ListIndex).SQL
End Sub
Рассмотрим основные части этой программы. Определенная пользователем БД открыта и назначена объектной переменной DR. Далее производится просмотр элементов объекта TableDefs и добавление имени каждой таблицы к списку Tables. Наряду с таблицами, задаваемыми при разработке БД, Access содержит несколько системных таблиц. Имена системных таблиц начинаются префиксов MSys и USys. Игнорирование этих таблиц выполняется с помощью фрагмента:
If Left(tbl.Name,4) <> "MSys" And Left(tbl.Name,4)<> "USys" Then
………………………………………………………………………………
После отображения имени текущей таблицы программа просматривает индексы таблицы с помощью ее объекта Indexes. После имен всех таблиц и индексов отображаются названия всех запросов, сохраненных в БД.
Если щелкнуть кнопкой мыши на имени таблицы в списке Tables, то ее поля oтoбразятся в списке Selected Tables Fields (Выбранные поля таблицы). Аналогично, после щелчка на имени запроса в текстовом поле Selected Query Definition (Определение выбранного запроса) появится его определение (SQL-оператор).
Если щелкнуть кнопкой мыши на элементе, который начинается с двух пробелов (это имя индекса), программа отреагирует. Если элемент не начинается с двух пробелов, то программа очищает элемент управления ListBox, в котором отображаются имена полей, и список заполняется этими именами. Чтобы обратится к ним, программа просматривает элементы семейства DB.TableDefs (TblList.Text).Fields. В каждой итерации к списку добавляется имя очередного поля (fld. Name). Можно отобразить тип поля с помощью свойства Type, а его размер (в байтах)- с помощью свойства Size.
К объектам TableDefs обращение осуществляется по имени таблицы, а к объектам QueryDefs - по имени сохраненного запроса. К ним можно обратиться и с помощью индекса, но так как системные таблицы были опущены, то порядок таблиц в списке Tables не последовательное.