Создание пользовательских функций

 

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

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

Function DoSomething()

‘Здесь  код функции

End Function

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

Вы задаете результат, написав строку кода, которая присваивает окончательное значение имени функции. (По существу, вы считаете, что имя функции — это переменная, в которой можно хранить некоторые данные.)

 

Далее приведен пример:

Function GetMyFavoriteColor()

GetMyFavoriteColor = "Magenta" End Function

Эта функция названа GetMyFavoriteColor (получение моего любимого цвета). Ее результат — текстовая строка "Magenta" (пурпурный).

Вызов функции несколько отличается от вызова процедуры. Для вызова процедуры вы используете имя модуля, за которым следует точка, а затем имя процедуры. Этот же способ можно применить и для вызова функции:

MyModule.GetMyFavoriteColor

Но возникает проблема. Этот шаг запускает функцию GetMyFavoriteColor, но отбрасывает результат (строку с текстом Magenta).

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

‘ Создается переменная для хранения результата

Dim Color

 

‘ Вызывается функция и результат сохраняется в переменной

Color = MyModule.GetMyFavoriteColor

 

‘ Результат отображается в окне сообщения

MsgBox "Your favorite color is " & Color

Если вы по-настоящему сообразительны, то можете сократить этот код до одной строки и вообще избежать использования переменной Color:

MsgBox  "Your  favorite  color is   "   & MyModule.GetMyFavoriteColor

Функция GetMyFavoriteColor предельно проста, т. к. не использует аргументы. Но ничто не мешает вам проявить большую изобретательность. Рассмотрите следующую пользовательскую функцию, которая принимает два аргумента — длину и ширину — и вычисляет площадь, перемножая их:

Function Area(Length, Width)

Area = Length * Width

End Function

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

Далее приведен пример вызова данной функции и отображения результата. В нем для определения параметров Length (длина) и Width (ширина) применяются числовые константы. Но их вполне можно заменить именем поля, переменной или свойством, которые вы хотите использовать в функции Area.

MsgBox "The area of a 4×4 rectangle is " & Area(4, 4)

 

На экране появится:

The area of a 4x4  rectangle is  16

Ни функция GetMyFavoriteColor (), ни функция Area () не продемонстрировали ничего впечатляющего, но в следующем разделе этой главы вы создадите гораздо более мощную функцию для проверки номеров кредитных карт.

 

 

Применение пользовательских функций в запросах

 

После того как вы создали функцию, ее можно использовать в вашей БД для построения запросов или условий на значения. Единственное требование — ваша функция должна находиться в пользовательском модуле, который вы добавили (не в модуле формы) и в ее объявлении не должно быть слова Private. Если ваша функция соответствует указанным требованиям, вы можете вызывать ее так же легко, как любую встроенную функцию программы Access.

Можно создать, например, такой запрос с вычисляемым полем (при условии, что в него включены два поля, названные LengthOfRoom (длина комнаты) и WidthOfRoom (ширина комнаты) соответственно):

RoomArea:   Area (LengthOfRoom,   WidthOfRoom)

Или можно создать следующее условие на значение для таблицы:

Area(LengthOfRoom  *   WidthOfRoom)   <   10000

См. в главе 7 дополнительные соображения по поводу применения функций в вычисляемых полях и в главе 4 дополнительную информацию об условиях на значения или правилах верификации. Если же вы хотите увидеть этот конкретный пример в действии, обратитесь к БД MyHouse, которая включена в примеры к данной главе.

 

 

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100