Access 2002. Самоучитель
Шрифт:
cod = 1: answer = 4
Если инструкция на одной строке не помещается, она может быть продолжена на следующей. В таком случае в начале второй строки ставятся символы пробела и подчеркивания.
Выражения приравнивают значения объекта слева от знака равенства значению, полученному из элементов справа.
При указании имен процедур, констант, переменных и аргументов VBA рекомендуется использовать стандартные правила Access:
• первый символ должен быть буквой;
• имя может содержать буквы, цифры и символ подчеркивания, но знаки препинания не допускаются;
• имя может содержать не более 255 знаков;
• не следует использовать одинаковые имена для функций VBA, методов или инструкций;
• не следует использовать одно имя дважды в одной процедуре.
Процедуры SubПроцедура Sub содержит одну или более определенных операций. Можно использовать процедуру Sub для автоматизации повторно выполняемых задач: например, назначить одну из процедур элементу меню, чтобы запускать ее именно оттуда.
Процедуры Sub
[Private|Public] [Static]Sub name [ (arglist) ]
[инструкции]
[Exit Sub]
[инструкции]
End SubЭто синтаксическое определение является стандартным. Жирным шрифтом выделены слова, которые должны вводиться в точном соответствии с примером. Слова, набранные курсивом, – это имена, определяемые пользователем. Слова, стоящие в квадратных скобках, являются необязательными. Ключевые слова, разделенные вертикальной чертой (|), представляют собой взаимоисключающие параметры, поэтому можно использовать лишь одно из двух – либо Private, либо Public. Если в процедуру Sub включается список аргументов (arglist), то он должен быть заключен в скобки, а аргументы – разделены запятыми.
Если в определении указано два или более ключевых слов, разделенных вертикальными чертами и при этом заключенных в фигурные скобки, то одно из них должно быть введено обязательно, иначе будет выбран параметр по умолчанию.
Ключевое слово Sub описывает процедуру по имени. Все инструкции, которые находятся между строками Sub и End Sub, выполняются при запуске процедуры.
Функции Процедура Function генерирует значение и возвращает его в приложение. Возвращаемое значение имеет то же имя, что и функция, и может быть использовано в любом месте выражения. Синтаксис инструкции Function выглядит следующим образом:[Private | Public][Static]Function имя [(arglist)] [As тип]
[инструкции]
[имя = выражение]
[Exit Function]
[инструкции]
[имя = выражение]
End FunctionЗначение, которое возвращает функция, присваивается ее имени. Если функция не присваивает значения, то она возвращает значение по умолчанию: 0 в случае числовой функции, строку нулевой длины в случае строковой функции или Empty в случае функции Variant.
Чтобы использовать значение, возвращаемое функцией, надо поместить ее имя справа от знака равенства в другой процедуре.
Элементы процедурОба типа процедур совместно используют одни и те же элементы синтаксиса, которые поясняются в табл. 12.2.
Список аргументов должен иметь определенную структуру и синтаксис, которые также применимы к обоим типам процедур:[Optional] [ByVal] [ByRef] [ParamArray] varname[ ] [As type] [=defaultvalue]
Таблица 12.2
Элементы списка поясняются в табл. 12.3. Таблица 12.3
Просмотр объектов
Как вы уже знаете, число объектов, с которыми имеет дело проектировщик баз данных Access 2002 и приложений, достаточно велико – здесь не только собственно таблицы, формы и отчеты. К объектам надо отнести еще константы, процедуры, функции и т. п. К тому же, кроме собственной библиотеки Access 2002, есть еще библиотека VBA, библиотека DAO (Data Access Objects – объекты доступа к данным) и др. Поэтому без какой-то систематизации этого множества объектов обойтись довольно трудно.
Access 2002 предоставляет пользователю инструмент такой систематизации – Просмотр объектов. Окно просмотра объектов вызывается щелчком по кнопке
расположенной на панели инструментов. Но эта кнопка доступна лишь из окна программы (см. рис. 12.1 или 12.2).
Окно просмотра объектов, показанное на рис. 12.3, встраивается в правую область окна модуля. Его допускается переместить, чтобы оно не мешало обзору программы. В левом верхнем поле этого окна стрелкой прокрутки вы можете выбрать нужную вам библиотеку объектов – библиотеку VBA, DAO, Access 2002, собственную библиотеку базы данных, в которой вы работаете, или вообще все библиотеки. (На рис. 12.3 показано, что установлено отображение объектов из библиотеки VBA.) Далее на вкладке Классы вам надо выбрать интересующий вас класс объектов (на рисунке это Дата и время). Тогда в правом поле откроется список Члены класса Дата и время, где вы можете выбрать нужную функцию, свойство, константу и др. Для выбранного объекта (например, на рисунке справа выбрана функция DateSerial) в нижней части окна показан соответствующий ему синтаксис и повторены (другим цветом) название библиотеки и имя класса. Если вы щелкнете по выделенному цветом имени библиотеки, то оно сменится ее адресом (путем). Выбранный объект можно перенести непосредственно в текст программы: скопировать его имя в буфер и оттуда вставить в нужное место текста. Однако помните, что при этой операции переносится только имя объекта без аргументов – их придется вводить вручную.
Управление выполнением программы
Наряду с рассмотренными выше элементами важным компонентом VBA являются элементы управления выполнением программы. Кроме операторов, которые вызывают подпрограммы или функции, таких основных элементов четыре:
• выход из программы или временная остановка ее выполнения;
• переход к другой части программы;
• организация циклов;
• выбор действий, которые должны производиться дальше.
В табл. 12.4 указаны ключевые операторы, которые позволяют управлять выполнением программы. Все они имеют определенный стандартный синтаксис. Вот несколько примеров.
1. Синтаксис инструкции On… GoSub:On expression GoSub
Здесь expression – целое или округленное до целого число в диапазоне от 0 до 255, а destinationlist – список номеров строк или меток. Каждая из них соответствует значению, принимаемому выражением. 2. Синтаксис инструкции Do… Loop:
Do [(While|Until) condition]
[инструкции1]
[Exit Do]
[инструкции2]
LoopЗдесь condition – условие цикла; инструкции1 – операторы, которые многократно выполняются до тех пор, пока истинно условие цикла; инструкций – операторы, выполняющиеся, если условие цикла ложно. 3. Синтаксис инструкции If.Then.Else:
If [условия]
Then [условные операторы]
[Else операторы else]
End IfДля выполнения этой инструкции необходимо наличие хотя бы одного условия. Если условия истинны, выполняются условные операторы; в противном случае – операторы else. Инструкция должна заканчиваться строкой End If. Таблица 12.4
Программирование приложений с помощью VBA
Что может делать пользователь с помощью VBA? Ответ очень прост: все. К сожалению, ни в одной книге нельзя рассмотреть все вероятные сферы программирования, в которых вы найдете применение возможностям VBA. Поэтому ограничимся тем, что нас непосредственно интересует, – созданием БД.
Когда мы формируем новую базу данных, то хотим сделать ее удобной для пользователей. Однако у каждого из них свои взгляды на эти удобства, и нередко сервис базы данных приходится дорабатывать. Примеры, которыми мы будем иллюстрировать использование VBA, взяты именно из этой области.
Практическая логика подсказывает: если какую-то задачу можно решить штатными средствами Access 2002 (стандартные запросы, макросы), то так и следует поступить. Обращение к VBA оправдано тогда, когда средства, заложенные в Access, либо не позволяют добиться нужного результата, либо предлагают сложное и громоздкое решение.
Предупреждение дублирования записей при вводе их из формы
В главе 11 мы обсуждали вопрос об очистке базы данных от повторяющихся записей, которые попали в таблицы, и выяснили, что этот механизм может работать и в профилактическом режиме, предотвращая попадание дубликатов при вводе записей.
А теперь покажем, как решить ту же задачу средствами VBA.
Сначала решим, как будет запускаться создаваемая нами программа. Очевидно, что проверка на наличие дубликатов должна проводиться не только для определенного поля, но и для комбинации полей. Естественно, тестирование начинается с того момента, когда в проверяемое поле вводится какая-либо информация, иначе просто нечего тестировать. Следовательно, надо «привязать» создаваемую программу к какому-либо свойству проверяемого поля. Например, возьмем поле Название фирмы. Откройте окно его свойств, где есть несколько подходящих для нашей цели параметров: После обновления, Нажать клавишу, Изменение, Потеря фокуса и др. Выберите свойство Потеря фокуса и щелкните по строке, которая ему соответствует. Теперь активизируйте кнопку
Откроется окно Построитель. В нем вы можете выбрать один из трех вариантов обработки свойства (см. рис. 12.4):
• построитель выражений;
• построитель макросов;
• построитель программ.
Рис. 12.4
О построителе выражений мы поговорим несколько позже; построитель макросов – это конструктор, уже рассмотренный в предыдущей главе. Наконец, построитель программ открывает окно модуля, которое было выведено на рис. 12.2, хотя и содержало другую информацию. Чтобы начать создание процедуры, выберите именно эту третью опцию. Тогда в окне свойств поля Название_фирмы_ установится режим Процедура обработки событий, как показано на рис. 12.5, и откроется окно модуля (см. рис. 12.6). Оно примечательно следующим.