|
Программирование >> Проектирование интерфейса пользователя
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. Вы изучили понятия каталога, набора данных, соединения и поля. Каталог содержит ссылки на объекты таблиц, курсоров, учетных записей пользователей и групп пользователей. Набор данных - это обобщенный термин, применяемый для обозначения таблиц, запросов и курсоров. Соединение - объект, позволяющий связать код приложения с физическим файлом базы данных. Наконец, поле - это единый фрагмент данных. В последующих главах мы более подробно рассмотрим различные объекты, обеспечивающие программный интерфейс к базе данных и ее элементам. А сейчас рекомендуем обратиться к разделу Задания и выполнить предлагаемые упражнения.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |