Донецкий техникум промышленной автоматики

Робота з Firebird і InterBase в Delphi. Частина 1. - OLE DB і ADO.NET драйвери для Firebird і InterBase

  1. Робота з Firebird і InterBase в Delphi. Частина 1. Дата публікації: 30.11.2008 Оновлене: 19.01.2018 Вступ. Доступ до InterBase і Firebird з Delphi
  2. компоненти dbGo
  3. Створення підключення TADOConnection
  4. Відображення даних через TADOTable
  5. компонент TADODataSet
  6. Передача змін в БД - технологія оновлюваних множин
  7. Клієнтські і серверні курсори
  8. Який провайдер вибрати?
  9. компонент TADOQuery
  10. SQL-запити з параметрами
  11. TADOStoredProc
  12. компонент TADOCommand
  13. Робота з транзакціями
  14. Корисні посилання
  15. Робота з Firebird і InterBase в Delphi. Частина 1.
  16. Вступ. Доступ до InterBase і Firebird з Delphi
  17. компоненти dbGo
  18. Створення підключення TADOConnection
  19. Відображення даних через TADOTable
  20. компонент TADODataSet
  21. Передача змін в БД - технологія оновлюваних множин
  22. Клієнтські і серверні курсори
  23. Який провайдер вибрати?
  24. компонент TADOQuery
  25. SQL-запити з параметрами
  26. TADOStoredProc
  27. компонент TADOCommand
  28. Робота з транзакціями
  29. Корисні посилання
  30. Робота з Firebird і InterBase в Delphi. Частина 1.
  31. Вступ. Доступ до InterBase і Firebird з Delphi
  32. компоненти dbGo
  33. Створення підключення TADOConnection
  34. Відображення даних через TADOTable
  35. компонент TADODataSet
  36. Передача змін в БД - технологія оновлюваних множин
  37. Клієнтські і серверні курсори
  38. Який провайдер вибрати?
  39. компонент TADOQuery
  40. SQL-запити з параметрами
  41. TADOStoredProc
  42. компонент TADOCommand
  43. Робота з транзакціями
  44. Корисні посилання

Робота з Firebird і InterBase в Delphi. Частина 1.

Дата публікації: 30.11.2008

Оновлене: 19.01.2018

Вступ. Доступ до InterBase і Firebird з Delphi

У Delphi cуществует кілька способів роботи з InterBase і Firebird . Мені відомі, як мінімум, 3 способи організації доступу до даних через IBProvider:

  • dbGo (ADO Express) компоненти, що працюють через бібліотеку ADO.
  • прямий доступ до COM-інтерфейсів ADO, минаючи компоненти dbGo.
  • прямий доступ до COM-інтерфейсів OLE DB за допомогою сторонніх VCL-компонент (OLE DB Direct / OLE DB Express).

компоненти dbGo

dbGo - це VCL-компоненти від Borland, що дозволяють працювати з бібліотекою ADO з Delphi і C ++ Builder звичним для цих засобів розробки способом. До Delphi 6 компоненти називалися ADOExpress.

Зовнішній вигляд панелі компонентів dbGo в Delphi (RAD Studio 2007):

Зовнішній вигляд панелі компонентів dbGo в Delphi (RAD Studio 2007):

Склад dbGo-компонентів:

  • Компонент TADOConnection - підключення до бази даних.
  • Компонент TADODataSet - базовий набір даних. TADODataSet дозволяє завантажувати дані таблиць, збережених процедур і довільних SQL запитів і передавати зміни назад в БД. Важливою умовою є те, що вираз вказане в CommandText, обов'язково має повертати набір даних. TADODataSet відповідає об'єкту ADODB.Recordset.
  • Компонент TADOTable є спрощеними варіантом TADODataSet. Він дозволяє завантажувати в пам'ять цілі таблиці.
  • Компоненти TADOQuery і TADOStoredProc призначені для виконання довільних SQL-запитів і збережених процедур.
  • Компонент TADOCommand відповідають об'єктивним ADODB.Command. Фактично об'єднує в собі можливості трьох компонентів: TADOTable, TADOQuery, TADOStoredProc.

Створення підключення TADOConnection

Компонент TADOConnection здійснює з'єднання з сховищем даних. TADOConnection схожий на компонент TSQLConnection. Різниця між ними в тому, що при роботі з TSQLConnection параметри з'єднання встановлювалися за допомогою властивостей ConnectionName, DriverName і Params. У TADOConnection всі параметри підключення задаються через властивість ConnectionString. Крім того в якості рядка підключення в TADOConnection може бути вказано ім'я файлу з параметрами підключення.

Для зберігання параметрів підключення в Windows існує спеціальний тип файлів Microsoft Data Link - це файл з розширенням udl. З цим розширенням асоційований універсальний редактор підключень. IBProvider підтримує свої власні таби, які надають зручний інтерфейс для формування параметрів з'єднання. Для того щоб використовувати udl файл в своєму додатку виконайте наступні кроки:

  • Створіть порожній файл з розширенням .udl
  • Відкрийте файл (Enter), з'явиться пов'язаний з даними розширенням діалог для настройки підключення
  • У списку OleDb провайдерів виберете IBProvider v3:

  • Встановіть параметри підключення до БД і натисніть кнопку «Перевірити підключення». На малюнку задані наступні параметри:
    • Інтегрована аутентифікація Firebird 2.1;
    • Джерело - тестова БД localhost: employee.fdb. Підключення визначено без шляху, тому що БД прописана в файлі aliases.conf;
    • Режим автоматичного управління транзакціями: Включений;
    • Кодування: WIN1251 або інша кодування, підтримувана Firebird або InterBase ;

ПОРАДА
Завжди включайте в параметр Location мережеве ім'я комп'ютера на якому встановлено сервер Firebird або InterBase. Для локального підключення використовуйте localhost. Це дозволить забезпечити сумісність.

Тепер додайте на форму компонент TADOConnection. Задайте властивість: Login Promt = false і встановіть в якості рядка підключення ConnectionString створений рані файл підключення udl:


Детальна інформація про властивості ініціалізації IBProvider .

Відображення даних через TADOTable

Компонент TADOTable дозволяє завантажувати дані однієї таблиці.

  • Найстройте об'єкт TADOConnection:
    • Connected = true;
    • Login Promt = false;
  • Додайте на форму об'єкт TADOTable і налаштуйте його таким чином:
    • Connection = ADOConnection1;
    • TableName = ім'я таблиці з employee.fdb (CUSTOMER, EMPLOYEE, PROJECT і т.п.);
    • Active = true;
  • Додайте компонент TDataSource з вкладки Data Access. налаштування:
  • Додайте компонент TDBGrid з вкладки Data Controls. налаштування:
    • DataSource = DataSource1;

В результаті DBGrid відобразить даних тієї таблиці, яка була обрана в об'єкті TADOTable:

В результаті DBGrid відобразить даних тієї таблиці, яка була обрана в об'єкті TADOTable:

компонент TADODataSet

Компонент TADODataSet - це надбудова над об'єктом ADODB.Recordset. На відміну від TADOTable, TADODataSet може завантажувати не тільки таблиці, але і безлічі, які повертаються збереженими процедурами або SQL-запитами.

Перед початком роботи з TADODataSet встановіть властивість Connection = ADOConnection1. Альтернативний варіант - ця вказати рядок підключення у властивості ConnectionString. Але я настійно рекомендую для зберігання підключати окремий об'єкт TADOConnection.

У властивості CommandText вкажіть текст команди для завантаження даних. Текстом команди можуть бути:

  • SQL - запит. (Приклади: «SELECT * FROM EMPLOYEE», «EXEC ALL_LANGS» і т.д.). При цьому властивість CommandType = cmdText.
  • Ім'я таблиці. (Приклади: «EMPLOYEE», «CUSTOMER», «PROJECT»). CommandType = cmdTableDirect.
  • Ім'я процедури. (Приклад: «ALL_LANGS», «SHOW_LANGS»). CommandType = cmdStoredProc.

Команда в CommandText повинна повертати набір даних. Наприклад, в тексті не можна використовувати INSERT, DELETE або UPDATE, а так само вказувати збережені процедури, які не повертають набір даних (Recordset).

Перейдемо до практичного прикладу демонструє можливості Delphi при роботі c Firebird / InterBase:

  • Створимо простий редактор службовців на основі TADODataSet.
  • Переміщатися по записах будемо за допомогою компонента TDBNavigator.
  • Список службовців відобразимо в TDBGrid.
  • Для редагування деталей скористаємося контейнером TDBCtrlGrid в який помістимо TDBLabel, TDBText, TDBComboBox.

Закінчений приклад показаний на зображенні:

Закінчений приклад показаний на зображенні:

Далі я приведу послідовність дій для відтворення прикладу саммостоятельно:

  • Додайте на форму і налаштуйте компонент TADOConnection.
  • Додайте компонент TADODataSet і налаштуйте його таким чином:
    • CommandText = «select EMP_NO, FIRST_NAME, LAST_NAME, FULL_NAME, JOB_COUNTRY, DEPT_NO from EMPLOYEE»;
    • CommandType = cmdText;
    • Active = true;
  • Додайте компонент TDataSource з вкладки Data Access:
    • Встановіть властивість DataSet = ADODataSet1;
  • Додайте на форму 2 компонента c вкладки Data Controls: TDBNavigator і TDBCtrlGrid:
    • Кожному встановіть властивість DataSource = DataSource1;
    • У TDBCtrlGrid встановіть RowСount = 1;

TDBCtrlGrid - це компонент-контейнер. Він може відображати як одну так і декілька записів в залежності від значення властивості RowCount. Усередині нього розташовані компоненти для редагування даних.

TDBLabel - Нередагована поле. За допомогою цього компонента будемо відображати колонку FULL_NAME.

Для редагування полів FIRST_NAME, LAST_NAME додамо на форму 2 компонента TDBText, у яких встановимо властивість DataField.

Поле JOB_COUNTRY пов'язано зовнішнім ключем з таблицею COUNTRY. Для редактіванія цього поля використовуємо випадає TDBComboBox містить коди країн. Після установки поля DataField = JOB_COUNTRY, необхідно заповнити список даними з таблиці COUNTRY.

Крім описаних в прикладі, на вкладці Data Controls розташовані компоненти для редагування зображень (TDBImage), многострочного тексту (TDBMemo), відображення списків і т.д.

Передача змін в БД - технологія оновлюваних множин

IBProvider підтримує чудову можливість OLE DB - технологію оновлюваних множин. Завдяки цій технології, в наведеному прикладі не довелося прописувати в коді логіку передачі змін назад в БД. Всі зміни передавалися автоматично через оновлювані безлічі. На даний момент технологію оновлюваних множин підтримує тільки IBProvider v2. Будь ласка враховуйте це при виборі провайдера для підключення.

Клієнтські і серверні курсори

Для переміщення по записах IBProvider використовує курсори. Вони бувають серверні і клієнтські.

Клієнтський курсор - зберігається на стороні клієнта. Після виконання запиту все результуюче безліч завантажується в оперативну пам'ять або swap-файл драйвера. Це може викликати затримки при передачі великих обсягів даних, особливо по мережі. За замовчуванням в dbGo використовується саме клієнтський тип курсора. Це дає перевагу в швидкодії на невеликих обсягах даних. З клієнтськими курсором можуть працювати всі три провайдера зі складу IBPRovider Professional Edition.

Серверний курсор використовується при роботі з великими наборами даних, які невигідно пересилати клієнтові цілком. В результаті відразу після виконання запиту клієнта повертається курсор, а дані зчитуються в міру необхідності. Крім того реалізація IBProvider, дозволяє зчитувати BLOB-поля в міру звернення до них, а не при отриманні всієї записи. Це так само підвищує продуктивність, в разі якщо в одному записі міститься декілька BLOB-колонок з великими даними. У поточній реалізації серверний курсор можна використовувати тільки з IBProvider v1, тому що тільки він підтримує 4-х байтниє закладки, які використовуються в dbGo для роботи в режимі серверних курсорів. Новіші версії IBProvider використовують вже 8-байтниє закладки.

За тип курсору відповідає властивість CursorLocation. Воно може приймати значення clUseServer і clUseClient.

Який провайдер вибрати?

До складу IBProvider Professional входять три OLE DB провайдера, які надають розробникові різні можливості.

IBProvider v1 - на даний момент єдиний провайдер, що дозволяє працювати з dbGo компонентами в режимі серверних курсорів. Це пов'язано з обмеженим розміром закладок в dbGo = 4 байта. Ми вже запланували зробити IBProvider v3 сумісним з серверними курсором dbGo в Delphi і C ++ Builder. Як тільки це буде реалізовано, IBProvider v1 стане історією. Для використання провайдера, вкажіть в рядку підключення Provider = LCPI.IBProvider.1

IBProvider v2 підтримує технологію оновлюваних множин. Завдяки їм з'являється можливість передавати зміни назад в БД без явної вказівки текстів команд на вставку / видалення / оновлення. Провайдер самостійно генерує SQL-команди на підставі select-виразів. Приклад використання цієї технології я привів вище. Для використання провайдера, вкажіть в рядку підключення Provider = LCPI.IBProvider.2. У наших найближчих планах реалізувати підтримку оновлюваних множин в IBProvider v3.

IBProvider v3 найсучасніший і продуктивний з усіх провайдерів. Він володіє унікальним набором технологій, підтримує всі кодові сторінки, більш доступного режиму останніх версій серверів Firebird і InterBase, 64-бітові операційні системи і безліч інших корисних функцій. Якщо ви не плануєте використовувати оновлювані безлічі або серверні курсори однозначно вибирайте IBProvider v3. Для цього вкажіть в рядку підключення Provider = LCPI.IBProvider.3 або Provider = LCPI.IBProvider.

Якщо вам необхідно використовувати можливості всіх трьох драйверів в одному Delphi-додатку, то в якості тимчасового рішення, рекомендую використовувати три однакових підключення до БД з різними драйверами. Наприклад, всі основні операції пропускати через IBProvider v3, оновлювані безлічі через IBProvider v2, а кешувати дані через серверні курсори з IBProvider v1. Після того як оновлювані безлічі і підтримка серверних курсорів dbGo буде доступна в IBProvider v3 можна буде залишити тільки одне підключення.

компонент TADOQuery

Компонент TADOQuery призначений для виконання SQL-команд. Його можна розглядати, як аналог компонента TSQLQuery з dbExpress. Зв'язок з базою даних встановлюється через властивості Connection або ConnectionString. Текст запиту записується у властивість SQL. Якщо запит повертає набір даних, слід використовувати метод Open () або властивість Active = true. Якщо запит не повинен повертати набір даних, то його необхідно виконувати за допомогою методу ExecSQL. ExecSQL повертає число записів, які були оброблені під час виконання запиту. Це ж значення міститься у властивості RowsAffected.

SQL-запити з параметрами

Запити можуть бути параметризрвані. За допомогою параметрів команди можна задавати умови і передавати дані сервера БД. Існують два види параметрів: Іменовані і позиційні. За замовчуванням іменовані параметри в IBProvider задаються через двокрапку (:), a позиційні через знак питання (?).

Для демонстрації роботи компонента TADOQuery напишемо приклад, в якому розглянемо три варіанти його застосування:

  • Виконання запитів з іменованими параметрами. ExecSQL і RowsAffected.
  • Виконання запитів з позиційними параметрами. ExecSQL і RowsAffected.
  • Виконання запитів повертають безліч. Метод Open () або властивість Active.

Закінчений приклад показаний на картинці. Для вибірки безлічі, а так само для випонлненія операцій вставки / видалення використовується компонент TADOQuery:

Для вибірки безлічі, а так само для випонлненія операцій вставки / видалення використовується компонент TADOQuery:

Компоненти на формі пов'язані наступним чином: TADOQuery запрошує дані у БД, яка вказана в TADOConnection і передає їх в компонент-посередник TDataSource. TDBGrid вміє відображати дані, які завантажені в TDataSource. Виходить наступна схема взаємодії: ADOConnection-> ADOQuery-> DataSource (вкладка Data Access) -> DBGrid.

Розглянемо перший варіант використання TADOQuery - виконання запитів, які не повертають результуюче безліч:

// перехоплюємо всі помилки звернення до БД Firebird / InterBase з Delphi try // відкриваємо підключення Delphi Firebird ADOConnection1.Open (); ADOConnection1.BeginTrans (); // Позиційні параметри with ADOQuery1 do begin // текст запиту with SQL do begin Clear; Add ( 'DELETE FROM COUNTRY WHERE Country =? And Currency =?'); end; with Parameters do begin Clear; // варіант 1 AddParameter (). Value: = 'Turkey'; // варіант 2 AddParameter (); Items [1] .Value: = 'Lira'; end; // вставка запису ExecSQL (); Memo1.Lines.Add ( "ExecSQL. Affected Records: '+ IntToStr (ADOQuery1.RowsAffected)); end; // Іменовані параметри with ADOQuery1 do begin with SQL do begin Clear; Add ( 'INSERT INTO COUNTRY (country, currency) VALUES (: c1,: c2)'); end; // встановлюємо 2 параметра за раз Parameters.ParamValues ​​[ 'c1; c2']: = VarArrayOf ([ 'Turkey', 'Lira']); ExecSQL (); Memo1.Lines.Add ( "ExecSQL. Affected Records: '+ IntToStr (ADOQuery1.RowsAffected)); end; ADOConnection1.CommitTrans (); except on E: Exception do // відкатуємо транзакцію в разі помилки begin ADOConnection1.RollbackTrans (); ShowMessage (E.ClassName + 'db error:' + E.Message); end; end; // закриваємо підключення ADOConnection1.Close ();

У наведеному прикладі параметри команди встановлюються двома різними способами:

1. Одним словом за раз:

ADOQuery1.Parameters.ParamValues ​​[ 'c1; c2']: = VarArrayOf ([ 'Turkey', 'Lira']);

2. І кожен параметр окремо:

with Parameters do begin Clear; AddParameter (). Value: = 'Turkey'; AddParameter (); Items [1] .Value: = 'Lira'; end;

Для вибірки даних через TADOQuery використовується SQL-вираз, що містить команду SELECT, і метод Open ():

try // відкриваємо підключення Delphi InterBase ADOConnection1.Open (); ADOConnection1.BeginTrans (); with ADOQuery1 do begin // текст запиту with SQL do begin Clear; Add ( 'SELECT * FROM EMPLOYEE WHERE EMP_NO>?'); end; with Parameters do begin Clear; AddParameter (). Value: = '10'; end; // відкриваємо Recordset через метод Open (), // натомість так само можна встановити властивість Active = true Open (); end; ADOConnection1.CommitTrans (); except on E: Exception do // відкат транзакції в разі помилки begin ADOConnection1.RollbackTrans (); ShowMessage (E.ClassName + 'db error:' + E.Message); end; ADOConnection1.Close ();

TADOStoredProc

Компонент TADOStoredProc дозволяє виконувати збережені процедури InterBase і Firebird. Принцип роботи TADOStoredProc такий же як і у TADOQuery:

  • Підключення задається у властивості Connection або ConnectionString.
  • Метод Open () або властивість Active = true дозволяють отримати результуюче безліч.
  • Метод ExecSQL дозволяє виконати процедуру і повернути результат в наборі OUT-параметрів.

Єдині відмінністю є властивість ProcedureName в якому зазначається ім'я збереженої процедури. Властивість SQL в компоненті TADOStoredProc відсутня

Процедура може повертати результат двома способами:

  • у вигляді результуючого безлічі;
  • у вигляді вихідних OUT-параметрів;

Для отримання результуючого безлічі використовується оператор SELECT:

select * from stored_procedure_name (...)

Для виконання процедури, яка нічого не повертає або повертає OUT-параметри необхідно використовувати інструкцію exec:

exec procedure stored_procedure_name

компонент TADOCommand

TADOCommand - команда, яка передається серверу, для того щоб вважати або змінити дані. Компонент фактично об'єднує в собі можливості 3-х розглянутих компонентів: TADOTable, TADOQuery, TADOStoredProc.

Поведінка TADOCommand змінюється в залежності від властивості CommandType. Воно може набувати таких значень:

  • cmdText - текст команди містить SQL-запит. Поведінка аналогічно TADOQuery.
  • cmdStoredProc - у властивості CommandText задано ім'я процедури. Поведінка відповідає компоненту TADOStoredProc.
  • cmdTable і cmdTableDirect - означають, що в тексті зазначено ім'я таблиці, яку необхідно завантажити. Для Firebird і InterBase значення cmdTable і cmdTableDirect ідентичні. Відповідає TADOTable.

Робота з транзакціями

Механізми управління транзакціями в IBProvider однакові для всіх засобів розробки. Раніше я докладно расматривать транзакції в першій частині керівництва по роботі з InterBase і Firebird в ADO .Net . Рекомендую вам звернути увагу на наступні його глави:

  • Автоматичне управління транзакціями;
  • Рівні ізоляції транзакцій;
  • Іменовані точки збереження;
  • Commit Retain і Rollback Retain і Firebird;

Корисні посилання

Залиште свій коментар:Firebird delphi,InterBase Delphi,dbGo,ADO Express,Firebird OLE DB Direct / Express.

Дата публікації: 30.11.2008. Права на матеріал належать: IBProvider. При передруці посилання на сайт https://www.ibprovider.com/rus обов'язкове.

Робота з Firebird і InterBase в Delphi. Частина 1.

Дата публікації: 30.11.2008

Оновлене: 19.01.2018

Вступ. Доступ до InterBase і Firebird з Delphi

У Delphi cуществует кілька способів роботи з InterBase і Firebird . Мені відомі, як мінімум, 3 способи організації доступу до даних через IBProvider:

  • dbGo (ADO Express) компоненти, що працюють через бібліотеку ADO.
  • прямий доступ до COM-інтерфейсів ADO, минаючи компоненти dbGo.
  • прямий доступ до COM-інтерфейсів OLE DB за допомогою сторонніх VCL-компонент (OLE DB Direct / OLE DB Express).

компоненти dbGo

dbGo - це VCL-компоненти від Borland, що дозволяють працювати з бібліотекою ADO з Delphi і C ++ Builder звичним для цих засобів розробки способом. До Delphi 6 компоненти називалися ADOExpress.

Зовнішній вигляд панелі компонентів dbGo в Delphi (RAD Studio 2007):

Зовнішній вигляд панелі компонентів dbGo в Delphi (RAD Studio 2007):

Склад dbGo-компонентів:

  • Компонент TADOConnection - підключення до бази даних.
  • Компонент TADODataSet - базовий набір даних. TADODataSet дозволяє завантажувати дані таблиць, збережених процедур і довільних SQL запитів і передавати зміни назад в БД. Важливою умовою є те, що вираз вказане в CommandText, обов'язково має повертати набір даних. TADODataSet відповідає об'єкту ADODB.Recordset.
  • Компонент TADOTable є спрощеними варіантом TADODataSet. Він дозволяє завантажувати в пам'ять цілі таблиці.
  • Компоненти TADOQuery і TADOStoredProc призначені для виконання довільних SQL-запитів і збережених процедур.
  • Компонент TADOCommand відповідають об'єктивним ADODB.Command. Фактично об'єднує в собі можливості трьох компонентів: TADOTable, TADOQuery, TADOStoredProc.

Створення підключення TADOConnection

Компонент TADOConnection здійснює з'єднання з сховищем даних. TADOConnection схожий на компонент TSQLConnection. Різниця між ними в тому, що при роботі з TSQLConnection параметри з'єднання встановлювалися за допомогою властивостей ConnectionName, DriverName і Params. У TADOConnection всі параметри підключення задаються через властивість ConnectionString. Крім того в якості рядка підключення в TADOConnection може бути вказано ім'я файлу з параметрами підключення.

Для зберігання параметрів підключення в Windows існує спеціальний тип файлів Microsoft Data Link - це файл з розширенням udl. З цим розширенням асоційований універсальний редактор підключень. IBProvider підтримує свої власні таби, які надають зручний інтерфейс для формування параметрів з'єднання. Для того щоб використовувати udl файл в своєму додатку виконайте наступні кроки:

  • Створіть порожній файл з розширенням .udl
  • Відкрийте файл (Enter), з'явиться пов'язаний з даними розширенням діалог для настройки підключення
  • У списку OleDb провайдерів виберете IBProvider v3:

  • Встановіть параметри підключення до БД і натисніть кнопку «Перевірити підключення». На малюнку задані наступні параметри:
    • Інтегрована аутентифікація Firebird 2.1;
    • Джерело - тестова БД localhost: employee.fdb. Підключення визначено без шляху, тому що БД прописана в файлі aliases.conf;
    • Режим автоматичного управління транзакціями: Включений;
    • Кодування: WIN1251 або інша кодування, підтримувана Firebird або InterBase ;

ПОРАДА
Завжди включайте в параметр Location мережеве ім'я комп'ютера на якому встановлено сервер Firebird або InterBase. Для локального підключення використовуйте localhost. Це дозволить забезпечити сумісність.

Тепер додайте на форму компонент TADOConnection. Задайте властивість: Login Promt = false і встановіть в якості рядка підключення ConnectionString створений рані файл підключення udl:


Детальна інформація про властивості ініціалізації IBProvider .

Відображення даних через TADOTable

Компонент TADOTable дозволяє завантажувати дані однієї таблиці.

  • Найстройте об'єкт TADOConnection:
    • Connected = true;
    • Login Promt = false;
  • Додайте на форму об'єкт TADOTable і налаштуйте його таким чином:
    • Connection = ADOConnection1;
    • TableName = ім'я таблиці з employee.fdb (CUSTOMER, EMPLOYEE, PROJECT і т.п.);
    • Active = true;
  • Додайте компонент TDataSource з вкладки Data Access. налаштування:
  • Додайте компонент TDBGrid з вкладки Data Controls. налаштування:
    • DataSource = DataSource1;

В результаті DBGrid відобразить даних тієї таблиці, яка була обрана в об'єкті TADOTable:

В результаті DBGrid відобразить даних тієї таблиці, яка була обрана в об'єкті TADOTable:

компонент TADODataSet

Компонент TADODataSet - це надбудова над об'єктом ADODB.Recordset. На відміну від TADOTable, TADODataSet може завантажувати не тільки таблиці, але і безлічі, які повертаються збереженими процедурами або SQL-запитами.

Перед початком роботи з TADODataSet встановіть властивість Connection = ADOConnection1. Альтернативний варіант - ця вказати рядок підключення у властивості ConnectionString. Але я настійно рекомендую для зберігання підключати окремий об'єкт TADOConnection.

У властивості CommandText вкажіть текст команди для завантаження даних. Текстом команди можуть бути:

  • SQL - запит. (Приклади: «SELECT * FROM EMPLOYEE», «EXEC ALL_LANGS» і т.д.). При цьому властивість CommandType = cmdText.
  • Ім'я таблиці. (Приклади: «EMPLOYEE», «CUSTOMER», «PROJECT»). CommandType = cmdTableDirect.
  • Ім'я процедури. (Приклад: «ALL_LANGS», «SHOW_LANGS»). CommandType = cmdStoredProc.

Команда в CommandText повинна повертати набір даних. Наприклад, в тексті не можна використовувати INSERT, DELETE або UPDATE, а так само вказувати збережені процедури, які не повертають набір даних (Recordset).

Перейдемо до практичного прикладу демонструє можливості Delphi при роботі c Firebird / InterBase:

  • Створимо простий редактор службовців на основі TADODataSet.
  • Переміщатися по записах будемо за допомогою компонента TDBNavigator.
  • Список службовців відобразимо в TDBGrid.
  • Для редагування деталей скористаємося контейнером TDBCtrlGrid в який помістимо TDBLabel, TDBText, TDBComboBox.

Закінчений приклад показаний на зображенні:

Закінчений приклад показаний на зображенні:

Далі я приведу послідовність дій для відтворення прикладу саммостоятельно:

  • Додайте на форму і налаштуйте компонент TADOConnection.
  • Додайте компонент TADODataSet і налаштуйте його таким чином:
    • CommandText = «select EMP_NO, FIRST_NAME, LAST_NAME, FULL_NAME, JOB_COUNTRY, DEPT_NO from EMPLOYEE»;
    • CommandType = cmdText;
    • Active = true;
  • Додайте компонент TDataSource з вкладки Data Access:
    • Встановіть властивість DataSet = ADODataSet1;
  • Додайте на форму 2 компонента c вкладки Data Controls: TDBNavigator і TDBCtrlGrid:
    • Кожному встановіть властивість DataSource = DataSource1;
    • У TDBCtrlGrid встановіть RowСount = 1;

TDBCtrlGrid - це компонент-контейнер. Він може відображати як одну так і декілька записів в залежності від значення властивості RowCount. Усередині нього розташовані компоненти для редагування даних.

TDBLabel - Нередагована поле. За допомогою цього компонента будемо відображати колонку FULL_NAME.

Для редагування полів FIRST_NAME, LAST_NAME додамо на форму 2 компонента TDBText, у яких встановимо властивість DataField.

Поле JOB_COUNTRY пов'язано зовнішнім ключем з таблицею COUNTRY. Для редактіванія цього поля використовуємо випадає TDBComboBox містить коди країн. Після установки поля DataField = JOB_COUNTRY, необхідно заповнити список даними з таблиці COUNTRY.

Крім описаних в прикладі, на вкладці Data Controls розташовані компоненти для редагування зображень (TDBImage), многострочного тексту (TDBMemo), відображення списків і т.д.

Передача змін в БД - технологія оновлюваних множин

IBProvider підтримує чудову можливість OLE DB - технологію оновлюваних множин. Завдяки цій технології, в наведеному прикладі не довелося прописувати в коді логіку передачі змін назад в БД. Всі зміни передавалися автоматично через оновлювані безлічі. На даний момент технологію оновлюваних множин підтримує тільки IBProvider v2. Будь ласка враховуйте це при виборі провайдера для підключення.

Клієнтські і серверні курсори

Для переміщення по записах IBProvider використовує курсори. Вони бувають серверні і клієнтські.

Клієнтський курсор - зберігається на стороні клієнта. Після виконання запиту все результуюче безліч завантажується в оперативну пам'ять або swap-файл драйвера. Це може викликати затримки при передачі великих обсягів даних, особливо по мережі. За замовчуванням в dbGo використовується саме клієнтський тип курсора. Це дає перевагу в швидкодії на невеликих обсягах даних. З клієнтськими курсором можуть працювати всі три провайдера зі складу IBPRovider Professional Edition.

Серверний курсор використовується при роботі з великими наборами даних, які невигідно пересилати клієнтові цілком. В результаті відразу після виконання запиту клієнта повертається курсор, а дані зчитуються в міру необхідності. Крім того реалізація IBProvider, дозволяє зчитувати BLOB-поля в міру звернення до них, а не при отриманні всієї записи. Це так само підвищує продуктивність, в разі якщо в одному записі міститься декілька BLOB-колонок з великими даними. У поточній реалізації серверний курсор можна використовувати тільки з IBProvider v1, тому що тільки він підтримує 4-х байтниє закладки, які використовуються в dbGo для роботи в режимі серверних курсорів. Новіші версії IBProvider використовують вже 8-байтниє закладки.

За тип курсору відповідає властивість CursorLocation. Воно може приймати значення clUseServer і clUseClient.

Який провайдер вибрати?

До складу IBProvider Professional входять три OLE DB провайдера, які надають розробникові різні можливості.

IBProvider v1 - на даний момент єдиний провайдер, що дозволяє працювати з dbGo компонентами в режимі серверних курсорів. Це пов'язано з обмеженим розміром закладок в dbGo = 4 байта. Ми вже запланували зробити IBProvider v3 сумісним з серверними курсором dbGo в Delphi і C ++ Builder. Як тільки це буде реалізовано, IBProvider v1 стане історією. Для використання провайдера, вкажіть в рядку підключення Provider = LCPI.IBProvider.1

IBProvider v2 підтримує технологію оновлюваних множин. Завдяки їм з'являється можливість передавати зміни назад в БД без явної вказівки текстів команд на вставку / видалення / оновлення. Провайдер самостійно генерує SQL-команди на підставі select-виразів. Приклад використання цієї технології я привів вище. Для використання провайдера, вкажіть в рядку підключення Provider = LCPI.IBProvider.2. У наших найближчих планах реалізувати підтримку оновлюваних множин в IBProvider v3.

IBProvider v3 найсучасніший і продуктивний з усіх провайдерів. Він володіє унікальним набором технологій, підтримує всі кодові сторінки, більш доступного режиму останніх версій серверів Firebird і InterBase, 64-бітові операційні системи і безліч інших корисних функцій. Якщо ви не плануєте використовувати оновлювані безлічі або серверні курсори однозначно вибирайте IBProvider v3. Для цього вкажіть в рядку підключення Provider = LCPI.IBProvider.3 або Provider = LCPI.IBProvider.

Якщо вам необхідно використовувати можливості всіх трьох драйверів в одному Delphi-додатку, то в якості тимчасового рішення, рекомендую використовувати три однакових підключення до БД з різними драйверами. Наприклад, всі основні операції пропускати через IBProvider v3, оновлювані безлічі через IBProvider v2, а кешувати дані через серверні курсори з IBProvider v1. Після того як оновлювані безлічі і підтримка серверних курсорів dbGo буде доступна в IBProvider v3 можна буде залишити тільки одне підключення.

компонент TADOQuery

Компонент TADOQuery призначений для виконання SQL-команд. Його можна розглядати, як аналог компонента TSQLQuery з dbExpress. Зв'язок з базою даних встановлюється через властивості Connection або ConnectionString. Текст запиту записується у властивість SQL. Якщо запит повертає набір даних, слід використовувати метод Open () або властивість Active = true. Якщо запит не повинен повертати набір даних, то його необхідно виконувати за допомогою методу ExecSQL. ExecSQL повертає число записів, які були оброблені під час виконання запиту. Це ж значення міститься у властивості RowsAffected.

SQL-запити з параметрами

Запити можуть бути параметризрвані. За допомогою параметрів команди можна задавати умови і передавати дані сервера БД. Існують два види параметрів: Іменовані і позиційні. За замовчуванням іменовані параметри в IBProvider задаються через двокрапку (:), a позиційні через знак питання (?).

Для демонстрації роботи компонента TADOQuery напишемо приклад, в якому розглянемо три варіанти його застосування:

  • Виконання запитів з іменованими параметрами. ExecSQL і RowsAffected.
  • Виконання запитів з позиційними параметрами. ExecSQL і RowsAffected.
  • Виконання запитів повертають безліч. Метод Open () або властивість Active.

Закінчений приклад показаний на картинці. Для вибірки безлічі, а так само для випонлненія операцій вставки / видалення використовується компонент TADOQuery:

Для вибірки безлічі, а так само для випонлненія операцій вставки / видалення використовується компонент TADOQuery:

Компоненти на формі пов'язані наступним чином: TADOQuery запрошує дані у БД, яка вказана в TADOConnection і передає їх в компонент-посередник TDataSource. TDBGrid вміє відображати дані, які завантажені в TDataSource. Виходить наступна схема взаємодії: ADOConnection-> ADOQuery-> DataSource (вкладка Data Access) -> DBGrid.

Розглянемо перший варіант використання TADOQuery - виконання запитів, які не повертають результуюче безліч:

// перехоплюємо всі помилки звернення до БД Firebird / InterBase з Delphi try // відкриваємо підключення Delphi Firebird ADOConnection1.Open (); ADOConnection1.BeginTrans (); // Позиційні параметри with ADOQuery1 do begin // текст запиту with SQL do begin Clear; Add ( 'DELETE FROM COUNTRY WHERE Country =? And Currency =?'); end; with Parameters do begin Clear; // варіант 1 AddParameter (). Value: = 'Turkey'; // варіант 2 AddParameter (); Items [1] .Value: = 'Lira'; end; // вставка запису ExecSQL (); Memo1.Lines.Add ( "ExecSQL. Affected Records: '+ IntToStr (ADOQuery1.RowsAffected)); end; // Іменовані параметри with ADOQuery1 do begin with SQL do begin Clear; Add ( 'INSERT INTO COUNTRY (country, currency) VALUES (: c1,: c2)'); end; // встановлюємо 2 параметра за раз Parameters.ParamValues ​​[ 'c1; c2']: = VarArrayOf ([ 'Turkey', 'Lira']); ExecSQL (); Memo1.Lines.Add ( "ExecSQL. Affected Records: '+ IntToStr (ADOQuery1.RowsAffected)); end; ADOConnection1.CommitTrans (); except on E: Exception do // відкатуємо транзакцію в разі помилки begin ADOConnection1.RollbackTrans (); ShowMessage (E.ClassName + 'db error:' + E.Message); end; end; // закриваємо підключення ADOConnection1.Close ();

У наведеному прикладі параметри команди встановлюються двома різними способами:

1. Одним словом за раз:

ADOQuery1.Parameters.ParamValues ​​[ 'c1; c2']: = VarArrayOf ([ 'Turkey', 'Lira']);

2. І кожен параметр окремо:

with Parameters do begin Clear; AddParameter (). Value: = 'Turkey'; AddParameter (); Items [1] .Value: = 'Lira'; end;

Для вибірки даних через TADOQuery використовується SQL-вираз, що містить команду SELECT, і метод Open ():

try // відкриваємо підключення Delphi InterBase ADOConnection1.Open (); ADOConnection1.BeginTrans (); with ADOQuery1 do begin // текст запиту with SQL do begin Clear; Add ( 'SELECT * FROM EMPLOYEE WHERE EMP_NO>?'); end; with Parameters do begin Clear; AddParameter (). Value: = '10'; end; // відкриваємо Recordset через метод Open (), // натомість так само можна встановити властивість Active = true Open (); end; ADOConnection1.CommitTrans (); except on E: Exception do // відкат транзакції в разі помилки begin ADOConnection1.RollbackTrans (); ShowMessage (E.ClassName + 'db error:' + E.Message); end; ADOConnection1.Close ();

TADOStoredProc

Компонент TADOStoredProc дозволяє виконувати збережені процедури InterBase і Firebird. Принцип роботи TADOStoredProc такий же як і у TADOQuery:

  • Підключення задається у властивості Connection або ConnectionString.
  • Метод Open () або властивість Active = true дозволяють отримати результуюче безліч.
  • Метод ExecSQL дозволяє виконати процедуру і повернути результат в наборі OUT-параметрів.

Єдині відмінністю є властивість ProcedureName в якому зазначається ім'я збереженої процедури. Властивість SQL в компоненті TADOStoredProc відсутня

Процедура може повертати результат двома способами:

  • у вигляді результуючого безлічі;
  • у вигляді вихідних OUT-параметрів;

Для отримання результуючого безлічі використовується оператор SELECT:

select * from stored_procedure_name (...)

Для виконання процедури, яка нічого не повертає або повертає OUT-параметри необхідно використовувати інструкцію exec:

exec procedure stored_procedure_name

компонент TADOCommand

TADOCommand - команда, яка передається серверу, для того щоб вважати або змінити дані. Компонент фактично об'єднує в собі можливості 3-х розглянутих компонентів: TADOTable, TADOQuery, TADOStoredProc.

Поведінка TADOCommand змінюється в залежності від властивості CommandType. Воно може набувати таких значень:

  • cmdText - текст команди містить SQL-запит. Поведінка аналогічно TADOQuery.
  • cmdStoredProc - у властивості CommandText задано ім'я процедури. Поведінка відповідає компоненту TADOStoredProc.
  • cmdTable і cmdTableDirect - означають, що в тексті зазначено ім'я таблиці, яку необхідно завантажити. Для Firebird і InterBase значення cmdTable і cmdTableDirect ідентичні. Відповідає TADOTable.

Робота з транзакціями

Механізми управління транзакціями в IBProvider однакові для всіх засобів розробки. Раніше я докладно расматривать транзакції в першій частині керівництва по роботі з InterBase і Firebird в ADO .Net . Рекомендую вам звернути увагу на наступні його глави:

  • Автоматичне управління транзакціями;
  • Рівні ізоляції транзакцій;
  • Іменовані точки збереження;
  • Commit Retain і Rollback Retain і Firebird;

Корисні посилання

Залиште свій коментар:Firebird delphi,InterBase Delphi,dbGo,ADO Express,Firebird OLE DB Direct / Express.

Дата публікації: 30.11.2008. Права на матеріал належать: IBProvider. При передруці посилання на сайт https://www.ibprovider.com/rus обов'язкове.

Робота з Firebird і InterBase в Delphi. Частина 1.

Дата публікації: 30.11.2008

Оновлене: 19.01.2018

Вступ. Доступ до InterBase і Firebird з Delphi

У Delphi cуществует кілька способів роботи з InterBase і Firebird . Мені відомі, як мінімум, 3 способи організації доступу до даних через IBProvider:

  • dbGo (ADO Express) компоненти, що працюють через бібліотеку ADO.
  • прямий доступ до COM-інтерфейсів ADO, минаючи компоненти dbGo.
  • прямий доступ до COM-інтерфейсів OLE DB за допомогою сторонніх VCL-компонент (OLE DB Direct / OLE DB Express).

компоненти dbGo

dbGo - це VCL-компоненти від Borland, що дозволяють працювати з бібліотекою ADO з Delphi і C ++ Builder звичним для цих засобів розробки способом. До Delphi 6 компоненти називалися ADOExpress.

Зовнішній вигляд панелі компонентів dbGo в Delphi (RAD Studio 2007):

Зовнішній вигляд панелі компонентів dbGo в Delphi (RAD Studio 2007):

Склад dbGo-компонентів:

  • Компонент TADOConnection - підключення до бази даних.
  • Компонент TADODataSet - базовий набір даних. TADODataSet дозволяє завантажувати дані таблиць, збережених процедур і довільних SQL запитів і передавати зміни назад в БД. Важливою умовою є те, що вираз вказане в CommandText, обов'язково має повертати набір даних. TADODataSet відповідає об'єкту ADODB.Recordset.
  • Компонент TADOTable є спрощеними варіантом TADODataSet. Він дозволяє завантажувати в пам'ять цілі таблиці.
  • Компоненти TADOQuery і TADOStoredProc призначені для виконання довільних SQL-запитів і збережених процедур.
  • Компонент TADOCommand відповідають об'єктивним ADODB.Command. Фактично об'єднує в собі можливості трьох компонентів: TADOTable, TADOQuery, TADOStoredProc.

Створення підключення TADOConnection

Компонент TADOConnection здійснює з'єднання з сховищем даних. TADOConnection схожий на компонент TSQLConnection. Різниця між ними в тому, що при роботі з TSQLConnection параметри з'єднання встановлювалися за допомогою властивостей ConnectionName, DriverName і Params. У TADOConnection всі параметри підключення задаються через властивість ConnectionString. Крім того в якості рядка підключення в TADOConnection може бути вказано ім'я файлу з параметрами підключення.

Для зберігання параметрів підключення в Windows існує спеціальний тип файлів Microsoft Data Link - це файл з розширенням udl. З цим розширенням асоційований універсальний редактор підключень. IBProvider підтримує свої власні таби, які надають зручний інтерфейс для формування параметрів з'єднання. Для того щоб використовувати udl файл в своєму додатку виконайте наступні кроки:

  • Створіть порожній файл з розширенням .udl
  • Відкрийте файл (Enter), з'явиться пов'язаний з даними розширенням діалог для настройки підключення
  • У списку OleDb провайдерів виберете IBProvider v3:

  • Встановіть параметри підключення до БД і натисніть кнопку «Перевірити підключення». На малюнку задані наступні параметри:
    • Інтегрована аутентифікація Firebird 2.1;
    • Джерело - тестова БД localhost: employee.fdb. Підключення визначено без шляху, тому що БД прописана в файлі aliases.conf;
    • Режим автоматичного управління транзакціями: Включений;
    • Кодування: WIN1251 або інша кодування, підтримувана Firebird або InterBase ;

ПОРАДА
Завжди включайте в параметр Location мережеве ім'я комп'ютера на якому встановлено сервер Firebird або InterBase. Для локального підключення використовуйте localhost. Це дозволить забезпечити сумісність.

Тепер додайте на форму компонент TADOConnection. Задайте властивість: Login Promt = false і встановіть в якості рядка підключення ConnectionString створений рані файл підключення udl:


Детальна інформація про властивості ініціалізації IBProvider .

Відображення даних через TADOTable

Компонент TADOTable дозволяє завантажувати дані однієї таблиці.

  • Найстройте об'єкт TADOConnection:
    • Connected = true;
    • Login Promt = false;
  • Додайте на форму об'єкт TADOTable і налаштуйте його таким чином:
    • Connection = ADOConnection1;
    • TableName = ім'я таблиці з employee.fdb (CUSTOMER, EMPLOYEE, PROJECT і т.п.);
    • Active = true;
  • Додайте компонент TDataSource з вкладки Data Access. налаштування:
  • Додайте компонент TDBGrid з вкладки Data Controls. налаштування:
    • DataSource = DataSource1;

В результаті DBGrid відобразить даних тієї таблиці, яка була обрана в об'єкті TADOTable:

В результаті DBGrid відобразить даних тієї таблиці, яка була обрана в об'єкті TADOTable:

компонент TADODataSet

Компонент TADODataSet - це надбудова над об'єктом ADODB.Recordset. На відміну від TADOTable, TADODataSet може завантажувати не тільки таблиці, але і безлічі, які повертаються збереженими процедурами або SQL-запитами.

Перед початком роботи з TADODataSet встановіть властивість Connection = ADOConnection1. Альтернативний варіант - ця вказати рядок підключення у властивості ConnectionString. Але я настійно рекомендую для зберігання підключати окремий об'єкт TADOConnection.

У властивості CommandText вкажіть текст команди для завантаження даних. Текстом команди можуть бути:

  • SQL - запит. (Приклади: «SELECT * FROM EMPLOYEE», «EXEC ALL_LANGS» і т.д.). При цьому властивість CommandType = cmdText.
  • Ім'я таблиці. (Приклади: «EMPLOYEE», «CUSTOMER», «PROJECT»). CommandType = cmdTableDirect.
  • Ім'я процедури. (Приклад: «ALL_LANGS», «SHOW_LANGS»). CommandType = cmdStoredProc.

Команда в CommandText повинна повертати набір даних. Наприклад, в тексті не можна використовувати INSERT, DELETE або UPDATE, а так само вказувати збережені процедури, які не повертають набір даних (Recordset).

Перейдемо до практичного прикладу демонструє можливості Delphi при роботі c Firebird / InterBase:

  • Створимо простий редактор службовців на основі TADODataSet.
  • Переміщатися по записах будемо за допомогою компонента TDBNavigator.
  • Список службовців відобразимо в TDBGrid.
  • Для редагування деталей скористаємося контейнером TDBCtrlGrid в який помістимо TDBLabel, TDBText, TDBComboBox.

Закінчений приклад показаний на зображенні:

Закінчений приклад показаний на зображенні:

Далі я приведу послідовність дій для відтворення прикладу саммостоятельно:

  • Додайте на форму і налаштуйте компонент TADOConnection.
  • Додайте компонент TADODataSet і налаштуйте його таким чином:
    • CommandText = «select EMP_NO, FIRST_NAME, LAST_NAME, FULL_NAME, JOB_COUNTRY, DEPT_NO from EMPLOYEE»;
    • CommandType = cmdText;
    • Active = true;
  • Додайте компонент TDataSource з вкладки Data Access:
    • Встановіть властивість DataSet = ADODataSet1;
  • Додайте на форму 2 компонента c вкладки Data Controls: TDBNavigator і TDBCtrlGrid:
    • Кожному встановіть властивість DataSource = DataSource1;
    • У TDBCtrlGrid встановіть RowСount = 1;

TDBCtrlGrid - це компонент-контейнер. Він може відображати як одну так і декілька записів в залежності від значення властивості RowCount. Усередині нього розташовані компоненти для редагування даних.

TDBLabel - Нередагована поле. За допомогою цього компонента будемо відображати колонку FULL_NAME.

Для редагування полів FIRST_NAME, LAST_NAME додамо на форму 2 компонента TDBText, у яких встановимо властивість DataField.

Поле JOB_COUNTRY пов'язано зовнішнім ключем з таблицею COUNTRY. Для редактіванія цього поля використовуємо випадає TDBComboBox містить коди країн. Після установки поля DataField = JOB_COUNTRY, необхідно заповнити список даними з таблиці COUNTRY.

Крім описаних в прикладі, на вкладці Data Controls розташовані компоненти для редагування зображень (TDBImage), многострочного тексту (TDBMemo), відображення списків і т.д.

Передача змін в БД - технологія оновлюваних множин

IBProvider підтримує чудову можливість OLE DB - технологію оновлюваних множин. Завдяки цій технології, в наведеному прикладі не довелося прописувати в коді логіку передачі змін назад в БД. Всі зміни передавалися автоматично через оновлювані безлічі. На даний момент технологію оновлюваних множин підтримує тільки IBProvider v2. Будь ласка враховуйте це при виборі провайдера для підключення.

Клієнтські і серверні курсори

Для переміщення по записах IBProvider використовує курсори. Вони бувають серверні і клієнтські.

Клієнтський курсор - зберігається на стороні клієнта. Після виконання запиту все результуюче безліч завантажується в оперативну пам'ять або swap-файл драйвера. Це може викликати затримки при передачі великих обсягів даних, особливо по мережі. За замовчуванням в dbGo використовується саме клієнтський тип курсора. Це дає перевагу в швидкодії на невеликих обсягах даних. З клієнтськими курсором можуть працювати всі три провайдера зі складу IBPRovider Professional Edition.

Серверний курсор використовується при роботі з великими наборами даних, які невигідно пересилати клієнтові цілком. В результаті відразу після виконання запиту клієнта повертається курсор, а дані зчитуються в міру необхідності. Крім того реалізація IBProvider, дозволяє зчитувати BLOB-поля в міру звернення до них, а не при отриманні всієї записи. Це так само підвищує продуктивність, в разі якщо в одному записі міститься декілька BLOB-колонок з великими даними. У поточній реалізації серверний курсор можна використовувати тільки з IBProvider v1, тому що тільки він підтримує 4-х байтниє закладки, які використовуються в dbGo для роботи в режимі серверних курсорів. Новіші версії IBProvider використовують вже 8-байтниє закладки.

За тип курсору відповідає властивість CursorLocation. Воно може приймати значення clUseServer і clUseClient.

Який провайдер вибрати?

До складу IBProvider Professional входять три OLE DB провайдера, які надають розробникові різні можливості.

IBProvider v1 - на даний момент єдиний провайдер, що дозволяє працювати з dbGo компонентами в режимі серверних курсорів. Це пов'язано з обмеженим розміром закладок в dbGo = 4 байта. Ми вже запланували зробити IBProvider v3 сумісним з серверними курсором dbGo в Delphi і C ++ Builder. Як тільки це буде реалізовано, IBProvider v1 стане історією. Для використання провайдера, вкажіть в рядку підключення Provider = LCPI.IBProvider.1

IBProvider v2 підтримує технологію оновлюваних множин. Завдяки їм з'являється можливість передавати зміни назад в БД без явної вказівки текстів команд на вставку / видалення / оновлення. Провайдер самостійно генерує SQL-команди на підставі select-виразів. Приклад використання цієї технології я привів вище. Для використання провайдера, вкажіть в рядку підключення Provider = LCPI.IBProvider.2. У наших найближчих планах реалізувати підтримку оновлюваних множин в IBProvider v3.

IBProvider v3 найсучасніший і продуктивний з усіх провайдерів. Він володіє унікальним набором технологій, підтримує всі кодові сторінки, більш доступного режиму останніх версій серверів Firebird і InterBase, 64-бітові операційні системи і безліч інших корисних функцій. Якщо ви не плануєте використовувати оновлювані безлічі або серверні курсори однозначно вибирайте IBProvider v3. Для цього вкажіть в рядку підключення Provider = LCPI.IBProvider.3 або Provider = LCPI.IBProvider.

Якщо вам необхідно використовувати можливості всіх трьох драйверів в одному Delphi-додатку, то в якості тимчасового рішення, рекомендую використовувати три однакових підключення до БД з різними драйверами. Наприклад, всі основні операції пропускати через IBProvider v3, оновлювані безлічі через IBProvider v2, а кешувати дані через серверні курсори з IBProvider v1. Після того як оновлювані безлічі і підтримка серверних курсорів dbGo буде доступна в IBProvider v3 можна буде залишити тільки одне підключення.

компонент TADOQuery

Компонент TADOQuery призначений для виконання SQL-команд. Його можна розглядати, як аналог компонента TSQLQuery з dbExpress. Зв'язок з базою даних встановлюється через властивості Connection або ConnectionString. Текст запиту записується у властивість SQL. Якщо запит повертає набір даних, слід використовувати метод Open () або властивість Active = true. Якщо запит не повинен повертати набір даних, то його необхідно виконувати за допомогою методу ExecSQL. ExecSQL повертає число записів, які були оброблені під час виконання запиту. Це ж значення міститься у властивості RowsAffected.

SQL-запити з параметрами

Запити можуть бути параметризрвані. За допомогою параметрів команди можна задавати умови і передавати дані сервера БД. Існують два види параметрів: Іменовані і позиційні. За замовчуванням іменовані параметри в IBProvider задаються через двокрапку (:), a позиційні через знак питання (?).

Для демонстрації роботи компонента TADOQuery напишемо приклад, в якому розглянемо три варіанти його застосування:

  • Виконання запитів з іменованими параметрами. ExecSQL і RowsAffected.
  • Виконання запитів з позиційними параметрами. ExecSQL і RowsAffected.
  • Виконання запитів повертають безліч. Метод Open () або властивість Active.

Закінчений приклад показаний на картинці. Для вибірки безлічі, а так само для випонлненія операцій вставки / видалення використовується компонент TADOQuery:

Для вибірки безлічі, а так само для випонлненія операцій вставки / видалення використовується компонент TADOQuery:

Компоненти на формі пов'язані наступним чином: TADOQuery запрошує дані у БД, яка вказана в TADOConnection і передає їх в компонент-посередник TDataSource. TDBGrid вміє відображати дані, які завантажені в TDataSource. Виходить наступна схема взаємодії: ADOConnection-> ADOQuery-> DataSource (вкладка Data Access) -> DBGrid.

Розглянемо перший варіант використання TADOQuery - виконання запитів, які не повертають результуюче безліч:

// перехоплюємо всі помилки звернення до БД Firebird / InterBase з Delphi try // відкриваємо підключення Delphi Firebird ADOConnection1.Open (); ADOConnection1.BeginTrans (); // Позиційні параметри with ADOQuery1 do begin // текст запиту with SQL do begin Clear; Add ( 'DELETE FROM COUNTRY WHERE Country =? And Currency =?'); end; with Parameters do begin Clear; // варіант 1 AddParameter (). Value: = 'Turkey'; // варіант 2 AddParameter (); Items [1] .Value: = 'Lira'; end; // вставка запису ExecSQL (); Memo1.Lines.Add ( "ExecSQL. Affected Records: '+ IntToStr (ADOQuery1.RowsAffected)); end; // Іменовані параметри with ADOQuery1 do begin with SQL do begin Clear; Add ( 'INSERT INTO COUNTRY (country, currency) VALUES (: c1,: c2)'); end; // встановлюємо 2 параметра за раз Parameters.ParamValues ​​[ 'c1; c2']: = VarArrayOf ([ 'Turkey', 'Lira']); ExecSQL (); Memo1.Lines.Add ( "ExecSQL. Affected Records: '+ IntToStr (ADOQuery1.RowsAffected)); end; ADOConnection1.CommitTrans (); except on E: Exception do // відкатуємо транзакцію в разі помилки begin ADOConnection1.RollbackTrans (); ShowMessage (E.ClassName + 'db error:' + E.Message); end; end; // закриваємо підключення ADOConnection1.Close ();

У наведеному прикладі параметри команди встановлюються двома різними способами:

1. Одним словом за раз:

ADOQuery1.Parameters.ParamValues ​​[ 'c1; c2']: = VarArrayOf ([ 'Turkey', 'Lira']);

2. І кожен параметр окремо:

with Parameters do begin Clear; AddParameter (). Value: = 'Turkey'; AddParameter (); Items [1] .Value: = 'Lira'; end;

Для вибірки даних через TADOQuery використовується SQL-вираз, що містить команду SELECT, і метод Open ():

try // відкриваємо підключення Delphi InterBase ADOConnection1.Open (); ADOConnection1.BeginTrans (); with ADOQuery1 do begin // текст запиту with SQL do begin Clear; Add ( 'SELECT * FROM EMPLOYEE WHERE EMP_NO>?'); end; with Parameters do begin Clear; AddParameter (). Value: = '10'; end; // відкриваємо Recordset через метод Open (), // натомість так само можна встановити властивість Active = true Open (); end; ADOConnection1.CommitTrans (); except on E: Exception do // відкат транзакції в разі помилки begin ADOConnection1.RollbackTrans (); ShowMessage (E.ClassName + 'db error:' + E.Message); end; ADOConnection1.Close ();

TADOStoredProc

Компонент TADOStoredProc дозволяє виконувати збережені процедури InterBase і Firebird. Принцип роботи TADOStoredProc такий же як і у TADOQuery:

  • Підключення задається у властивості Connection або ConnectionString.
  • Метод Open () або властивість Active = true дозволяють отримати результуюче безліч.
  • Метод ExecSQL дозволяє виконати процедуру і повернути результат в наборі OUT-параметрів.

Єдині відмінністю є властивість ProcedureName в якому зазначається ім'я збереженої процедури. Властивість SQL в компоненті TADOStoredProc відсутня

Процедура може повертати результат двома способами:

  • у вигляді результуючого безлічі;
  • у вигляді вихідних OUT-параметрів;

Для отримання результуючого безлічі використовується оператор SELECT:

select * from stored_procedure_name (...)

Для виконання процедури, яка нічого не повертає або повертає OUT-параметри необхідно використовувати інструкцію exec:

exec procedure stored_procedure_name

компонент TADOCommand

TADOCommand - команда, яка передається серверу, для того щоб вважати або змінити дані. Компонент фактично об'єднує в собі можливості 3-х розглянутих компонентів: TADOTable, TADOQuery, TADOStoredProc.

Поведінка TADOCommand змінюється в залежності від властивості CommandType. Воно може набувати таких значень:

  • cmdText - текст команди містить SQL-запит. Поведінка аналогічно TADOQuery.
  • cmdStoredProc - у властивості CommandText задано ім'я процедури. Поведінка відповідає компоненту TADOStoredProc.
  • cmdTable і cmdTableDirect - означають, що в тексті зазначено ім'я таблиці, яку необхідно завантажити. Для Firebird і InterBase значення cmdTable і cmdTableDirect ідентичні. Відповідає TADOTable.

Робота з транзакціями

Механізми управління транзакціями в IBProvider однакові для всіх засобів розробки. Раніше я докладно расматривать транзакції в першій частині керівництва по роботі з InterBase і Firebird в ADO .Net . Рекомендую вам звернути увагу на наступні його глави:

  • Автоматичне управління транзакціями;
  • Рівні ізоляції транзакцій;
  • Іменовані точки збереження;
  • Commit Retain і Rollback Retain і Firebird;

Корисні посилання

Залиште свій коментар:Firebird delphi,InterBase Delphi,dbGo,ADO Express,Firebird OLE DB Direct / Express.

Дата публікації: 30.11.2008. Права на матеріал належать: IBProvider. При передруці посилання на сайт https://www.ibprovider.com/rus обов'язкове.