Головна
Лекції
Завдання
Побажання
Гостьова
Лінки
Лекція №9 Лекція №7  Скачати лекцію

Access 8

Колекції даних

 

Колекція – це індексована структура даних, що має вбудовані можливості додання елементів, їх видалення та ітеративної обробки. Колекції можуть містити дані стандартних та користувальницьких типів, а також обєкти класів. Колекції можуть бути однорідними та неоднорідними, тобто містити елементи даних різних типів. Додаткові можливості, що надаються колекціями, - це вбудовані засоби зміни розмірів та обробки помилок.

Колекції широко застосовуються в стандартних візуальних компонентах, (наприклад, списках, що розкриваються), в обєктах класу ADODB для представлення полів, в ADOX для збереження інформації про таблиці та ключі бази даних.

Клас – це іменований блок коду, що містить формалізований опис властивостей та методів. Обєкт – це створюваний програмістом екземпляр (змінна) класу.

Визначені у складі класу змінні, процедури та функції називають загальним терміном -атрибути. Існує дві різновиди атрибутів. Атрибути даних – це властивості. Властивості – це ті ж змінні, за винятком того, що при зверненні до властивості, необхідно обовязково вказувати найменування обєкта (екземрляра), якому вона належить.

Процес та результат оголошення атрибутів класів називається інкапсуляцією.

Клас Collection містять 4 атрибути. Властивість Count призначена для збереження кількості елементів колекції. Метод Add дозволяє додавати в колекцію нові елементи. Remove слугує для видалення елементів, а Item дає можливість посилатися на елементи за значення індексу.

Створення обєктів колекції. Синтаксис оголошення колекції такий:

Dim МояКолекція As Collection.

Після оголошення обєкта відповідна йому змінна містить значення Nothing. Тому зразу скористатись обєктом ви не зможете.

Щоб обєкт став повноцінним, відповідній змінній необхідно привласнити значення існуючого обєкту або створити новий, виділивши память за допомогою директиви New. Команду New допускається використовувати безпосередньо в рядку оголошень.

Dim МояКолекція As New Collection.

Існує також альтернативне рішення: спочатку просто оголосити обєкт, а потім виділити пам’ять для нього за допомогою команди New та операції присвоювання:

Dim МояКолекція As Collection.

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

Операції присвоювання, аргументами яких є обєкти класів, потребують обовязкового використання слова Set, яке служить характерною ознакою дій над обєктами. Після завершення роботи з обєктом потрібно звільнити виділену для нього память:

Set МояКолекція=Nothing.

Додання елементів в колекцію. Для поповнення колекції використовується метод Add. Синтаксис його наступний:

Call ІмяОб’єктаКолекції.Add (елемент [,КлючовеІм’я,[До|,Після]])

Службове слово Call не є обовязковим. Якщо воно використовується, то список аргументів процедури (в тому числі порожній), потрібно брати в круглі дужки. Якщо слово Call відсутнє – дужки не застосовують.

Параметр КлючовеІм’я дозвол яє дати елементу, що додається в колекцію, додатковий псевдонім. Елемент, що має псевдонім, дозволяє звертання, як за індексом, так і за іменем. Наступні параметри – необовязкові. Якщо вказаний аргумент До, новий елемент буде розміщений в колекції безпосередньо перед елементом, номер або індекс якого вказаний параметром До. Аргумент Після дозволяє визначити номер або імя елемента, за яким потрібно розмістити новий.

Приклад:

 

Sub CollectionDemoAdd()

Dim Strings As New Collection

'Виклик з дужками

Call Strings.Add("1")

'Виклик без дужок

Strings.Add "2"

Call Strings.Add("3", "три", , 2)

Call Strings.Add("4", "чотири", "три")

MsgBox Strings.Item(1)

Dim I As Integer

For I = 1 To Strings.Count

Debug.Print Strings.Item(I)

Next I

Set Strings = Nothing

End Sub

Елементи “три” та “чотири” допускають звернення як за допомогою індексу, так і за допомогою псевдоніма.

Видалення даних із колекції.. Методу Remove передається єдиний аргумент – значення індексу. В якості індексу може задаватися ціле число в інтервалі від 1 до значення, яке міститься в Count. Синтаксис:

Call ІмяОб’єктаКолекції. Remove(Індекс)

Метод Item надає можливість доступа до елементу колекції за значенням індекса або ключовому імені.

Приклад використання колекцій.

Sub CollectionDemo()

Dim Strings As New Collection

Call Strings.Add("Don't")

Call Strings.Add("stop")

Call Strings.Add("me")

Call Strings.Add("now")

Dim Str As Variant

Dim Text As String

For Each Str In Strings

Text = Text & " " & Str

Next Str

Debug.Print Text

Dim I As Integer

For I = Strings.Count To 1 Step -1

Debug.Print "Lфры хь:" & Strings.Item(I)

Call Strings.Remove(I)

Next I

Set Strings = Nothing

End Sub

При необхідності видалити всі елементи колекції використовуйте зворотній цикл (При видаленні наступного елемента значення Count зменшується на 1.) Інакше, використовуючи Count в якості верхньої границі діапазону зміни індексу, ви в якийсь момент отримаєте повідомдення про помилку виходу індексу за допустимі межі. На жаль, для видалення елементів колекції цикл For Each…Next застосовувати не можна.

Застосування колекцій. Візуальні компоненти (наприклад, розкриваючі та комбіновані списки) використовують колекції для збереження текстових елементів. Обєкти ADO містять колекції, які зберігають інформацію про таблиці, полі, ключі, стовпчики та індекси баз даних. Часто виникає необхідність в добуванні елементу колекції, який представляє інформацію в базі даних та копіюванні його в колекцію візуального компонента. Єдиного засобу копіювання елементів колекцій немає, але загальна послідовність дій, необхідних для копіювання елементів колекцій.

  • Обрати колекцію, яка буде виступати в ролі джерела даних.
  • Визначити або створити екземпляр колекції, що приймає дані.
  • Побудувати цикл, на кожному кроці якого черговий елемент колекції джерела буде зчитуватись, а потім додаватись в колекцію- прийомник за допомогою стандартного методу Add.

Приклад копіювання однієї колекції в іншу

Sub Copy_Col()

Dim Target As New Collection

Dim Recordset As New ADODB.Recordset

Call Recordset.Open("Music", CurrentProject.Connection, adOpenKeyset, adLockOptimistic)

Recordset.MoveFirst

Do While Not Recordset.EOF

Call Target.Add(Recordset("Artist").Value)

Recordset.MoveNext

Loop

Dim Artist As Variant

For Each Artist In Target

Debug.Print Artist

Next Artist

Set Target = Nothing

Recordset.Close

End Sub

Використання AddItem та RemoveItem. В Ms Access 2002 в елементи управління список та поле із списком AddItem та RemoveItem.

Метод AddItem отримує 2 аргументи та додає елемент в колекцію, яка є списком або полем із списком. Метод RemoveItem отримує в якості аргументу індекс та видаляє із колекції елемент з цим індексом.

Синтаксис:

Об’єкт. AddItem(Рядок, Індекс)

Об’єкт. RemoveItem(Індекс)

Приклад використання метода AddItem для додання елементів списку

Private Sub Form_Load()

Dim Data As Variant

'Dim Combo As ComboBox

Data = Array("Beatles", "Queen", "Scorpions", "Led Zeppelin", "Eagles")

ComboNameList.RowSourceType = "Value List"

Dim I As Integer

For I = LBound(Data) To UBound(Data)

Call ComboNamesList.AddItem(Data(I), I)

Next

End Sub

Щоб видалити елемент із списку використовуйте метод RemoveItem. При видаленні відбувається перенумерація елементів, що залишаються, тому для виконання цієї операції не можна використовувати цикл For Next.

Приклад використання метода RemoveItem

Do While (ComboNamesList.ListCount>0)

Call ComboNamesList.RemoveItem(0)

Loop

В цьому циклі елементи з нульовим індексом будуть видалятися до тих пір, поки не зникнуть із списку.

Лекція №9 Лекція №7  Скачати лекцію

 

 

 

 

Hosted by uCoz