
- •Введение
- •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
Option Compare Text,
а для сравнения с учетом регистра – оператор
Option Compare Binary.
Эти операторы следует помещать в объявлениях форм или модулей.
Демонстрация поиска записей в БД приведена в приложении FindDemo (рис.3.). Первый элемент управления ComboBox (как это показано на рис. 3) позволяет выбрать таблицу, а второй элемент ComboBox - поле. Затем в текстовом поле Search For можно ввести критерии для операции поиска и нажимая кнопки, найти записи, удовлетворяющие заданным критериям.
Форма приложения FindDemo содержит связанный с данными элемент управления Grid и невидимый элемент управления Data. Элемент управления Grid рассматривается ниже. Он связан с элементом Data и отображает содержимое RecordSet в табличном виде. Можно определить дополнительные поля в критерии поиска (помимо выбранного в ComboBox). Любые строковые константы в поле Search For должны быть заключены в одинарные кавычки. В качестве альтернативы можно написать процедуру, которая заменяет двойные кавычки в строке одинарными. Если установить указатель мыши на разделительной линии между двумя столбцами элемента управления GRID, то он превращается в двойную стрелку, указывая, что можно изменять размеры столбца. Для удаления столбцов с ненужными данными достаточно установить ширину, равной нулю.
Рис.3. Приложение FindDemo
Код приложения FindDemo (Поиск записей в RecordSet)
Option Explicit
Dim DB As Database
Private Sub Form_Load()
Set DB = OpenDatabase(Data1.DatabaseName)
Dim tbl As TableDef
cmbTables.Clear : cmbFields.Clear
For Each tbl In DB.TableDefs
If Left(tbl.Name, 4) <> "MSys" Then cmbTables.AddItem tbl.Name
Next
Dim fld As Field
For Each fld In DB.TableDefs(0).Fields
cmbFields.AddItem fld.Name
Next
cmbTables.ListIndex = 0
cmbFields.ListIndex = 0
End Sub
Private Sub cmbTables_Click()
Dim fld As Field
Dim col As Column
cmbFields.Clear
Do While DBGrid1.Columns.Count > 0
DBGrid1.Columns.Remove 0
Loop
Dim i
i = 0
For Each fld In DB.TableDefs(cmbTables.Text).Fields
cmbFields.AddItem fld.Name
Set col = DBGrid1.Columns.Add(i)
col.Caption = fld.Name
col.DataField = fld.Name
col.Visible = True
i = i + 1
Next
cmbFields.ListIndex = 0
Data1.RecordSource = cmbTables.Text
Data1.Refresh
End Sub
Private Sub Command1_Click()
On Error GoTo SQLError
Data1.Recordset.FindFirst GenerateSQL()
If Data1.Recordset.NoMatch Then
MsgBox "Запись не найдена"
End If
Exit Sub
SQLError:
MsgBox Err.Description
End Sub
Private Sub Command2_Click()
On Error GoTo SQLError
Data1.Recordset.FindPrevious GenerateSQL()
If Data1.Recordset.NoMatch Then
MsgBox "Запись не найдена"
End If
Exit Sub
SQLError:
MsgBox Err.Description
End Sub
Private Sub Command3_Click()
On Error GoTo SQLError
Data1.Recordset.FindNext GenerateSQL()
If Data1.Recordset.NoMatch Then
MsgBox "Запись не найдена"
End If
Exit Sub
SQLError:
MsgBox Err.Description
End Sub
Private Sub Command4_Click()
On Error GoTo SQLError
Data1.Recordset.FindLast GenerateSQL()
If Data1.Recordset.NoMatch Then
MsgBox "Запись не найдена"
End If
Exit Sub
SQLError:
MsgBox Err.Description
End Sub
Private Function GenerateSQL() As String
GenerateSQL = "[" & cmbFields.Text & "]" & " " & txtSearchValue.Text
MsgBox GenerateSQL
End Function
В процедуре Form_Load() обеспечивается заполнение обоих элементов управления ComboBox. Первый ComboBox заполняется именами таблиц в БД, второй – именами полей в выбранной таблице. Здесь используются объекты DataBase и TableDef, объектная переменная Field, cемейство Fields и его обработка с помощью цикла For Each….Next. Их подробное описание приведено ниже в параграфе "Доступ к полям в объектах RecordSet". В процедуре cmbTables() формируются объекты Column, формирующих столбцы (значения полей таблицы) элемента управления GRID. Коды четырех кнопок поиска идентичны, в них реализуются различные методы поиска. Функция GenerateSQL() генерирует параметр поиска для всех операций Find. Значение, возвращаемое функцией GenerateSQL(), используется совместно методами Find. После вызова метода FindFirst программа проверяет свойство NoMatch. Если оно равно True, то программа выводит сообщение. Если запись, соответствующая критерию, найдена, то элемент управления Data автоматически устанавливается на эту запись. Функция GenerateSQL() извлекает строку из текстового поля txtsearchValue, присоеденяет ее к выбранному полю и возвращает строку, использующуюся как параметр метода Find. Большая часть кода приложения обрабатывает потенциальные ошибки.