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

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

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

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

Добавлен: 21.10.2020

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

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

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

Существует также альтернативное решение: вначале просто объявите объект, а за-

тем выделите память для него посредством команды New и операции присваивания:

Dim

 As Collection

Set МояКоллекция = New Collection

Обратите внимание на наличие служебного слова Set. Операции присваивания,

аргументами которых служат объекты классов, требуют обязательного использования
слова Set, которое служит характерным признаком действий над объектами. Если вы
забудете указать Set, откроется окно сообщения об ошибке (рис. 13.1).

 №

 ft«t-3f»  .

 .

 :

 tf x';

Ц

  ' - . ' . . | ••

 • -

Sub

 С

 I

Г OK 1

 . .

л

Рис.

 Забыв ввести служебное слово Set в операторе присваивания объектов, вы

получите сообщение об ошибке

После завершения работы с объектом следует очистить выделенную для него па-

мять. Подобная операция выполняется таким образом:

Set МояКоллекция = Nothing

Служебное слово New появилось в языках С и C++ для резервирования фрагмента

общей области динамически распределяемой памяти (называемой термином

 куча —

Heap). Воспринимайте

 как часть оперативной памяти компьютера, кото-

рую операционная система Windows способна выделить вашей прикладной програм-
ме. Объекты занимают больше памяти, нежели переменные простых типов. Способ

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

Представьте себе программу, которая в одночасье израсходовала всю доступную ей

память — некоторым приложениям во время их работы требуются многие миллионы
байтов. Если вся память исчерпана, непрофессионально написанные программы про-
сто "рушатся".

230 Часть IV. Определение типов данных. Использование массивов и коллекций


background image

Но не будем о грустном. Сейчас вам достаточно запомнить, что объект коллекции

(и любой другой) может быть реально создан либо одновременно с его объявлением,

либо позже, с помощью отдельной команды.

 коллекциями данных

Коллекция — это "умный" динамический массив, который наделен способностями

автоматического пополнения. Свойство Count дает ответ на вопрос, сколько элемен-
тов содержится в коллекции. Методы Add и Remove позволяют накапливать данные в
коллекции и удалять их. Доступ к отдельным элементам коллекции осуществляется с

помощью метода Item или цикла For Each . . Next.

Действует общепринятое соглашение, согласно которому объекты кол-
лекций называют существительными во множественном числе, произ-
водными от наименований типов элементов. Например, коллекцию

элементов типа String уместно назвать

 Strings.

Добавление элементов в коллекцию

Для пополнения коллекции применяется метод Add. Синтаксис его вызо-

ва таков:
Call

 Элемент [,

 [До |

,

 )

 — это, как вы догадываетесь, имя объекта кол-

лекции, a Add — название метода класса Collection. Идентификатор

объекта отделен от наименования метода оператором точки. (Служебное

слово Call не является обязательной частью конструкции вызова проце-

дуры. Если слово Call все-таки употреблено, список аргументов проце-
дуры — в том числе пустой — должен быть заключен в круглые скобки.

Если же слово Call отсутствует, скобки не применяются.) Основная

форма вызова метода Add предполагает задание единственного аргумента

Элемент. В качестве значения параметра допустим литерал, переменная,

выражение или наименование объекта. Например, если указать на месте
аргумента элемент выражение А = 5, в коллекцию будет занесено зна-
чение типа Boolean, равное True при значении переменной А, равном 5,
и False — в противном случае. Если Элемент — единственный аргумент
в списке параметров процедуры Add, заданный элемент займет в коллек-

ции свободное место.

Параметр КлючевоеИмя позволяет дать элементу, добавляемому в коллекцию, до-

полнительный псевдоним. Элемент, наделенный псевдонимом, допускает обращение

как по индексу, так и по имени. (Подробности приведены ниже, в разделе "Метод

Item и свойство

 Следующие по порядку необязательные параметры — это До

и После (в определенный момент может быть

 только один из них). Если указан

аргумент До, новый элемент будет размещен в коллекции непосредственно

 перед

 эле-

ментом, индекс или псевдоним которого задан параметром До. Аргумент После по-
зволяет определить номер или имя элемента,

 за

 которым следует разместить новый. В

конструкции вызова метода Add аргумент После отличается от До наличием дополни-
тельной предшествующей запятой. Листинг 13.1 демонстрирует несколько примеров
использования метода Add класса Collection.

13-й час. Коллекции данных 231


background image

Листинг 13.1. Примеры использования метода Add класса Collection

1: Sub

 )

2 : Dim Strings As New Collection
3 : ' Вызов со скобками

4: Call

 "1" )

 ' Вызов без скобок

6:

 "2"

7: Call

 "3", "три", , 2 )

8: Call

 "4", "четыре",

9: MsgBox

 "три" )

10:

 1 )

11: Dim I As Integer

 For I = 1 To

13:

 I )

14: Next I

15: Set Strings = Nothing

16 : End Sub

При вызове функции и присваивании возвращенного ею значения

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

В строке 2 листинга

 выполняются одновременное объявление нового

I объекта strings класса Collection и выделение памяти для него посред-

ством команды New. Строка 4 содержит самый простой вариант вызова ме-
тода Add: процедуре передается единственный аргумент — значение пер-
вого элемента коллекции —

 В строке 6 выполняется аналогичная опе-

рация, только без использования круглых скобок: в коллекцию добавляется
второй элемент,

 Вызов процедуры Add в строке 7 включает уже три

аргумента — содержимое очередного элемента

 его псевдоним

("Три") и параметр 2, указывающий на номер элемента,

 после

 которого

следует вставить новый (речь идет именно о параметре После, поскольку
указана дополнительная запятая). Строка 8 предполагает вставку элемента

"4", снабженного именем "Четыре", непосредственно перед элементом
"Три". Элементы "3" и "4" допускают обращение как с помощью значе-

ний индекса, так и посредством указания их псевдонимов. Строки 9 и 10

демонстрируют два варианта обращения к одному и тому же элементу,

 а строки

 представляют конструкцию цикла, в котором содер-

жимое каждого элемента коллекции Strings последовательно отображает-
ся в окне Immediate (рис. 13.2).

Строка 15 определяет директиву очистки фрагмента памяти, занятого объектом

коллекции (хотя, отметим, делать это необязательно, поскольку компилятор VBA вы-
полняет подобные функции автоматически). Строка

 завершает процедуру.

Языки программирования Visual Basic for Applications и Java не требуют

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

ния. Рекомендуем вам следовать таким принципам.

232 Часть IV. Определение типов данных. Использование массивов и коллекций


background image

 (

is в

 New

'

Call

 .

 2}

Call

 "три")

 I Ад Integer

Next I

Set

End

Рис. 13.2. Так выглядит содержимое коллекции, построенной с помощью процедуры

листинга 13.1

 данных из коллекции

Методу Remove передается единственный аргумент — значение индекса.
В качестве индекса может задаваться целое число в интервале от 1 до

значения, содержащегося в Count, либо строка, указывающая ключевое

имя (псевдоним) элемента. Синтаксис вызова метода Remove таков:

Call

 Индекс )

(Обращаясь к процедуре, указывайте служебное слово Call и круглые скобки. Во

всех примерах последующих глав это правило соблюдается.) Назначение имени Имя-
ОбъектаКоллекции пояснять не нужно. За ним, после оператора точки, следует на-
звание метода (Remove) и выражение индекса — целочисленное либо символьное. Ес-

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

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

ции. (Пример использования метода Remove вы найдете ниже, в листинге 13.2.)

Метод Item и свойство Count

Свойство Count содержит значение количества элементов коллекции.
На предыдущем занятии, изучая динамические массивы, предпринимались явные

действия для установления размера массива и его увеличения. Аналогичные средства

присутствуют и в классе коллекций. Подобное свойство объектов называют

 сокрытием

 час. Коллекции данных

233


background image

данных

 или

 сокрытием функциональности.

 Теперь можно не заботиться о мелких дета-

лях реализации, а полностью сосредоточить внимание на поставленной задаче.

Метод Item предоставляет возможность доступа к элементу коллекции по задан-

ному значению индекса или ключевого имени. О том, как пользоваться методом

Item, вы узнаете, изучив текст листинга 13.2.

Циклическая обработка элементов коллекции

С циклической конструкцией For Each .

 Next вы ознакомились в главе "5-й

час. Программирование управляющих структур". Коллекции — идеальный объект

применения циклов For Each. Листинг 13.2 содержит примеры использования раз-

личных способов обработки данных в коллекции.

Листинг 13.2. Подробный пример использования коллекций

1 Sub

 )

2 Dim Strings As New Collection

3 Call

 "Но в столовой"

4 Call

 "у кошки" )

5 Call

 "даже" }

6 Call

 "хлеба" )

7 Call

8 Call

9 Dim Str As Variant

10: Dim Text As String

11: For Each Str In Strings

 Text = Text &

 &

13: Next Str

14:

 Text

15: Dim I As Integer

16: For I =

 To 1

17:

 "Удаляем:

18: Call

 Next I

20: Set Strings = Nothing

 Sub

"ни"

 )

Str

Step -1

 &

I Строка 2 содержит конструкцию объявления коллекции Strings и
I ления памяти для нее. Важно помнить, что элементами коллекции могут

служить данные практически любых типов. В строках 3-8 выполняются

операции добавления в коллекцию элементов типа string. В строке 9
объявляется переменная str типа Variant, а в строке 10 — символьная
переменная Text. Цикл For Each требует использования переменной

типа Variant. Str употребляется в роли приемника данных из очеред-

ного элемента коллекции, а строка Text в результате получает "сумму"
всех элементов (фразу из рассказа Мыши, персонажа повести Льюиса

Кэрролла

 Приключения Алисы в стране

 и затем (см. строку 14) ото-

бражается в окне Immediate.

Строки 16-19 содержат цикл, на каждом шаге которого удаляется очередной эле-

мент, начиная с последнего. Перед удалением элемента его содержимое отображается

в окне Immediate. Команда в строке 20 выполняет очистку памяти.

Если необходимо удалить все элементы коллекции, используйте обратный цикл.

(При удалении очередного элемента значение Count уменьшается на единицу.) В про-

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

234 Часть IV. Определение типов данных. Использование массивов и коллекций