Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

РОБОТА З БАЗАМИ ДАННИХ В DELPHI



 

Потужність і гнучкість Delphi при роботі з базами даних заснована на низькорівневому ядрі - процесорі баз даних Borland Database Engine (BDE). Його інтерфейс із прикладними програмами називається Integrated Database Application Programming Interface (IDAPI). У принципі, зараз не розрізняють ці дві назви (BDE і IDAPI) і вважають їх синонімами. BDE дозволяє здійснювати доступ до даних як з використанням традиційного record-орієнтованих (навігаційного) підходу, так і з використанням set-орієнтованого підходу, використовуваного в SQL-серверах баз даних. Крім BDE, Delphi дозволяє здійснювати доступ до баз даних, використовуючи технологію (і, відповідно, драйвери) Open DataBase Connectivity (ODBC) фірми Microsoft. Але, як показує практика, продуктивність систем з використанням BDE набагато вище, ніж цих же при використанні ODBC. ODBC драйвера працюють через спеціальний “ODBC socket”, що дозволяє вбудовувати їх у BDE.

Всі інструментальні засоби баз даних Borland - Paradox, dBase, Database Desktop - використовують BDE. Всі особливості, що маються в Paradox чи dBase, “успадковуються” BDE, і тому цими ж особливостями володіє і Delphi.

Аліаси

Таблиці зберігаються в базі даних. Деякі СУБД зберігають базу даних у виді декількох окремих файлів, що представляють собою таблиці (в основному, усі локальні СУБД), у той час як інші складаються з одного файлу, що містить у собі всі таблиці й індекси (InterBase). Наприклад, таблиці dBase і Paradox завжди зберігаються в окремих файлах на диску. Директорій, що містить dBase .DBF чи файли Paradox .DB файли, розглядається як база даних. Іншими словами, будь-який директорій, що містить файли у форматі Paradox чи dBase, розглядається Delphi як єдина база даних. Для переключення на іншу базу даних потрібно просто переключитися на інший директорій. Як уже було зазначено вище, InterBase зберігає всі таблиці в одному файлі, що має розширення .GDB, тому цей файл і є база даних InterBase.

Зручно не просто вказувати шлях доступу до таблиць бази даних, а використовувати для цього деякий замінник - псевдонім, називаний аліасом. Він зберігається в окремому конфігураційному файлі в довільному місці на диску і дозволяє виключити з програми пряма вказівка шляху доступу до бази даних. Такий підхід дає можливість розташовувати дані в будь-якім місці, не перекомпілюючи при цьому програму. Крім шляху доступу, в аліасі вказуються тип бази даних, мовний драйвер і багато іншої керуючої інформації. Тому використання аліасів дозволяє легко переходити від локальних баз даних до SQL-серверних баз (природно, при виконанні вимог поділу додатка на клієнтську і серверну частини).

Database Desktop - це утиліта, багато в чому схожа на Paradox, що поставляється разом з Delphi для інтерактивної роботи з таблицями різних форматів локальних баз даних - Paradox і dBase, а також SQL-серверних баз даних InterBase, Oracle, Informix, Sybase (з використанням SQL Links). Файл утиліти, що виконується, називається DBD.EXE, розташований він, як правило, у директорії, називаному DBD (при установці за замовчуванням). Для запуску Database Desktop просто двічі клацніть по її іконці.

Доступ до бази даних забезпечують компоненти Database, Table, Query і DataSource, значки яких знаходяться на вкладках Data Accessпалітри компонентів (мал. 5.1 ).

 

Рис. 5.1Компоненти вкладок Data Accessзабезпечують доступ до даних

 

Компонент Database представляє базу даних як єдине ціле, тобто сукупність таблиць, а компонент Table — одну з таблиць бази даних. Компонент DataSource (джерело даних) забезпечує зв'язок компонента відображення-редагування даних (наприклад, компонента DBGrid) і джерела даних, у якості якого може виступати таблиця (компонент Tаblе) чи результат виконання SQL-запиту до таблиці (компонент SQL). Компонент DataSource дозволяє оперативно вибирати джерело даних, використовувати той самий компонент, наприклад, DBGrid для відображення даних з чи таблиці результату виконання SQL-запиту до цієї таблиці. Механізм взаємодії компонентів відображення-редагування даних з даними через компонент DataSource ілюструє мал. 5.2.

 

Рис. 5.2Взаємодія компонентів відображення і доступу до даних

 

У найпростішому випадку, коли база даних являє собою одну-єдину таблицю, додаток роботи з базою даних повинне містити один компонент Table і один компонент DataSource.

У табл. 5.1 перераховані властивості компонента Table, а в табл. 5.2 — властивості компонента DataSource. Властивості перераховані в тім порядку, у якому варто встановлювати їхнього значення після додавання компонентів у форму додатка.

 

Таблиця 5.1Властивості компонента Table

 

Властивість Визначає
Name Database   NameTable     Name Table   Type     Active Ім'я компонента. Використовується для доступу до властивостей компонента Ім'я бази даних, частиною якої є таблиця (файл даних), для доступу до якої використовується компонент. Як значення властивості варто використовувати псевдонім бази даних Ім'я файлу даних (таблиці даних), для доступу до якого використовується компонент Тип таблиці. Таблиця може бути набором даних у форматі Paradox («Paradox), dBase (ttDBase), FoxPro («FoxPro) чи являти собою форматований текстовий файл (ttASCII). Ознака активізації файлу даних (таблиці). У результаті присвоювання властивості значення True відбувається відкриття файлу таблиці

 

Під час розробки форми додатка значення властивостей DatabaseName і TabieName задаються шляхом вибору зі списків. У списку DatabaseName перераховані всі зареєстровані псевдоніми, а в списку TabieName -імена файлів таблиць, що знаходяться у відповідному псевдоніму каталозі.

 

Таблиця 5.2Властивості компонента DataSource

 

  Властивість Визначає  
  Name Ім'я компонента. Використовується для доступу до властивостей компонента  
  DataSet Ім'я компонента, що представляє собою вхідні дані  

 

Властивість DataSet забезпечує зв'язок між компонентом, що представляє собою чи таблицю запит, і компонентами, призначеними для доступу до записів. Наявність цієї властивості дозволяє вибирати джерело даних. Наприклад, база даних може бути організована таким чином, що таблиця, що складається з великого числа записів, розділена на кілька підтаблиц, що мають однакову структуру. У цьому випадку в додатку кожної під таблиці буде відповідати свій компонент Table, а вибір конкретної підтаблиці можна здійснити установкою значення властивості DataSet.

У табл. 5.3 і 5.4 приведені значення властивостей компонентів Table і DataSource для розроблювального додатка.

 

Таблиця 5.3Значення властивостей компонента Table

 

  Властивість Значення  
  Name Table1  
  DatabaseName Peterburg  
  TableName monuments . db  
  Active True  

 

Таблиця 5.4Значення властивостей компонента DataSource

       
  Властивість Значення  
  Name DataSet DataSourcel Table1  

Користувач може переглядати базу даних у режимі форми чи в режимі таблиці. У режимі форми можна бачити тільки один запис, а в режимі таблиці – кілька записів одночасно. Досить часто ці два режими комбінують. Коротка інформація (уміст деяких ключових полів) виводиться в табличній формі, а при необхідності бачити уміст усіх полів запису виконується переключення в режим форми.

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

 

 

Рис. 5.3Компоненти перегляду і редагування полів бази даних

 

Компонент Query схожий на компонент Table, але, навідміну від останнього, він представляє не всю базу даних (усі записи), а тільки її частина — запису, що задовольняють критерію запиту.

У табл. 5.5 перераховані деякі властивості компонента Query.


Таблиця 5.5Властивості компонента Query

 

  Властивість Визначає  
  Name   SQL Active Ім'я компонента. Використовується компонентом Datasource для зв'язку результату виконання запиту (набору записів) з компонентом, що забезпечує перегляд записів, наприклад DBGrid Записаний мовою SQL запит до бази даних (до таблиці) При присвоєнні властивості значення True активізує виконання запиту  

 

Для того щоб під час розробки програми задати, яка інформація буде виділена з бази даних у результаті виконання запиту, властивість SQL повинна містити представлений мовою SQL запит на вибірку даних.

У загальному виді запит на вибірку з таблиці даних виглядає так:

SELECTСписків-Полів FROMТаблиця WHERE(Критерій) ORDER BYСписокПолей

де:

  • SELECT — команда вибору записів з таблиці і висновку вмісту полів, імена яких зазначені в списку;
  • FROM — параметр команди, що визначає ім'я таблиці, з якої потрібно зробити вибірку;
  • WHERE — параметр, що задає критерій вибору. У найпростішому випадку критерій — це інструкція перевірки вмісту полючи;
  • ORDER BY - параметр, що задає умова, відповідно до якого будуть упорядковані записи, що задовольняють критерію запиту.

Наприклад, запит

SELECT Fam, Name FROM ':Школа:school.db' WHERE

(Class = '10а') ORDER BY Name, Fam

забезпечує вибірку з бази даних "Школа" (з таблиці School.db) записів, у яких у поле class знаходиться текст 10а, тобто формує упорядкований за алфавітом список учнів 10-а класу.

Інший приклад. Запит

SELECT Fam, Name FROM ":Школа:school.db" WHERE

(Fam > 'K') and(Fam < 'Л') ORDER BY Name, Fam

забезпечує вибір інформації про учнів, прізвище яких починаються на букву К.

Запит може бути сформований і записаний у властивість SQL під час розробки чи форми під час роботи програми.

При використанні TTable, можливий доступ до всього набору записів з однієї таблиці. На відміну від TTable, TQuery дозволяє довільним образом (у рамках SQL) вибрати набір даних для роботи з ним. Багато в чому, методика роботи з об'єктом TQuery схожа на методику роботи з TTable, однак є свої особливості.

Ви може створити SQL запит використовуючи компонент TQuery у такий спосіб:

1. Призначите Псевдонім (Alias) DatabaseName.

2. Використовуйте властивість SQL щоб увести SQL запит типу
“Select * from Country”.

3. Установите властивість Active у True

Якщо звертання йде до локальних даних, то замість псевдоніма можна вказати повний шлях до каталогу, де знаходяться таблиці.

Дві основних речі, що Ви повинні зрозуміти перш, ніж перейти далі:

· Цей урок не є підручником для початківців по SQL, а, скоріше, описом об'єкта TQuery і основних задач, що Ви можете вирішити з його допомогою. Якщо Ви не знаєте ніщо про SQL, Ви все-таки зможете скористатися цією статтею, і, зрештою, придбаєте деяке розуміння основ SQL. Однак, для повного вивчення мови, Ви повинні звернутися до кожної з великої кількості книг і документів, доступних по цьому предметі.

· Delphi використовує pass through SQL, тому для різних SQL серверів синтаксис може бути трохи різним. Версія SQL для локальних таблиць (Local SQL) дуже сильно урізаний, у порівнянні зі стандартом. Щоб довідатися про його можливості, Ви повинні прочитати не тільки цю статтю, але також файл LOCALSQL.HLP.

Ви побачите, що об'єкт TQuery один з найбільш корисних і гнучких компонентів, доступних у Delphi. З ним Ви зможете скористатися всією міццю, наданої лідерами серед промислових SQL серверів, начебто InrterBase, Oracle чи Sybase.

Властивість SQL

Властивість SQL - імовірно, найважливіша частина TQuery. Доступ до цієї властивості відбувається або через Інспектор Об'єктів під час конструювання проекту (design time), чи програмно під час виконання програми (runtime).

Цікавіше, звичайно, одержати доступ до властивості SQL під час виконання, щоб динамічно змінювати запит. Наприклад, якщо потрібно виконати три SQL запити, те не треба розміщати три компоненти TQuery на формі. Замість цього можна розмістити один і просто змінювати властивість SQL три рази. Найбільш ефективний, простий і могутній спосіб - зробити це через запити з параметрами, що будуть пояснені далі. Однак, спочатку досліджуємо основні особливості властивості SQL, а потім розглянемо більш складні теми, типу запитів з параметрами.

Властивість SQL має тип TStrings, що означає що це ряд рядків, що зберігаються в списку. Список діє також, як і масив, але, фактично, це спеціальний клас із власними унікальними можливостями.

При програмному використанні TQuery, рекомендується спочатку закрити поточний запит і очистити список рядків у властивості SQL:

Query1.Close;Query1.SQL.Clear;

Зверніть увагу, що завжди можна “безпечно” викликати Close. Навіть у тому випадку, якщо запит уже закритий, виняткова ситуація генеруватися не буде.

Наступний крок - додавання нових рядків у запит:

Query1.SQL.Add('Select * from Country');Query1.SQL.Add('where Name = ''Argentina''');

Метод Add використовується для додавання однієї чи декількох рядків до запиту SQL. Загальний обсяг обмежений тільки кількістю пам'яті на вашій машині.

Щоб Delphi обробив запит і повернув курсор, що містить результат у виді таблиці, можна викликати метод:

Query1.Open;

Delphi дозволяє скласти “гнучку” форму запиту, називану запитом з параметром. Такі запити дозволяють підставити значення перемінної замість окремих слів у вираженнях “where” чи “insert”. Ця перемінна може бути змінена практично в будь-який час. (Якщо використовується локальний SQL, те можна зробити заміну майже будь-якого слова у твердженні SQL, але при цьому та ж сама можливість не підтримується більшістю серверів.)

Перед тим, як почати використовувати параметризовані запити, розглянемо знову одну з простих вищезгаданих пропозицій SQL:

Select * from Country where Name like 'C%'

Можна перетворити це твердження в параметризований запит замінивши праву частину перемінної NameStr:

select * from County where Name like :NameStr

У цій пропозиції SQL, NameStr не є визначеною константою і може змінюватися або під час дизайну, або під час виконання.

 




©2015 studopedya.ru Все права принадлежат авторам размещенных материалов.