Программирование >>  Проектирование интерфейса пользователя 

1 ... 29 30 31 [ 32 ] 33 34 35 ... 153


27: Field.Value = Temp

28: End If

29: Next

31: If (Temp = Q ) Then

32: Exit Do

33: Else

34: RecordSet.Update

35: End If

36: Loop

37 :

38: Set RecordSet = Nothing 39: Set Catalog = Nothing 40: Connection.Close 41: Set Connection = Nothing 42:End Sub


Если при работе программы листинга 6.4 щелкнуть на кнопке ОК, введенные данные будут сохранены в поле. По щелчку на кнопке Отмена (Cancel) в поле сохранится пустая строка. Для выхода из цикла необходимо нажать клавишу <Q>.

Многое из того, что представлено в тексте листинга 6.4, вы уже видели. Строки 1-12 выполняют операции создания соединения с базой данных и открытия таблицы. Главное в процедуре содержится во внешнем цикле Do While . . . Loop (расположенном в строках 20-36) и внутреннем цикле For . . . Next (строки 22-29).

Инструкция Do While строки 20 открывает бесконечный цикл. Литерал 1 равнозначен логическому значению True, и поэтому подобный цикл, не предусматривающий возможности естественного завершения, должен содержать команду принудительного прерывания. Она существует - это директива Exit Do, размещенная в

строке 32. Внешний цикл, Do While . . . Loop, контролирует операции добавления

новой записи в таблицу и ее обновления после выполнения внутреннего цикла. Внутренний цикл обеспечивает возможность и прохождения по всем полям новой записи (кроме поля ID , заполняемого Access автоматически), и сохранения в них значений, введенных пользователем. В качестве средства ввода исиользуется уже хорошо известная функция InputBox. Temp - это символьная цеременная для хранения результата ввода. С целью обеспечения возможности принудительного выхода из внутреннего и внешнего циклов используются условные выражения If (Temp = Q ) Then Exit, т.е. единственный символ Q , введенный пользователем в диалоговом окне, трактуется программой как сигнал прерывания цикла.,

В конце процедуры расположены команды закрытия набора данных, каталога и

соединения (именно в таком, обратном, порядке), а также освобождения памяти, отведенной под объекты.

Код листинга 6.4 вы сможете использовать при работе с любым набором данных - планируете ли вы осуществлять ввод информации, форматировать значения полей или выполнять вычисления. Операции открытия/закрытия таблиц и циклического прохождения по записям данных относятся к разряду самых употребительных и универсальных.



Динамический поиск информации в таблице

Циклические конструкции могут бтть использованы также для поиска информации в таблице. В пред1дущем разделе в качестве критерия прер1вания цикла применялось условное выражение If (Temp = Q ) Then. Подобная конструкция применима и для решения задач анализа данных.

Посредством внесения незначительных изменений мы превратили процедуру InputData, приведенную выше в тексте листинга 6.4, в новую процедуру, FindData, предназначенную для поиска данных в таблице (листинг 6.5).

Листинг 6.5. Пример процедуры поиска данных в таблице

3 : 4: 5: 6:

Sub FindData ( )

Dim Connection As New ADODB.Connection

Dim Catalog As New ADOX.Catalog

Dim RecordSet As New ADODB.RecordSet

Dim Field As Field Const DatabasePath =

7: c:\Books\Teach Yourself Access 2002

PrograinmingXChapter 6\CONTACTS .mdb

8: 9:

10: Connection.Open Provider=Microsoft.Jet.OLEDB.4.0; & 11: Data Source & DatabasePath

Set = Connection

2: RecordSet.Ope CONTACTS , Catalog.ActiveConnection, adOpenDynamic, adLockOptimistic RecordSet.Fields.Refresh

5: 6: 7 :

Dim Temp As String RecordSet.MoveFirst

Do While (RecordSet.EOF = Raise) 9: Temp = InputEox ( Еведите искомые данные (0=Выход)

Поиск данных ) 10 : If (Temp = Q ) Then Exit Do

11: Dor Rach Rield In RecordSet.Fields

12 : If (Field.Value Dike Temp) Then

13 : MsgBox Найдено: & Field. Value & в RecordSet( ID ).Value

Rxit Dor End If

Next

14 15 16 17 18 19 20

RecordSet.MoveNext

Loop

RecordSet.Close

Set RecordSet = Nothing Set Catalog = Nothing



24: 25 : 26:

Connection.Close

Set Connection = Nothing End Sub

Тексты листингов 6.4 и 6.5 почти идентичны. Наиболее существенные отличия вы заметите в содержимом цикла Do while Loop (см. строки В качест-

ве критерия завершения цикла используется условие достижения последней записи таблицы (служебное слово EOF обозначает конец файла, End Of File). Прежде чем приступить к выполнению цикла, помните, что поиск начнется с первой записи таблицы (см. команду MoveFirst в строке 18). Вновь, как и в прошлый раз, символ играет роль признака завершения цикла. Но если ранее цикл был бесконечен, то теперь выход из него гарантируется, помимо условного выражения If (Temp = Q ) Then Exit Do, еще и обязательным событием достижения последней записи таблицы. В строке 24 значение, введенное пользователем, сопоставляется с содержимым очередного поля текущей записи. Как мы говорили на прошлом занятии, оператор Like позволяет сравнивать символьные значения с заданным образцом

(образец в нашем случае - это содержимое переменной Temp, заполненной пользователем). (Вызов функции InputBox и оператор сравнения Temp с Q следовало бы вынести за пределы цикла Do while . Loop, расположенного в строках 2031, и построить при этом еще один, самый внешний цикл, который предназначается исключительно для ввода очередной строки поиска и сопоставления ее с литералом Q . - Прим. перев.)

Поиск такого рода, конечно, нельзя считать эффективным. Я назвал бы его

слепым . Представьте, что в вашем распоряжении имеется некий фрагмент числа,

состоящий всего из нескольких цифр, причем вы можете не знать, к какого рода информации он относится - наименованию банковского счета, адресу клиента или номеру его телефона. Подобный алгоритм поиска следует считать оправданным только в таких условиях. Но если имеется дополнительная информация о том, к каКИМ столбцам таблицы относятся искомые данные, тогда результат может быть достигнут гораздо быстрее. Основная цель примера, приведенного в листинге 6.5, -

познакомить вас с конструкциями языка и способами обработки информации из базы данных.

Резюме

На этом занятии мы вновь обратились к вопросам использования условных выражений и циклических конструкций, но уже применительно к задачам управления базами данных - а ведь это, собственно говоря, основная область приложения мощи Access VBA. Вы изучили понятия каталога, набора данных, соединения и поля. Каталог содержит ссылки на объекты таблиц, курсоров, учетных записей пользователей и групп пользователей. Набор данных - это обобщенный термин, применяемый для обозначения таблиц, запросов и курсоров. Соединение - объект, позволяющий связать код приложения с физическим файлом базы данных. Наконец, поле - это единый фрагмент данных.

В последующих главах мы более подробно рассмотрим различные объекты, обеспечивающие программный интерфейс к базе данных и ее элементам. А сейчас рекомендуем обратиться к разделу Задания и выполнить предлагаемые упражнения.



1 ... 29 30 31 [ 32 ] 33 34 35 ... 153

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика