ивної пам'яті. За замовчуванням CacheSize=1. Якщо задати, наприклад, CacheSize=10, то при відкритті бази даних в буфер завантажаться перші 10 записів. Поки йтиме робота з цими записами, всі операції будуть проводиться в оперативній пам'яті без звернення до бази даних. Якщо покажчик таблиці вийшов за межі 10, то в пам'ять завантажаться наступні 10 записів і т.д. Природно, що буферизація записів підвищує ефективність роботи.
Основні способи роботи з ADOTable не відрізняються від способів, для Table. Точно так само подвійне клацання на компоненті викликає Редактор Полів, в якому можна задати властивості окремих полів, нічим не відрізняються від полів компонентів BDE. Втім, одна сумна відмінність є: в компонентах ADO неможливо працювати зі словниками. Так що в кожному компоненті властивості полів доводиться задавати вручну. Крім того, треба мати на увазі, що не всі драйвери ADO можуть працювати з будь-якими типами полів. Наприклад, драйвер Paradox ADO не працює з полями зображень. Так що в таблиці Pers бази даних dbP, використовуваної в даній книзі, що не буде доступно поле Photo - фотографії співробітників. Для драйвера InterBase (в наших прикладах для бази даних ib) такого обмеження немає.
З редактора полів так само, як в компонентах BDE, можна перетягувати поля мишею на форму. При цьому на формі автоматично будуть створюватися відповідні компоненти відображення даних.
Програмний доступ до полів здійснюється так неї, як в компоненті Table: за індексом через властивість Fields [i: integer], по імені поля за допомогою методу FieldByName ( lt; HMfl gt; ), по імені об'єкта поля.
Обмеження на вводяться значення в компоненті ADOTable можна забезпечувати лише на рівні полів. Властивості, аналогічного Constraints в компоненті Table, в ADOTable немає.
Зв'язок один з одним компонентів ADOTable, які працюють з різними таблицями, одна з яких головна, а інша - допоміжна, здійснюється так само, як в компонентах Table, за допомогою властивостей MasterSource і Master Fields.
Упорядкування відображуваних записів проводиться установкою властивості IndexFieldNames. У цій властивості можна задавати будь-яке поєднання імен полів, за якими ви хочете упорядкувати відображення, розділяючи їх крапкою з комою. Наприклад, рядок Dep впорядкує запису в таблиці Pers за значенням поля Dep -відділ. А рядок Dep; Fam; Nam; Par впорядкує записи за значенням поля Dep -відділ, а всередині кожного відділу впорядкує за прізвищем, ім'ям та по батькові співробітників. На відміну від властивості IndexFieldNames компонентів BDE, в компонентах ADO можна задавати будь-які поєднання полів, незалежно від того, чи була індексована таблиця при її створенні по цих полях. У цьому виявляється додаткова гнучкість компонентів ADO. Але зате в цих компонентах не працює властивість Index Name (хоча воно присутнє в Інспектора Об'єктів), що дозволяє використовувати індекси, сформовані при створенні таблиці.
Властивість тільки для читання IndexFieldCount дозволяє визначити число полів, використаних при індексації.
Фільтрація відображуваних даних може здійснюватися так само, як в компонентах BDE, за допомогою властивості Filter, в якому записуються умови відбору (див. розд. 9.5.6). Відмінність від компонентів BDE полягає в тому, що в компонентах ADO в рядку Filter імена полів обов'язково повинні відділятися пробілами від операцій відносини. Також пробілами повинні оточувати логічні операції and і or. Наприклад, якщо в компонентах BDE фільтр може бути записаний у вигляді:
(Year_b lt;=1960) and (Year_b gt;=1940)
то в компонентах ADO цей рядок повинна мати вигляд:
[Year_b lt;=1960) and lt; Year_b gt;=1940)
Властивість Filter працює, якщо властивість Filtered=true.
Можна також використовувати для фільтрації обробник подій OnFilterRecord. Ці події наступають кожного разу при зміні активної записи, якщо властивість Filtered=true. У обробнику цих подій ви можете аналізувати будь поля запису І повертати значення параметра Accept=true, якщо поля запису задовольняють сформульованим вами умов, і Accept=false в іншому випадку. При використанні обробника подій OnFilterRecord треба стежити за тим, щоб рядок властивості Filter не перечила умовам, сформульованим у обробнику OnFilterRecord. Не можна також змінювати індексацію (властивість IndexFieldNames). поки Filtered=true, так як це може призвести до зациклення програми. Перед зміною індексації треба установітьв false, потім змінити IndexFieldNames, а потім встановити Filtered в true.
Створення додатків для роботи з базами даних в мережі
Додаткові можливості фільтрації забезпечує властивість тільки часу вик...