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 містять колекції, які зберігають інформацію про таблиці, полі, ключі, стовпчики та індекси баз даних. Часто виникає необхідність в добуванні елементу колекції, який представляє інформацію в базі даних та копіюванні його в колекцію візуального компонента. Єдиного засобу копіювання елементів колекцій немає, але загальна послідовність дій, необхідних для копіювання елементів колекцій.
Приклад копіювання однієї колекції в іншу 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.Приклад використання метода RemoveItemDo While (ComboNamesList.ListCount>0) Call ComboNamesList.RemoveItem(0) Loop В цьому циклі елементи з нульовим індексом будуть видалятися до тих пір, поки не зникнуть із списку.
|