yandex rtb 1
ГоловнаЗворотній зв'язок
yande share

Організація баз даних і знань

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 - метод, що виконує пошук значення або значень, перерахованих у списку, для ключового поля;

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

·      Locate - метод, який використовується для пошуку першого входження значення зазначеного поля або набору полів (якщо запис знайдений, то вона стає поточною).

Клас TQUERY дозволяє виконувати будь-який SQL-оператор, припустимий по синтаксису ODBC-драйвером. Якщо використовується SQL-оператор SELECT, то компонент повертає набір даних (результуючий набір). На відміну від класу Ttable, клас TQuery дозволяє створювати набори даних з декількох таблиць, а також обмежувати одержуваний набір даних певними умовами. Це скасовує необхідність добування всіх записів таблиці в набір даних, що, у свою чергу, заощаджує пам'ять, скорочує мережний трафік для вилучених БД і зменшує час доступу.

Для визначення набору даних TQuery варто встановити значення властивості SQL й, можливо, властивості DatabaseName (властивість DatabaseName визначає ім'я джерела даних, але для деяких БД можна задати повне ім'я таблиці, що включає місце розміщенння файлу, у тексті SQL-оператора, - у цьому випадку властивість DatabaseName не використовується). Найбільш правильним підходом все-таки варто вважати той, при якому ім'я DSN джерела даних указується властивістю DatabaseName, а в SQL-операторі визначається тільки ім'я таблиці без визначення її місця розміщення.

За замовчуванням набір даних, сформований компонентом типу TQuery, не редагується. Для того, щоб значення в створеному наборі даних можна було редагувати, необхідно виконати одне з таких дій:

зв'язати компонент TQuery з компонентом типу TUpdateSQL (наприклад: Query1. Query1.UpdateObject:= UpdateSQL1;) і визначити для останнього значення властивості ModifySQL (наприклад: update TBL1 set F1 = :F1, F2 = :F2 where F3 = :OLD_F3);

установити значення властивості RequestLive таким, що дорівнює True (підтримка цієї можливості залежить від використовуваної БД).

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

·      DataSource - властивість, що дозволяє вказати батьківський набір даних (для відношення "батьківський-дочірній").

Наприклад, якщо властивість SQL містить значення 'SELECT * FROM Tbl1 t WHERE (t.FNo = :FNo)', те значення змінного зв'язку :FNo буде визначатися із джерела даних, зазначеного властивістю DataSource.

·      Params - властивість, що містить список параметрів для SQL-оператора.

·      RequestLive - властивість, що визначає, чи буде можливість редагувати створюваний набір даних (можливість одержання що модифікує результуючого набору залежить від використовуваного SQL-сервера);

·      SQL - властивість, що містить текст SQL-оператора (для автоматичного формування SQL-оператора можна викликати з контекстного меню компонента TQuery діалог SQL Builder);

·      DatabaseName - властивість, що визначає ім'я джерела даних, які підключаються, (ім'я DSN джерела даних або ім'я, уведене класом типу TDatabase);

·      ExecSQL - метод, що виконує SQL-оператор, зазначений властивістю SQL (для SQL-оператора, що створює набір даних, замість ExecSQL використовується метод Open);

·      ExecSQL можна викликати для таких SQL-операторів, як INSERT, UPDATE, DELETE, CREATE TABLE і т.п.

Якщо перед викликом ExecSQL не був викликаний метод Prepare, то SQL-оператор буде одночасно й відкомпільований, і виконаний.

·      Prepare - метод, що виконує компіляцію SQL-оператора.

Виклик цього методу перед ExecSQL збільшує швидкість виконання запиту при багаторазовому повторенні викликів ExecSQL для того самого оператора (наприклад, параметризованого запиту). Це дозволяє відкомпілювати SQL-оператор тільки один раз, а потім багаторазово його виконувати.

Клас TSQLTABLE подає таблицю БД, доступну для клієнта як спрямований набір даних. Такий набір містить всі записи для полів, певних у класі TSQLTable. Об'єкт типу TSQLTable повинен бути пов'язаний з об'єктом типу TSQLConnection, що визначає з'єднання із джерелом даних. Для відображення такого набору даних не можна використовувати таблицю, тому що в клієнта відсутній кеш пам'яті для набору даних. Значення полів таблиці можна відображати компонентами типу TDBText або TDBEdit. Для переміщень по набору записів доступні тільки методи First й Next.

Після розміщення в модулі даних або на формі компонента треба виконати такі дії: установити значення властивості SQLConnection компонента TSQLTable, вибравши доданий раніше компонент типу TSQLConnection із пропонованого списку; визначити ім'я таблиці БД, використаної для побудови набору даних, визначивши властивість TableName компонента TSQLTable.

Клас TUPDATESQL дозволяє для наборів даних, створених з доступом "тільки для читання", підтримувати можливість їхнього відновлення за допомогою виконання SQL-оператора.

Клас TUpdateSQL реалізує такі властивості й методи:

·      DeleteSQL - властивість, що визначає SQL-оператор DELETE;

·      InsertSQL - властивість, що визначає SQL-оператор INSERT;

·      ModifySQL - властивість, що визначає SQL-оператор UPDATE;

·      ExecSQL - метод, що виконує один із заданих SQL-операторів (залежно від значення параметра, що вказується такими константами: ukDelete, ukInsert, ukModify).

Клас TDATABASE реалізує роботу з об'єктом "БД" і надає засоби контролю над з'єднанням з БД. Компонент типу TDatabase дозволяє управляти транзакціями.

Для роботи з компонентом TDatabase необхідно встановити значення властивостей AliasName й DatabaseName. Якщо значенням властивості AliasName зазначений DSN існуючого джерела даних, то розроблювач може сам визначити будь-який внутрішній (для додатка) псевдонім БД і задати його у властивості DatabaseName. У цьому випадку для будь-якого набору даних у списку значень властивості DatabaseName буде відображатися поряд з усіма доступними DSN джерелами даних і внутрішній псевдонім, заданий властивістю DatabaseName компонента TDatabase.

У тому випадку, якщо DSN не визначений, то властивість DatabaseName повинна містити повне ім'я файлу БД, а властивість DriverName - указувати використовуваний ODBC-драйвер.

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

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

·      InTransaction - властивість, що вказує, чи був виконаний для БД виклик методу StartTransaction;

·      ReadOnly - метод, що вказує, чи встановлений для з'єднання з БД доступ "тільки читання";

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

tiDirtyRead - транзакція може читати дані, які були змінені іншою транзакцією, але для яких не був виконаний виклик Commit (фіксація змін);

tiReadCommitted - дозволяє в одній транзакції читати фіксовані зміни, зроблені в базі даних іншою транзакцією;

tiRepeatableRead - істинність даних гарантується на увесь час читання, і транзакція не бачить ніяких змін, зроблених іншою транзакцією. Прочитаний запис залишається постійним, поки в ньому не будуть зроблені зміни усередині самої транзакції;

·      StartTransaction - метод, що відкриває нову транзакцію;

·      Commit - метод, що виконує фіксацію поточної транзакції;

·      Rollback - метод, що виконує відкіт поточної транзакції;

·      Execute - метод, що виконує зазначений параметром SQL-оператор, що не повертає результуючого набору.

Клас TADOCONNECTION забезпечує з'єднання з даними, доступ до яких реалізується через ADO-об'єкти. ADO-об'єкти дозволяють працювати з різними сховищами даних, які можуть і не бути SQL-операторами. Об'єкти типу TADOConnection використовують для доступу до даних OLE DB провайдери.

Компоненти TADOCommand й TADODataSet зв'язуються із джерелом даних за допомогою об'єкта TADOConnection, указуючи посилання на нього як значення властивості Connection.

Для ідентифікації з'єднання необхідно визначити значення властивості ConnectionString (рядок з'єднання) компонента TADOConnection, що може ґрунтуватися на вказівці: datalink-файлу; рядка з'єднання.

Якщо як значення властивості ConnectionString зазначене ім'я UDL-файлу, то настроювання з'єднання можна виконувати автономно від додатка (наприклад, указуючи ім'я БД Microsoft SQL Server на поточному ПК).

 

37