Смекни!
smekni.com

Організація баз даних та знань (стр. 19 из 26)

TSQLTable й TSQLQuery - для доступу до БД за допомогою dbExpress. На схемі наведена ієрархія класів наборів, дані бібліотеки VCL:

Для визначення набору даних необхідно задати такі властивості:

· для класу TTable - значення властивостей DatabaseName й TableName;

· для класу TQuery - значення властивості SQL й, можливо, властивості DatabaseName.

Для того, щоб читати дані з таблиць або записувати їх у таблиці, набір даних попередньо повинен бути відкритий. Відкрити набір даних можна одним із наступних способів: установити значення властивості Active набору даних рівним True під час виконання додатка (наприклад, Table1.Active:= True;) або в режимі проектування в інспекторі об'єктів; викликати метод Open (наприклад, Table1.Open;).

Аналогічно закрити набір даних можна викликом методу Close або встановивши значення властивості Active таким, що дорівнює False. Для компонента типу TQuery метод Open може бути виконаний тільки для закритого набору даних: спроба відкрити вже відкритий набір даних ініціює помилку.

Відкриття набору даних спричиняє: ініціацію подій BeforeOpen й AfterOpen; установку стану набору даних у dsBrowse; відкриття курсору для набору даних. Якщо в момент відкриття набору даних відбулася помилка, то стан набору даних установлюється в dsInactive, а курсор закривається.

При роботі з компонентами наборів даних можна обійтися без явного використання компонентів, які реалізують з'єднання з БД. Однак деякі можливості, такі як керування транзакціями або кешировані відновлення, неможливі без компонентів типу TDatabase або TADOConnection. Компонент "БД" TDatabase застосовується для з'єднання із джерелом даних через драйвери BDE або зовнішні ODBC-драйвери. Компонент TADOConnection використовується для створення об'єкта "з'єднання" при доступі через OLE DB, що інкапсулюються за допомогою ADO-об'єктів VCL-бібліотеки.

За замовчуванням при переході від одного запису набору даних до іншої відбувається запис всіх зроблених змін у БД. Для того, щоб можна було скасовувати зроблені зміни або виконувати відновлення декількох записів, застосовують кешировані відновлення. Вони дозволяють значно знизити мережний трафік за рахунок того, що всі зроблені зміни зберігаються у внутрішньому кеші й при переході від одного запису до іншого інформація у БД не передається. Щоб включити режим кешированого відновлення, необхідно встановити значення властивості CachedUpdates таким, що дорівнює True для компонента набору даних. Для присвоєння кешированного відновлення викликається метод ApplyUpdates, а для скасування - CancelUpdates.

3.3.3 Класи бібліотеки VCL

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

· Active - властивість, що визначає, чи відкритий набір даних;

· CurrentRecord - властивість, що визначає номер поточного запису набору даних;

· DataSource - властивість, що вказує батьківську таблицю (для таблиць, зв'язаних відношенням батьківська - дочірня);

· Bof - властивість, що визначає, чи перебуває курсор на першому записі набору даних;

· Eof - властивість, що визначає, чи досягнуть кінець набору даних;

· FieldCount - властивість, що вказує кількість полів у наборі даних;

· Bookmark - властивість, що вказує поточну закладку в наборі даних. Закладка відзначає позицію в наборі даних. Використовуючи методи TDataSet.GetBookmark й TDataSet.GotoBookmark, додаток може запам'ятовувати й швидко переходити на потрібну позицію в наборі даних;

· Fields - властивість, що представляє собою масив полів набору даних і використовуване для доступу до цих полів. Властивість Fields дозволяє одержати ім'я поля в поточній структурі запису:

var S: String; begin

S := Fields[0].FieldName;// Ім'я першого поля S := Fields[1].FieldName;// Ім'я другого поля

...

end;

записати в змінну значення поля.

var s: String; i: Integer; d: TDateTime; s := Fields[0].AsString; i := Fields[0].AsInteger; d := Fields[0].AsDate;

· Filter - властивість, в яку заноситься рядок, що визначає фільтр для набору даних.

Фільтр визначає умова, якій повинні задовольняти доступні записи.

Визначення фільтра повинне задовольняти таким правилам:

фільтр складається з умов для полів набору даних, об'єднаних логічними операціями

AND й OR. Наприклад: F2 > 10 AND F2 <50; якщо ім'я поля містить пробіли, то воно повинне бути укладене у квадратні дужки або

подвійні лапки. Наприклад: [Field Name1] > 50;

Filtered - властивість, що вказує, чи використовується фільтр, заданий властивістю

Filter;

Found - властивість, що визначає, чи успішно виконаний пошук методами FindFirst,

FindLast, FindNext або FindPrior;

Modified - властивість, що визначає, чи був змінений активний запис;

RecordCount - властивість, що містить загальне число записів у наборі даних;

· State - властивість, що вказує поточний стан набору даних. Ця властивість може приймати такі значення:

dsInactive - набір даних закритий; dsBrowse - дані доступні тільки для перегляду; dsEdi - можна змінювати активний запис;

dsInsert - активним записом є новий запис доти, поки не буде збережена; dsSetKey - перегляд обмеженої безлічі записів (SetRange) або пошук запису; dsCalcFields - виконується оброблювач події OnCalcFields; dsFilter - виконується оброблювач події OnFilterRecord; dsOpening - набір даних перебуває в процесі відкриття. · Append - метод, що додає в кінець набору даних новий запис;

· Delete - метод, що видаляє поточний запис із БД. Якщо в момент видалення запису набір даних перебуває в неактивному стані, то ініціюється виключення;

· Edit - метод, що переводить поточний запис у режим редагування;

· Cancel - метод, що скасовує зміни, зроблені в поточному записі;

· Post - метод, що виконує внесення змін у БД;

· Refresh - метод, що виконує відновлення результуючого набору шляхом повторного добування даних із БД;

· Insert - метод, що вставляє в набір даних новий запис;

· InsertRecord - метод, що вставляє в набір даних новий запис зі значеннями, які зазначені параметрами методу;

· Close - метод, що закриває набір даних;

· Open - метод, що відкриває набір даних;

· First - метод, що встановлює курсор на перший запис набору даних і робить цей запис активним;

· Last - метод, що встановлює курсор на останній запис набору даних і робить цей запис активним;

· Next - метод, що переміщає курсор на наступний запис набору даних і робить цей запис активним;

· Prior - метод, що переміщає курсор на попередній запис набору даних і робить цей запис активним.

Клас TDATASOURCE реалізує зв'язок між компонентами - наборами даних й елементами керування, які використовуються для відображення даних.

При побудові відношення між таблицями "батьківська-дочірня" компонентів "джерело даних" служить для зв'язування наборів даних, указуючи батьківський набір даних.

Клас TDataSource містить набір властивостей і методів, що використовуються для доступу до набору даних, включаючи наступні:

· AutoEdit - властивість, що визначає, чи буде автоматично викликатися метод Edit набору даних при одержанні фокуса елементом керування, асоційованим із джерелом даних;

· DataSet - властивість, що вказує на використовуваний набір даних.

Змінюючи значення властивості DataSet під час виконання, можна ефективно перемикатися на роботу з різними наборами даних, відображаючи різні набори даних у тих самих елементах керування.

DataSource.DataSet := Table1;.

· Enabled - властивість, що визначає, чи буде елемент керування відображати асоційовані з ним дані, або буде відображатися порожнім;

· State - властивість, що дозволяє визначити стан використовуваного набору даних.

if DataSource1.Dataset <> nil then

//Кнопка доступна тільки в тому випадку, якщо набір

//даних перебуває в стані редагування

//або вставки нового запису

BtnPost1.Enabled := DataSource1.State in [dsEdit, dsInsert];

Клас TTABLE використовується для доступу до БД за допомогою визначення джерела даних DSN й імені таблиці БД. При цьому допускається вибір всіх полів таблиці або тільки частини полів, а також завдання фільтра, що визначає, які рядки таблиці будуть доступні.

Компоненти типу TTable можуть використовувати всі властивості й методи, наслідувані від класу TDataSet, а також властивості й методи класу TTable для набору даних, включаючи такі:

· DatabaseName - властивість, що визначає ім'я джерела даних DSN;

· CanModify - властивість, що визначає, чи може додаток виконувати вставку, редагування й видалення записів у таблиці;

· DefaultIndex - властивість, що визначає, чи повинні дані в таблиці бути впорядковані при її відкритті. Якщо значення властивості дорівнює True (за замовчуванням), то виконується впорядкування за первинним ключем або унікальним індексом;

· IndexName - властивість, що дозволяє визначити вторинний індекс,

використовуваний для сортування набору даних, які відкриваються;

· Exclusive - властивість, що дозволяє встановити винятковий режим доступу до таблиці (значення властивості повинне бути визначене до відкриття таблиці);

· MasterSource - властивість, що визначає ім'я компонента "джерело даних" батьківської таблиці для встановлення відносини між таблицями "батьківська-дочірня";

· MasterFields - властивість, що визначає одне або кілька полів із батьківської таблиці, службовців для зв'язку з відповідними полями даної дочірньої таблиці (це задає відношення між батьківською й дочірньою таблицями. Поля в списку розділяються крапкою з комою);

· ReadOnly - властивість, що дозволяє встановити для таблиці режим доступу "тільки для читання";

· TableName - властивість, що вказує використовувану таблицю БД;

· RecNo - властивість, що вказує номер поточного запису набору даних;

· FindKey - метод, що виконує пошук значення або значень, перерахованих у списку, для ключового поля;