Кузин А.В., Левонисова С.В. Базы данных (5-е издание, 2012) (1084448), страница 25
Текст из файла (страница 25)
При выполнении оператора проверяется, соответствует ли хотя бы один из элементов этого списка проверяемому выражению. Элементы списка выражений могут иметь однуиз следующих форм:<выражение>в этом случае проверяется, совпадает ли значение проверяемоговыражения с этим выражением;<выражение1> То <выражение2>в этом случае проверяется, находится ли значение проверяемоговыражения в указанном диапазоне значений;Is <логическийОператор> <выражение>в этом случае проверяемое выражение сравнивается с указаннымзначением с помощью заданного логического оператора (например, условие Is > = 10 считается выполненным, если проверяемоезначение не меньше 10).Если хотя бы один из элементов списка соответствует проверяемому выражению, то выполняется соответствующая группаоператоров и на этом выполнение оператора Select Case заканчивается, а остальные списки выражений не проверяются, т.е. в этом128случае отыскивается только первый подходящий элемент списковвыражений.
Если же ни один из элементов всех этих списков несоответствует значению проверяемого выражения, то выполняются операторы группы Else (если таковая присутствует).Циклы. В VBA имеется богатый выбор средств организации циклов, которые можно разделить на две основные группы: циклы сусловием Do...Loop и циклы с перечислением For...Next.Циклы типа D o...Loop используются в тех случаях, когда заранее не известно, сколько раз должно повториться выполнениеблока операторов, составляющего тело цикла.
Такой цикл продолжает свою работу до тех пор, пока не будет выполнено определенное условие. Существуют четыре вида циклов Do...Loop, которые различаются типом проверяемого условия и временем выполнения этой проверки. Синтаксисы этих четырех конструкцийприведены в табл.
3.4.Т а б л и ц а 3.4Синтаксисы управляющих конструкцийСинтаксис конструкцииDo While <условие><блокОператоров>LoopОписаниеУсловие проверяется до выполнения группы операторов, образующих тело цикла. Цикл продолжает свою работу, пока это условие выполняется(т. е. имеет значение True), иными словами, вэтой конструкции указывается условие продолжения работы циклаDo <блокОператоров> Условие проверяется после выполнения хотя быLoop Whileодин раз операторов, составляющих тело цикла.<условие>Цикл продолжает свою работу, пока это условиеостается истинным, иными словами, в этой конструкции указывается условие продолжения работы циклаDo Until <условие><блокОп ераторов>LoopУсловие проверяется до выполнения группы операторов, образующих тело цикла.
Цикл продолжает свою работу, если это условие еще не выполнено, и прекращает работу, когда оно станет истинным, иными словами, в этой конструкцииуказывается условие прекращения работы циклаDo <блокОператоров> Условие проверяется после выполнения хотя быLoop Untilодин раз операторов, составляющих тело цикла.<условие>Цикл продолжает свою работу, если это условиееще не выполнено, а когда оно станет истинным,цикл прекращает работу, иными словами, в этойконструкции указывается условие прекращенияработы цикла129В VBA имеется также два вида операторов цикла с перечислением F or...Next. Очень часто при обработке массивов, а также в техслучаях, когда требуется повторить выполнение некоторой группыоператоров заданное число раз, используется цикл For...Next сосчетчиком. В отличие от циклов D o ... Loop данный цикл использует специальную переменную, называемую счетчиком, значение которой увеличивается или уменьшается при каждом выполнении телацикла на заданную величину.
Когда значение этой переменной достигает заданного значения, выполнение цикла заканчивается.Синтаксис такого цикла имеет следующий вид (в квадратныескобки заключены необязательные элементы синтаксической конструкции):For <счетчик> = <начальноеЗначение>Значение>[Step <приращение>]<блокОператоров>Next [<счетчик>]То <конечноеРассмотрим еще один вид цикла For...Next, часто используемый в VBA при обработке объектов, составляющих массив илисемейство однородных объектов. В цикле For Each...N ext счетчикотсутствует, а тело цикла выполняется для каждого элемента массива или семейства объектов.
Синтаксис такого цикла имеет следующий вид:For Each <элемент> In <совокупность><блокОператоров>Next [<элемент>]Здесь <элемент> — это переменная, используемая для ссылкина элементы семейства объектов; <совокупность> — это имя массива или семейства.Пример 3.6. Выдача на печать списка всех полей для всех таблиц текущей открытой базы данных:Public Sub EnumerateAllFields()Dim MyBase As DatabaseDim t As TableDef, f As FieldSet MyBase = DBEngine.Workspaces(0).Databases(0)For Each t In MyBase.TableDefsDebug.Print "Таблица: " & t.NameFor Each f In t.FieldsDebug.Print "Поле: " & f.NameNext fNext tSet MyBase =NothingEnd Sub130В операторах Dim переменная MyBase объявлена как объект «Базаданных DAO», а переменные t и f — как определение таблицы и полетаблицы соответственно.
Оператор Set назначает переменной MyBase текущую открытую базу данных. Далее для каждого определения выполняется вывод на печать названия таблицы, а затем вложенный цикл такогоже типа печатает названия всех ее полей.Пример 3.7. Имеется трехмерный числовой массив из 1000 элементов(размером 10x10x10), который следует заполнить случайными вещественными числами в диапазоне от 0 до 1. Если использовать обычныециклы For... Next со счетчиками (применяя счетчики в качестве индексов элементов массива), то для решения этой задачи потребуется написать три вложенных цикла For...
Next:Dim tArray(9, 9, 9) As SingleDim i%, j%, k%RandomizeFor i=0 To 9For j=0 To 9For k=0 To 9tArray(i, j, k) = Rnd()Next kNext jNext iОднако если вместо циклов со счетчиками воспользоваться цикломFor Each ... Next, для решения задачи достаточно записать всего один цикл:Dim tArray(9, 9, 9) As SingleDim elem As VariantRandomizeFor Each elem In tArrayelem = Rnd()NextВыход из циклов и процедур. Обычно выполнение процедурызаканчивается после выполнения ее последнего оператора, а выполнение цикла — после нескольких выполнений тела цикла, когдадостигнуто условие завершения его работы.
Однако в некоторыхслучаях бывает нужно прекратить выполнение процедуры илицикла досрочно, избежав выполнения лишних операторов процедуры или лишних повторений цикла.Например, если при выполнении процедуры произошла ошибка, которая делает продолжение ее работы бессмысленным, можно выполнить команду немедленного выхода из процедуры.Другой пример: если цикл For... Next используется для поисканужного значения в массиве, то после того как нужный элемент131найден, нет смысла продолжать дальнейший перебор элементовмассива.Досрочный выход из управляющей конструкции можно осуществить с помощью одного из операторов Exit. Для досрочноговыхода из циклов D o...Loop используется оператор Exit Do, адля выхода из циклов For — оператор Exit For.
Для досрочноговыхода из процедур и функций используются соответственно операторы Exit Sub и Exit Function.3.2.8. Работа с формами, отчетами, запросами,таблицамиПрограммирование в формах и отчетах, как правило, составляет большую часть кода приложения, так как именно формы иотчеты являются основой интерфейса пользователя, и с помощью программирования этот интерфейс гибко настраивается нужным образом. Основой для программирования в формах и отчетахявляется множество событий, которые обрабатываются процедурами обработки этих событий.Помимо процедур обработки событий программирование может использоваться для динамического (т.
е. в процессе работыприложения) изменения свойств форм, отчетов и элементов управления.Обычно события инициируются действиями пользователя. В зависимости от этих действий их можно подразделить на несколькотипов: события данных, события фокуса, события клавиатуры,события мыши, события печати, события фильтра, события окна,события ошибок и события таймера.Перечень основных событий Microsoft Access приведен в Приложении 1.Для работы с формами, отчетами, запросами и таблицамиможно использовать объект AccessObject, который представляетсобой конкретный объект MS Access, содержащийся в одной изколлекций, представленных в табл.
3.5.Свойство IsLoaded показывает, является ли загруженным в данный момент объект AccessObject. Оно может принимать одно издвух значений: True (объект загружен) или False (объект не загружен). Значение этого свойства доступно только для чтения.Свойство Name задает строковое выражение, которое представляет собой имя объекта AccessObject, элемента управленияили объекта Reference. Для таких объектов MS Access, как таблицы, запросы, формы, число символов в имени не должно превышать 64.
Для элементов управления длина имени может составлять255 символов.С войство P ro p erties возвращ ает ссы лку н а коллекци юAccessObject Properties объектов AccessObject, CurrentProject или132CodeProject. Эта коллекция содержит все свойства перечисленныхобъектов.Свойство Туре объекта AccessObject возвращает тип объектаNTS Access. Константы данного свойства приведены в табл. 3.6.Т а б л и ц а 3.5Коллекции, содержащие объект AccessObject соответствующего типаК оллекцияТип объектаОбъект MS AccessAll FormsFormФормыAll ReportsReportОтчетыAllMacrosMacroМакросыAllModulesModuleМодулиAllDataAccessPagesData access pageСтраницы доступа к даннымAllTablesTableТаблицыAllQueriesQueryЗапросыAllViewsViewПредставленияAllStoredProceduresStored procedureХранимые процедурыAllDatabaseDiagrams Database diagram Схемы данныхТ а б л и ц а 3.6Константы, определяющие тип объекта AccessObjectКонстантаОписаниеacDataAccessPageСтраница доступа к даннымacFormФормаacMacroМакросacModuleМодульacQueryЗапросacReportОтчетacServerViewПредставлениеacStoredProcedureХранимая процедураacTableТаблица133Работа с формамиВ структуре объектов MS Access присутствуют объекты Form иControl, которые позволяют работать соответственно с формамии элементами управления (рис.