Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Повторение действий с помощью циклаСодержание книги
Поиск на нашем сайте
Цикл — это инструмент, позволяющий повторять операцию столько раз, сколько нужно. В языке Visual Basic есть несколько типов циклов, которые можно использовать. Наиболее популярны блоки Do/Loop и For /Next, и в этом разделе вы познакомитесь с обоими. Далее приведен пример блока Do/Loop, который наверняка выведет читателей из равновесия: Do MsgBox "Ever ever get that nagging deja vu feeling?" Loop Когда программа Access обрабатывает этот код, она начинает с вывода окна сообщения и остановки выполнения остального вашего кода. После того как вы щелкнули мышью кнопку ОК, выполнение кода продолжается до финального оператора Loop в конце цикла. В этот момент программа автоматически переходит к началу цикла (оператор Do) и повторяет ваш код, выводя второе окно сообщения. Проблема в том, что этот процесс продолжается бесконечно! Если допустить ошибку и запустить этот код, ваша БД будет заблокирована на неопределенное время (пока вы не нажмете комбинацию клавиш аварийного останова <Ctrl>+<Break>). Для того чтобы избежать подобной ситуации, следует создавать все циклы с условием выхода из цикла, сигнализирующим о моменте его завершения. Далее приведен исправленный вариант того же цикла, который прекращается после того, как сообщение отображено пять раз: ' Отслеживает количество повторений цикла Dim NumberOfTimes
' Начинает отсчет с 0 NumberOfTimes = 0
Do MsgBox "Ever ever get that nagging deja vu feeling?"
' Увеличивает счетчик на 1 NumberOfTimes = NumberOfTimes + 1 Loop Until NumberOfTimes =5 Важная часть — оператор в конце цикла, Until Number0fTimes=5. Он определяет условие, и как только оно становится True (значение переменной NumberOfTimes равно 5), программа Access достигает конца цикла и переходит к выполнению оставшегося кода процедуры. Если вам нужен цикл с фиксированным количеством повторений, возможно, вас заинтересует цикл типа For/Next. Этот тип цикла в точности такой же, как цикл Do/Loop за исключением того, что у него есть встроенный счетчик, увеличивающийся автоматически при каждом проходе цикла. Теперь можно переписать предыдущий пример в более компактной форме с применением цикла For/Next: Dim NumberOfTimes For NumberOfTimes = 1 To 5 MsgBox "Ever ever get that nagging deja vu feeling?" Next Важная часть цикла - оператор NumberOfTimes=l To 5, сообщающий программе Access о начальном значении переменной NumberOfTimes, равном 1, о необходимости увеличения ее значения на 1 при каждом проходе цикла и о завершении цикла после пятого прохода. Цикл Do/Loop удобен при обработке коллекции данных. Его можно применять для обработки информации до тех пор, пока она не иссякнет, даже если заранее вы не знаете, сколько данных у вас есть. Вы увидите пример использования этого метода в конце данной главы, когда будете выполнять пакетное обновление вашей БД с помощью программного кода. С другой стороны цикл For/Next предстанет во всей красе, если вы можете точно определить заранее, сколько раз хотите повторить цикл. В справедливости этого вы убедитесь чуть позже в этой главе, когда будете проверять номера кредитных карт.
Создание пользовательских функций Вы уже научились создавать собственные процедуры, но еще не знаете о том, как создать их старшую сестру, функцию. Функция, как и процедура, — изолированный фрагмент кода, способный включать в себя произвольное число операторов. И, так же как и процедуры, функции можно добавлять в модули. В модуле может сосуществовать рядом любое количество процедур и функций. 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 4x4 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, которая включена в примеры к данной главе. Подытожим: функция Для проверки кредитных карт Теперь, когда вы познакомились с языком Visual Basic, самое время подвести итог с помощью примера, демонстрирующего все, что вы узнали о VB (и даже немного больше). В данном примере рассматривается пользовательская функция ValidateCard (допустимая карта), которая проверяет номер кредитной карты. Функция ValidateCard возвращает одно из двух значений: True (что означает допустимый номер карты) и False (что означает неверный номер). Важно понимать, что допустимый номер кредитной карты — это просто номер, соответствующий несекретным правилам нумерации кредитных карт (см. дополнительную информацию в следующем примечании). Этот номер может соответствовать реальной кредитной карте или нет. Функция ValidateCard достаточно сообразительна для вылавливания случайных ошибок и не слишком умелых хакеров. По-настоящему злонамеренные пользователи могут найти программы, позволяющие генерировать потенциально допустимые номера кредитных карт. На профессиональном уровне.
|
||||
Последнее изменение этой страницы: 2016-08-14; просмотров: 140; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.148.117.240 (0.007 с.) |