Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Met_BD_DAO.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
753.15 Кб
Скачать

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. Большая часть кода приложения обрабатывает потенциальные ошибки.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]