Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VBA For Excel Часть 02.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
1.08 Mб
Скачать

Методы поиска объекта Recordset

Возможен поиск внутри таблицы или запроса базы данных. Можно установить режим поиска в текстовых полях с учетом и без учета регистра одним из следующих операторов:

Option compare textпоиск без учета регистра

Option compare Binary - поиск с учетом регистра

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

r.Index = “Имя индексируемого поля”

r.seek “Отношение”, “Ключ Поиска”

где

r – имя объекта типа Recordset

Indexсвойство для задания имени поля в котором будет осуществлен поиск

“Имя индексируемого поля” – имя соответствующего поля

seek метод поиска

“Отношение” – знак отношения в строковом формате значения поля и ключа:

“=” – Равно

“<>” – Неравно

“>” – Больше

“<” – Меньше

“>=” – Больше либо равно

“<=” – Меньше либо раво

“Ключ Поиска” – значение с которым сравнивается значение поля в каждой записи таблицы

Метод seek может работать только с индексированным полем. Для того, что бы сделать поле таблицы индексированным необходимо в Access в режиме конструктора таблицы выбрать строку соответствующего поля и в разделе Общие задать Индексированное Поле. Метод seek ищет только первую запись в таблице, которая удовлетворяет условию.

Другим методом поиска являются методы, которые в основном применимы для просмотра запросов:

FindFirst / FindLast / FindNext / FindPrevious “Условие

где

FindFirst / FindLast / FindNext / FindPrevious - один из методов поиска Найти первую / Найти последнюю / Найти следующую / Найти предыдущу.

“Условие - условие в текстовом формате составленная по следующему принципу:

[Имя поля] Отношение Условие

Как видно имена полей берутся в квадратные скобки, об “Отношение” смотрите выше по тексту в описании метода seek. Если поле текстовое, то условие берется в двойные кавычки ( “ ) или в апострофы ( ‘ ). Допускается использование в условие логических функций (Not, And, Or ) и скобок.

После применения методов поиска используют логическое свойство NoMatch объекта типа Recordset, которое имеет значение True – если запись не найдена, и False – в противном случаи.

Пример использования метода Seek

Возьмите за основу форму, которую мы описали в разделе данной главы книги Форма для интерактивной работы с записью таблицы базы данных. Весь программный код той формы нужно будет использовать, мы в данном параграфе укажем только дополнительный программный код, предназначенный для работы новых элементов управления. Как видно из рис. 29 на форму добавлена рамка с подписью Frame1, на которой расположены необходимые элементы управления для поиска:

Рис. 29 Форма для поиска записи по условию

Следующий программный код обеспечивает работу новых элементов управления:

Private Sub ComboBox1_MouseDown(ByVal Button As Integer, _

ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

If ComboBox1.ListCount = 0 Then

Dim i As Long

ComboBox1.Clear

For i = 0 To r.Fields.Count - 1

On Error Resume Next

'проверяем индексированоли поле

r.Index = r.Fields(i).Name

'Ошибок нет, поле индексированое

If Err.Number = 0 Then

ComboBox1.AddItem r.Fields(i).Name

End If

Next i

End If

End Sub

Private Sub ComboBox1_MouseUp(ByVal Button As Integer, _

ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

If ComboBox1.ListCount = 0 Then

MsgBox "В таблице нет индексированных полей, поиск невозможен!"

Frame1.Visible = False

Me.Width = Me.Width - Frame1.Width

End If

End Sub

Private Sub ComboBox2_MouseDown(ByVal Button As Integer, _

ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

If ComboBox2.ListCount = 0 Then

ComboBox2.Clear

ComboBox2.AddItem "= Равно"

ComboBox2.AddItem "<> Неравно"

ComboBox2.AddItem "> Больше"

ComboBox2.AddItem "< Меньше"

ComboBox2.AddItem ">= Больше либо равно"

ComboBox2.AddItem "<= Меньше либо равно"

End If

End Sub

Private Function Поиск() As Boolean

If ComboBox1.ListIndex >= 0 Then

Dim s As String

r.Index = ComboBox1.Text

s = "="

If ComboBox2.ListIndex < 0 Then

ComboBox2.Text = "= Равно"

Else

s = Trim(Mid(ComboBox2.List(ComboBox2.ListIndex), 1, 2))

End If

Err.Clear

On Error Resume Next

r.Seek s, Search1.Text

If Err.Number <> 0 Then

Поиск = False

MsgBox "Введен неверный тип данных для выбранного поля!"

ElseIf r.NoMatch Then

Поиск = False

MsgBox "Не найдено!"

Else

Поиск = True

End If

Else

Поиск = False

MsgBox "Сначало надо выбрать имя поля для поиска"

End If

End Function

'Поиск

Private Sub CommandButton3_Click()

If Поиск = True Then

LabelRecord.Caption = "Найдена запись без ее порядкового номера"

'запрещаем обновление данных в указателях

flag = True

'Обновляем поля ввода из текущей записи

ОбновитьПолеВвода TextBox1, 0

ОбновитьПолеВвода TextBox2, 1

ОбновитьПолеВвода CheckBox1, 2

'разрешаем обновление данных в указателях

flag = False

Else

ScrollBar1_Change

End If

End Sub

'Поиск (и поиск № записи)

Private Sub CommandButton4_Click()

If Поиск = True Then

Dim i As Long

'поиск номера записи

i = -1

While Not r.BOF

r.MovePrevious

i = i + 1

Wend

ScrollBar1.Value = i

ScrollBar1_Change

End If

End Sub

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