Применение более сложных переменных

В примере, приведенном выше, показан простейший способ создания переменной в коде на языке VB. В нем создается переменная, известная как Variant и способная хранить любой тип данных, включая текст, числа, логические значения и т. д. Грамотные VB-программисты предпочитают быть строже и явно задают тип данных для каждой созда­ваемой ими переменной. В этом случае никто случайно не сохранит текст в переменной, предназначенной для числового содержимого и наоборот.

Для создания переменной с фиксированным типом данных вы добавляете в объявление ключевое слово As. Вот как создается переменная TextContent для хранения только текста:

Dim TextContent As String

Далее создается переменная, которая хранит большие целые числа:

Dim NumberContent As Long

Подобный подход считается хорошим стилем программирования и помогает выявлять определенные типы ошибок. Но для его применения нужно знать разные типы данных языка Visual Basic. К наиболее часто используемым относятся String, Date, Boolean (значения Истина или Ложь), Long (целое, которое может быть очень маленьким или очень большим), single (число с дробной частью) и Currency (числовой тип данных, идеально подходящий для хранения финансовых сумм).

Описание всех типов данных языка VB можно найти в справочной системе программы Access. Для перехода к ней выберите Справка→Справка: Microsoft Visual Basic(Microsoft Visual Basic Help → Microsoft Visual Basic help) из меню редактора Visual Ba­sic. Далее выберите последовательно Visual Basic for Applications Language Reference→Visual Basic Language Reference→Data Types.

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

Далее приведен пример сохранения некоторого текста в переменной:

TextContent = "Тестовый текст"

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

Dim TextContent

' Копируется текст из первого поля для использования в дальнейшем

TextContent = TextBoxOne.Value

' Заменяется текст в первом поле

TextBoxOne.Value = TextBoxTwo.Value

' Заменяется текст во втором поле с помощью переменной

TextBoxTwo.Value = TextContent

Принятие решений

Условная логика, еще один ключевой элемент программирования, — это код, который вы­полняется при соблюдении определенного условия. Для применения условной логики нет никаких ограничений. Можно помешать обновлению, если вновь введенные данные не про­верены. Или же возможна иная настройка элементов управления на форме в зависимости от их данных. Все это и многое другое можно сделать с помощью условной логики.

Любой условный блок начинается с условия: простого выражения, которое может при­нимать значение Истина или Ложъ (программисты называют этот процесс проверкой ис­тинности или ложности условия). Затем ваш код может принять решение о выполнении разных логических алгоритмов в зависимости от оценки условия. Для построения условия необходимо сравнить переменную или свойство с помощью логической операции, например = (равно), < (меньше чем), > (больше чем) и о(не равно). Например, Price=10 — это усло­вие. Оно может быть истинно (если в поле Price содержится число 10) или ложно (если в этом поле содержится любое другое число). Условия уже применялись в правилах верифи­кации или условиях на значения. В языке Visual Basic условия следуют набору очень похо­жих правил.

Само по себе условие не может ничего сделать. Но в сочетании с другим кодом оно мо­жет стать чрезвычайно мощным инструментом. После того как подходящее условие создано, его можно поместить в специальную структуру, именуемую блоком If. Блок If вычисляет условие и выполняет часть кода, если условие истинно. Если условие ложно, программа Access полностью игнорирует код.

Далее приведен пример блока If, проверяющего, не превышает ли значение в поле Priceчисла 100. Если да, то Access выводит на экран сообщение:

If Price > 100 Then

MsgBox "Надеюсь, у вас выделены деньги для этого."

End If

Обратите внимание на то, что блок If всегда начинается со слова If и заканчивается оператором End If. Внутри блока If можно поместить столько строк кода, сколько захоти­те. Это условный код, он выполняется, только если условие истинно.

В условном блоке может проверяться несколько разных условий. Далее приведен при­мер, в котором вычисляется цена товара с учетом всех налогов, а затем отображается в эле­менте управления Подпись.Хитрость заключается в том, что налоговая ставка зависит от другого поля (Country)и именно здесь в игру вступает условная логика.

' В этой переменной сохраняется налоговая ставка,

‘которую вы хотите применить

Dim TaxRate

If Country = "U.S.A." Then

' Налоги меняются для клиентов из США (7%)

TaxRate =1.07

Elself Country = "Canada" Then

' Еще большие налоги взимаются с клиентов из Канады (14%)

TaxRate =1.14 Else

' Все остальные освобождаются от налогов

TaxRate =1 End If

' Окончательный итог отображается в подписи

TotalWithTax.Caption = Price * TaxRate

 
  Применение более сложных переменных - student2.ru

В блоке I f выполняется только один сегмент кода. В данном примере программа Access по-своему обрабатывает блок, проверяя каждое условие до тех пор, пока не найдет подходя­щее. Как только совпадение найдено, выполняется условный блок кода и последующий пе­реход к завершающему оператору End I f, а затем продолжается обработка остального кода, входящего в процедуру. Если нет подходящих условий, Access выполняет код в заключи­тельном операторе Else (если вы его вставили). На рис. 17.2 показано выполнение данного кода.

Рис. 17.2.Благодаря условной логике эта подчиненная форма всегда отображает правильно вычисленную окончательную цену, учитывая как текущую цену, так и страну клиента. Она действует в ответ на событие Текущая запись(On Current), возникающее каждый раз, когда запись выводится на экран

Эти примеры показывают лишь лежащие на поверхности возможности условной логики. Можно применять ключевые слова And и Or для комбинирования условий, помещать один условный блок в другой и т. д.

В главе 15 вы видели пример, который выполнял проверку на значение конкретного типа в записях клиентов. Эта проверка использовала два поля: WantsEmailи Email Address.Если в поле WantsEmailбыло задано значение Да (Yes), поле EmailAddressне могло оставаться

пустым. Но если у поля WantsEmailбыло значение Нет (No), пустое поле EmailAddressсчиталось вполне приемлемым. Вы можете с помощью VB-кода реализовать идентичную логику проверки, но тут есть хитрость — в проверке применяются два блока If (следом за кодом дается построчное объяснение1):

1 Private Sub Form_BeforeUpdate(Cancel As Integer)

' Проверяется, нужен ли электронный адрес

2 If WantsEmail = True Then

' Убеждаемся, что поле EmailAddress не пустое или незаполненное

3 If EmailAddress = "" Or IsNull(EmailAddress) Then

' Это некорректный вариант.

' Отмена изменения и вывод сообщения

4 MsgBox "You can't be notified without an email address."

5 Cancel = True

6 End If

7 End If

8 End Sub

Вот как выполняется приведенный код.

■ В строке 1 объявляется программная процедура, обрабатывающая событие формы До обновления (On Before Update). Обратите внимание на то, что этот обработчик события получает одну порцию данных — значение True (Истина) или False (Ложь) в параметре Cancel, который позволяет задать запрет обновления.

■ В строке 2 начинается блок If, проверяющий установлен ли флажок WantsEmail.

■ В строке 3 выполняется вторая проверка. Она несколько сложнее, потому что есть две вещи, способные вызвать выполнение условного кода. Он выполняется, если адрес электронной почты равен пустому значению (что происходит при стирании введенного электронного адреса) или если поле адреса не заполнено (т. е. электронный адрес не вводился ни разу; см. обсуждение значений null в разд. "Пропущенные значения и пустые строки" главы 4).

ш Строка 4 выводит пояснительное сообщение об ошибке. Помните о том, что этот фраг­мент кода выполняется, только если оба блока If имеют значение True. Если обе про­верки выдают значение False (флажок WantsEmailне установлен или поле EmailAd­dressне задано), Access немедленно возвращается назад.

Примечание

Технически можно оба эти блока If объединить в один блок с помощью более сложного усло­вия, проверяющего все сразу. Но сделать это правильно (и впоследствии понять, что вы напи­сали) гораздо труднее. Опытные программисты знают, что всегда лучше писать ясный код, да­же если при этом он становится слегка многословнее.

Применение более сложных переменных - student2.ru 1 В тексте строки кода пронумерованы. Обратите внимание, что в реальном коде нумеровать строки не следует. — Ред.

■ Строка 5 отменяет обновление с помощью параметра Cancel, предоставляемого событием До обновления(On Before Update). В этом случае изменения не происходят, и запись остается в режиме редактирования.

■ Строки 6—8 — завершающие: они закрывают оба блока If и заканчивают процедуру.

У программы Access есть множество событий, которые вы можете отменить, как событие До обновления(On Before Update). Поищите параметр Cancel, располагающийся в скоб­ках после имени процедуры. Если он там, можно задать ему значение True для прекращения действия, которое готово произойти.

Наши рекомендации