Файл: Освой самостоятельно программирование для MS Access 2002 за 24 часа [П.Киммел].pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 21.10.2020

Просмотров: 7933

Скачиваний: 25

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Функция

 возвращает строку символов, введенных пользователем в поле ре-

дактирования (оно расположено в нижней части диалогового окна — см. рис. 5.1). Внеш-

няя функция выражения в строке 8 листинга (Val) выполняется после завершения работы
функции InputBox. (Если необходимо уточнить детали, обратитесь к справочной системе
Access.) Val осуществляет преобразование строки символов, возвращенной функцией In-
putBox, в число двойной точности. Поскольку результат работы InputBox — это строка, а
в объявлении переменной Taxablelncome указан тип Double, Val — это как раз тот ин-
струмент, который нам нужен. В строках с 10-й по 12-ю содержится выражение

 в ко-

тором полученная числовая величина дохода сопоставляется с константой-границей, и в

случае превышения последней на экран выводится окно сообщения.

В строках

 объявляется новый набор именованных констант, две из которых

будут использованы в качестве аргументов в вызове функции InputBox, содержащей-
ся в строке 19, а третья — далее. В строках 17 и 18 объявляется и инициализируется

символьная переменная

 Строки 20-22 содержат выражение If — в нем

значение переменной UserName, которое редактируется пользователем в диалоговом
окне, вызванном функцией InputBox (см. строку 19), сопоставляется с литеральной
константой "Admin". В случае совпадения открывается окно сообщения.

Итак, с помощью конструкции

 допускается анализировать и числовые величины,

и строки. Помните, что при использовании конструкции

 программа должна реагиро-

вать как на положительный результат сравнения True, так и на отрицательный False.

Расширение выражения If с помощью Else

Служебное слово Else используется с целью разбить выражение If на два блока

кода. Строки кода верхнего блока If выполняются, если результат сравнения равен
True, а нижнего — в противном случае. Далее приводится синтаксис расширенного
формата конструкции If с использованием слова Else:

 (условное выражение) Then

' одна или несколько строк кода, выполняемых при значе-

нии True условного выражения

s Else

о

 или несколько строк кода, выполняемых при значе-

нии False условного выражения

A End If

Обратите внимание: служебное слово

 занимает отдельную строку и разделяет

выражение I f на две половины. В каждой из них может содержаться любое количест-
во строк кода. Запомните: строки, расположенные над словом Else, выполняются,

если Условное Выражение равно True, а нижний блок выражений — в случае False.

Слово Else использовать необязательно — обращайтесь к нему в тех случаях, когда не-

обходимо отреагировать на оба возможных результата вычисления условного выражения.

Вложенные условные конструкции

Выражение

 допускается размещать внутри другого выражения If, как над слу-

жебным словом Else, так и под ним. Подобные условные конструкции называют
вложенными. Несмотря на то, Что с формальной точки зрения такие трюки вполне
правомерны и на первый взгляд кажутся оправданными, эффективными и даже за-

бавными, на практике применять их не рекомендуется. Листинг 5.2 содержит пример
условной конструкции, построенной на основе нескольких вложенных выражений

90 Часть II. Основы конструирования программ


background image

Листинг 5.2. Пример вложенных выражений If

1:
2:

3:
4:
5:
6:
7:
8:
9:
10:
11:

13:

15:
16:

Sub

 )

Const PROMPT = "Введите имя
Const TITLE = "Имя пользователя"

Dim

 As String

 =

 PROMPT, TITLE, UserName )

If (UserName = "Admin") Then

' одна или несколько строк кода

Else

If (UserName = "ADMIN") Then

' одна или несколько строк кода

Else

If (UserName = "guest") Then

' одна или несколько строк кода

End

 If

End If

End If

End Sub

Строки листинга демонстрируют применение вложенных условных выражений,

анализирующих содержимое переменной UserName. Хотя по существу ничего слож-
ного в этом коде нет, увлекаться им не стоит. А если вас все-таки угораздило напи-

сать что-то подобное, по крайней мере, позаботьтесь о выравнивании соответствую-
щих слов If, Else и End

 по горизонтали. Отметим, что такой стиль программиро-

вания нельзя назвать положительным, поэтому нужно избавляться от него всеми
возможными средствами.

Существует

 конструкция Select Case, более простая и доступная

для понимания. С ее помощью вам удастся избежать нагромождений вложенных вы-
ражений

Будьте аккуратны

Код, приведенный в листинге 5.2, заслуживает внимания, но это, вероятно, про-

стейший пример программ, содержащих вложенные выражения If. Если конструкция
усложняется, она превращается в ребус, недоступный для понимания.

Впрочем, существуют способы программирования, позволяющие уклониться от

необходимости обращения к вложенным условным выражениям. Сделайте первый
шаг — для того, чтобы осознать негативные стороны подобного стиля работы. И еще:
осваивайте практические приемы решения проблемы.

В следующем разделе будет рассказано об использовании выражения на основе

служебного слова Case. Мы также рассмотрим приемы упрощения кода, расположен-
ного внутри условной конструкции — в промежутках между словами If и Else; Else
и End If с помощью вынесения его в отдельные функции. Чтобы детальнее ознако-
миться с функциями, обратитесь к главе 8.

Листинг 5.2 — прекрасная иллюстрация того, как может выглядеть код, упорядо-

ченный с помощью функций. Достаточно только вместо строк комментариев, обозна-
ченных оператором апострофа

 вставить вызовы соответствующих функций.

(Напомним — более подробные сведения о функциях приведены в главе "8-й час. Де-
композиция

 час. Программирование управляющих структур

91


background image

о

Как избавиться от вложенных условных
выражений

ЕСЛИ программа содержит несколько вложенных конструкций If, подумайте о заме-

не их условным выражением Select Case. (Далее для краткости будем называть его вы-

ражением Select либо Case.) Конструкция Select имеет следующий синтаксис.

Select Case значение

Case

 код для

Case условие 2

' код для Case2

Case условие N

' код для CaseN

[Case Else]

' необязательный код для Case Else

 End Select

Конструкция Select начинается со служебных слов Select Case, за которыми сле-

дует наименование переменной любого простого типа данных, например string, inte-

ger или Double. В последней строке содержится словосочетание End Select. Между
первой и последней строками может находиться произвольное число строк вида Case
Значение, где в качестве значения используется именованная или литеральная констан-
та того же типа, что и тестируемая переменная. Каждая такая строка обозначает ситуа-
цию равенства переменной и указанной здесь константы. Далее приводится набор строк
кода, отвечающий конкретному случаю равенства. Частный случай конструкции Select
с единственной строкой Case в точности аналогичен выражению If. После
перечисления всех случаев равенства разрешается включить в выражение необязатель-
ный раздел Case Else (факт ее необязательности отмечен в описании синтаксиса квад-
ратными скобками). Этот раздел — рекомендуем

 всегда

 особо изучать целесообразность

его использования — отвечает тому случаю, когда содержимое переменной не равно ни
одному из значений, явно оговоренных выше посредством выражений Case.

Листинг 5.3 демонстрирует пример упрощения кода, рассмотренного нами ранее

(см. листинг 5.2). Многочисленные выражения If заменены единой доходчивой кон-
струкцией Select.

Листинг 5.3. Пример замены вложенных выражений If конструкцией Select

1:

2 :
3 :
4:

6 :
7 :
8:

9 :
10:
11:

Sub SelectCaseTest ( )

Const PROMPT

 "Введите имя

Const TITLE = "Имя пользователя"

Const

 = "Администратор, добро

Const

 = "Гость, добро

Const

 =

 добро

Const

 = "А вам сюда

Dim

 As String

 = "guest"

UserName = InputBox ( PROMPT, TITLE, UserName )
UserName =

 UserName )

Select Case UserName

92

Часть II. Основы конструирования программ


background image

13: Case "ADMIN"
14: MsgBox
15: Case "GUEST"
16: MsgBox

 Case

18: MsgBox

19: Case Else

20: MsgBox

21: End Select

22: End Sub

Анализ

j В строках с 2-7 объявляются и инициализируются именованные кон-
[

 которые будут использованы далее. Строка 8 содержит объявле-

ние переменной

 типа String, а строка 9 — выражение ее

 значением "guest". Рекомендуется по возможности

инициализировать переменные сразу же после их объявления. Строка 10
содержит вызов функции InputBox, которая открывает диалоговое окно
запроса. В строке

 используется стандартная функция

 служащая

для преобразования символов строки аргумента к верхнему регистру —

это позволит ограничиться сопоставлением значения переменной со
строковыми литералами, набранными в верхнем регистре. В строке 12
берет начало выражение Select Case, которое предназначено для ана-
лиза содержимого переменной UserName. Программа будет последова-
тельно проверять каждое Case-условие равенства до тех пор, пока не
найдет совпадения; в противном случае выполнится код секции Case
Else. Если UserName равна "ADMIN", откроется окно сообщения, ото-
бражающее значение константы

 Если UserName

равна "GUEST", в окне появится приветствие гостю. Если же введенное
пользователем имя не совпадает ни с "ADMIN", ни с "GUEST", ни с

"pkimmel", тогда выполнится код раздела Case Else, т.е. откроется ок-

но, отображающее значение константы BAD_USER (рис. 5.2).

 сода

Рис. 5.2. Пример окна сообщения, вызванного посред-
ством процедуры MsgBox с указанием имен стандарт-

ной пиктограммы предупреждения

Access предоставляет в ваше распоряжение обширную библиотеку стандартных

подпрограмм и функций. Многие из них, включая знакомую вам процедуру MsgBox,
предусматривают возможность задания большого числа дополнительных необязатель-
ных параметров. Если вы внимательно изучите код листинга 5.3, то обратите внима-
ние, что MsgBox дважды вызывается с указанием единственного параметра типа
String, а в строке 18 ей передается уже два параметра. Второй из них — это предо-
пределенная константа vbExclamation, обозначающая одну из многочисленных

стандартных пиктограмм (ее легко заметить в левой части рис. 5.2). Чтобы научиться
пользоваться встроенными процедурами и функциями, необходима практика работы с
материалами оперативной справочной системы Access. Если бы в моем распоряжении
было не менее тысячи страниц книги, я рассказал бы обо всем гораздо подробнее, хо-
тя, вероятно, это лишено особого смысла, поскольку запомнить такой объем инфор-
мации почти невозможно. Нельзя запастись впрок знаниями такого характера — по-
чаще обращайтесь с вопросами к справочной системе Microsoft Office.

5-й час. Программирование управляющих структур

93


background image

Хотите немного покружиться?

Access VBA, как и все другие языки программирования, наделен возмож-

ностями организации циклических вычислений. Одна из конструкций,
позволяющих решить подобную задачу, — While . . . Wend. Она позво-

ляет выполнять одну и ту же последовательность строк кода до тех пор,

пока результат вычисления логического выражения, расположенного по-
сле служебного слова while, остается истинным. Синтаксис управляю-
щей структуры While . . . Wend таков:

While (условное выражение)

' одна или несколько строк кода

 Wend

В первой строке конструкции находится служебное слово While, которое сопрово-

ждается заключенным в круглые скобки логическим выражением, возвращающим ре-
зультат типа Boolean.

Если результат вычисления логического выражения равен False, код, расположенный

внутри конструкции, не будет выполняться вовсе. Повторим — структура вида while
Wend позволяет выполнить одну и ту же

 действий нуль или более раз.

Пример использования While .  Wend приведен ниже, в тексте листинга 5.4.

о

В качестве условного выражения в конструкции While . . . Wend могут

использоваться не только логические выражения, дающие в результате
расчета значения типа Boolean, но и арифметические, которые
возвращают значения Integer. В последнем случае целочисленное
значение 0 будет трактоваться системой как False, а любые целые
числа, не равные 0, — как True. Например, конструкция вида While

(Целочисленная Переменная) вполне работоспособна.

Листинг 5.4. Пример использования управляющей структуры While ... Wend

Sub

 )

Dim User As String

User =

 имя

пользователей

 User )

While (Len( User ) > 0)

 "Добавление пользователя" & User,

User =

 имя

пользователей

 User )

Wend

End Sub

Листинг 5.4 демонстрирует процесс ввода имен пользователей, выполняемый до тех

пор, пока не выбрана кнопка Cancel (Отмена) либо не введено имя нулевой длины.
Строки 1 и 8 задают начало и конец процедуры WhileTest. В строке 2 объявляется пе-
ременная User типа String, предназначенная для хранения текущего имени. В строке 3
вызывается знакомая вам функция InputBox, предоставляющая пользователю програм-
мы возможность ввести первое имя. Строка 4 — начало конструкции цикла while. В
качестве условного выражения выступает оператор сравнения

 User ) > 0. Здесь

используется встроенная функция

 вычисляющая длину строки-аргумента. Строка 5

94

Часть II. Основы конструирования программ