Open Database Connectivity - зв’язок відкритих баз даних

Особливості архітектури Open Database Connectivity (зв’язку відкритих баз даних) – незалежного від постачальника механізму доступу до даних з різних джерел. Концепції API ODBC. Програма установки, стандарт SQL. ODBC в MFS-застосуваннях та для Firebird.

Рубрика Программирование, компьютеры и кибернетика
Вид реферат
Язык украинский
Дата добавления 30.12.2010
Размер файла 169,8 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Зміст

Архітектура ODBC

Концепції API ODBC

Програма установки ODBC

Приклад програми ODBC

Стандарт SQL та ODBC

ODBC в MFS-застосуваннях

ODBC для Firebird

Список використаної літератури

ODBC або Open Database Connectivity (Зв'язок відкритих баз даних) - незалежний від постачальника механізм доступу до даних з різних джерел. Він є реалізацією специфікацій X/Open та SAG CLI (SQL Access Group Call Level Interface) - інтерфейс рівня виклику групи доступу SQL, яку виконала фірма Microsoft. ODBC пропонує функції для взаємодії з базами даних за допомогою мови програмування, наприклад, додавання, модифікування і видалення даних, отримання службової інформації про базу даних, таблиці та індекси.

Архітектура ODBC

Архітектура ODBC складається з п'яти основних рівнів: прикладний рівень, інтерфейс ODBC, диспетчер драйверів, драйвер та джерело даних.

Прикладний рівень реалізує GUI (Graphical User Interface - Графічний інтерфейс користувача) та бізнес-логіку. Він написаний на мові програмування, такій як Java, Visual Basic або C++. Прикладна програма використовує функції з інтерфейсу ODBC для взаємодії з базами даних.

Диспетчер драйверів є частиною ODBC Microsoft. Він керує різними драйверами, що знаходяться в системі, виконуючи завантаження, спрямування викликів на потрібний драйвер і надання прикладній програмі інформації про драйвер, коли це необхідно. Оскільки одна прикладна програма може бути зв'язана з декількома базами даних, то диспетчер драйверів гарантує, що відповідна система керування базою даних отримує всі запити, що надходять до неї, та що всі дані з джерела даних будуть передані прикладній програмі.

Драйвер - та частина архітектури, яка все знає про будь-яку базу даних. Система драйверів ODBC працює не лише на платформі WINDOWS, але і на інших, зокрема UNIX, що перетворює API ODBC на могутній інструмент для створення платформно-незалежних застосувань. Крім того ODBC приводить використовуємий в застосуванні синтаксис SQL до єдиного стандарту, що дозволяє розробляти застосування незалежні від вида бази даних. Звичайно драйвер пов'язаний з конкретною базою даних, наприклад, драйвери Access, Oracle та драйвер SQL Server. Інтерфейс ODBC має набір функцій, таких як оператори SQL, управління з'єднанням, інформація про базу даних тощо. В обов'язки драйвера входить їх реалізація. Це означає, що в деяких базах даних драйвер повинен стимулювати функції інтерфейсу ODBC, які не підтримуються системою керування базою даних. Він виконує роботу по розсиланню запитів в бази даних, отриманню відповідей і відправленню їх прикладній програмі. Для баз даних, що працюють в локальних мережах або Internet, драйвер підтримує мережний зв'язок.

Джерело даних в контексті ODBC може бути системою керування базою даних або просто набором файлів на жорсткому диску. Він може бути як простою базою даних Microsoft Access для невеликої фірми, так і багатосерверним зберігачем інформації про клієнтів телефонної компанії і їх розмовах.

Концепції API ODBC

архітектура база програма

Основною частиною системи ODBC є драйвер. Драйвери можуть бути однорівневі та багаторівневі. Однорівневі драйвери обробляють звертання ODBC і оператори SQL, а багаторівневі - обробляють звертання ODBC та передають оператори SQL джерелу даних (можливо, серверу, розташованому де-небудь в мережі). ODBC не вимагає, щоб драйвери підтримували всі функції цього інтерфейсу. Замість цього для драйверів визначаються рівні відповідності API та граматики SQL. Єдина вимога: якщо драйвер задовольняє деякому рівню, то він повинен підтримувати всі функції ODBC, визначені на цьому рівні, незалежно від того, чи підтримує їх база даних. Так як в обов'язки драйвера входить емуляція функцій ODBC, що не підтримуються системою керування базою даних, то інтерфейс ODBC не залежить від реалізації бази даних.

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

Виклик SQLAllocEnv() ініціалізує бібліотеку ODBC і повертає дескриптор типу SQLHENV. Дескриптор типу SQLHDBC, що повертається функцією SQLAllocConnect(), використовується в наступних звертаннях до функцій ODBC для посилання на певне підключення. Одне застосування може підтримувати декілька відкритих підключень. Функція SQLConnect() шляхом завантаження драйверу і підключення до джерела даних встановлює з'єднання. Це звертання до функції має варіанти; наприклад, виклик SQLDriverConnect(), можна використовувати для підключення до джерел даних, які не встановлюються за допомогою програми початкової установки ODBC. SQLBrowseConnect() дозволяє застосуванню циклічно продивлятися джерела даних. Виділяючи пам'ять для оператора SQL за допомогою функції SQLAllocStmt() на окремому кроці, ODBC забезпечує механізм, при якому оператори можуть конструюватися і використовуватися один раз і кілька разів перш, ніж виділена пам'ять. Після цих чотирьох звертань, як правило, застосування ODBC створює звертання до бази даних для виконання операторів SQL. Воно може використовувати функцію SQLPrepare() для підготовки (компіляції) оператора SQL для виконання і функцію SQLExecute() для дійсного його виконання. В якості альтернативи виклику SQLPrepare() та SQLExecute() застосування можуть використовувати функцію SQLExecDirect() для виконання оператора SQL в одній дії. Спочатку стовпчики зв'язуються з змінними програми за допомогою SQLBindCol, потім ці змінні зчитуються після виконання SQLFetch() над рядком таблиці. Якщо даних більше нема, SQLFetch() повертає SQL_NO_DATA_FOUND. В якості альтернативи використанню SQLBindCol() для пов'язаних стовпців застосування можна використовувати функцію SQLGETDATA() для отримання даних з незв'язаних стовпців.

Коли його робота закінчена, застосування повинно звільнити задіяні ним ресурси ODBC.

В ODBC 3.0 функція SQLFreeHandle() використовується замість функцій ODBC 2.x SQLFreeEnv(), SQLFreeConnect(), SQLFreeHandle().

Програма установки ODBC

Програма установки ODBC викликається за допомогою Control Panel (Панель керування) в Windows і використовується для регістрації джерел даних. Що саме є джерелом даних? Це залежить від драйвера. У випадку такого драйвера, як SQL Server, джерелом даних може бути база даних на сервері. В випадку драйвера Microsoft Access або Microsoft Excel база даних є файлом (MDB або XLS). В випадку Microsoft Text Driver база даних - це каталог, що містить текстові файли, які стосовно драйвера є таблицями в базі даних. Останні версії ODBC розрізняють три типи джерел даних. Джерело даних користувача - це джерело даних, яке бачить лише той, хто його створив. Джерело системних даних доступне всім користувачам даного комп'ютера. Джерело файлових даних - це джерело даних, специфікації якого зберігаються в файлі і можуть бути одночасно використані користувачами на різних комп'ютерах.

Приклад програми ODBC

Нижче наведено текст простого застосування ODBC, яке зчитує рядки, що містяться в таблиці Excel. Коли доступ до таблиці Excel здійснюється з використанням драйвера Microsoft Excel ODBC, електронні таблиці відіграють роль таблиць бази даних, а рядки в таблиці - роль записів у ній.

Таблиця Excel складається з 4 стовпчиків, що містять інформацію про прізвище та ім'я студента, факультет, де він навчається, та рейтинг за осінній триместр 1998/1999 навч. рік.

Замість інсталяції цієї таблиці в якості джерела даних, використовуючи програму початкової установки ODBC, можна скористуватися можливостями функції SQLDriverConnect.

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

cl student.c odbc32.lib. Файл student.xls (таблиця Excel) повинен бути доступним з поточного каталогу.

#include <windows.h>

#include <sql.h>

#include <sqlext.h>

#include <string.h>

#define CONNSTR «DBQ=Student.XLS;DRIVER={Microsoft Excel Driver (*.xls)}»

#define CONNLEN (sizeof(CONNSTR)-1)

#define SQLTRY(x,y) \

{ \

rc = y; \

if (rc != SQL_SUCCESS) \

{ \

char szState[6]; \

char szMsg[255]; \

SDWORD sdwNative; \

SWORD swMsgLen; \

SQLError(hEnv, hDBC, hStmt, szState, &sdwNative, szMsg, sizeof(szMsg), &swMsgLen); \

printf(«Error %d performing %s\nSQLState = %s\nSQL message = %s\n», rc, x, szState, szMsg); \

goto Terminate; \

} \

}

void main(void)

{

SQLHENV hEnv = 0;

SQLHDBC hDBC = 0;

SQLHSTMT hStmt = 0;

SQLCHAR szConnStr[255];

SQLCHAR szStmt[255];

SQLCHAR szName[255];

SQLCHAR szFaculty[255];

long nRating;

SWORD cbConnStr;

RETCODE rc;

SDWORD sdwNLen;

SDWORD sdwFLen;

SDWORD sdwRLen;

int i;

char szResult[1000];

SQLTRY(«SQLAllocEnv», SQLAllocEnv(&hEnv))

SQLTRY(«SQLAllocConnect», SQLAllocConnect(hEnv, &hDBC))

SQLTRY(«SQLDriverConnect», SQLDriverConnect(hDBC, NULL, CONNSTR, CONNLEN, szConnStr, sizeof(szConnStr), &cbConnStr, SQL_DRIVER_NOPROMPT))

SQLTRY(«SQLAllocStmt», SQLAllocStmt(hDBC, &hStmt))

sprintf(szStmt, «SELECT * FROM [Sheet1$]»);

SQLTRY(«SQLPrepare», SQLPrepare(hStmt, szStmt, strlen(szStmt)))

SQLTRY(«SQLBindCol», SQLBindCol(hStmt, 1, SQL_C_CHAR, (PTR)szName, sizeof(szName), &sdwNLen))

SQLTRY(«SQLBindCol», SQLBindCol(hStmt, 2, SQL_C_CHAR, (PTR)szFaculty, sizeof(szFaculty), &sdwFLen))

SQLTRY(«SQLBindCol», SQLBindCol(hStmt, 3, SQL_C_SLONG, (PTR)&nRating, sizeof(nRating), &sdwRLen))

SQLTRY(«SQLExecute», SQLExecute(hStmt))

for (i = 1; (rc = SQLFetch(hStmt)) == SQL_SUCCESS; i++)

{

printf(«Record #%d\tName: %s\tFaculty: %s\tRating: %d\n», i, szName, szFaculty, nRating);

}

if (rc != SQL_NO_DATA_FOUND)

{

SQLTRY(«SQLFetch», rc)

}

printf(«Successfully completed.\n»);

Terminate0:

if (hStmt) SQLFreeStmt(hStmt, SQL_CLOSE);

if (hDBC) SQLDisconnect(hDBC);

if (hDBC) SQLFreeConnect(hDBC);

if (hEnv) SQLFreeEnv(hEnv);

SQLTRY(«SQLAllocEnv», SQLAllocEnv(&hEnv))

SQLTRY(«SQLAllocConnect», SQLAllocConnect(hEnv, &hDBC))

SQLTRY(«SQLDriverConnect», SQLDriverConnect(hDBC, NULL, CONNSTR, CONNLEN, szConnStr, sizeof(szConnStr), &cbConnStr, SQL_DRIVER_NOPROMPT))

SQLTRY(«SQLAllocStmt», SQLAllocStmt(hDBC, &hStmt))

sprintf(szStmt, «SELECT * FROM [Sheet1$] WHERE Rating>91 ORDER BY Rating DESC»);

SQLTRY(«SQLPrepare», SQLPrepare(hStmt, szStmt, strlen(szStmt)))

SQLTRY(«SQLBindCol», SQLBindCol(hStmt, 1, SQL_C_CHAR, (PTR)szName, sizeof(szName), &sdwNLen))

SQLTRY(«SQLBindCol», SQLBindCol(hStmt, 2, SQL_C_CHAR, (PTR)szFaculty, sizeof(szFaculty), &sdwFLen))

SQLTRY(«SQLBindCol», SQLBindCol(hStmt, 3, SQL_C_SLONG, (PTR)&nRating, sizeof(nRating), &sdwRLen))

SQLTRY(«SQLExecute», SQLExecute(hStmt))

for (i = 1; (rc = SQLFetch(hStmt)) == SQL_SUCCESS; i++)

{

printf(«Record #%d\tName: %s\tFaculty: %s\tRating: %d\n», i, szName, szFaculty, nRating);

}

if (rc != SQL_NO_DATA_FOUND)

{

SQLTRY(«SQLFetch», rc)

}

printf(«Successfully completed.\n»);

Terminate:

if (hStmt) SQLFreeStmt(hStmt, SQL_CLOSE);

if (hDBC) SQLDisconnect(hDBC);

if (hDBC) SQLFreeConnect(hDBC);

if (hEnv) SQLFreeEnv(hEnv);}

Простий макрос SQLTRY використовується для повідомлення про помилки.

Після обов'язкових звертань до функцій SQLAllocEnv та SQLAllocConnect програма викликає SQLDriveConnect. Цей виклик робить можливим відкриття таблиці, яка не встановлювалась з використанням програми початкової установки ODBC і робить це без відображення інтерфейса користувача. Для відкриття таблиці використовуються константи CONNSTR та CONNLEN. Як тільки підключення до бази даних успішно завершено, виконуються послідовно два оператори SQL:

SELECT * FROM [Sheet$] - Вибрати всі записи з таблиці Student.

SELECT * FROM [Sheet$] WHERE Rating>91 ORDER BY Rating DESC - Вибрати записи з таблиці Student про тих студентів, що мають рейтинг більший за 91, та впорядкувати виведений список за зменшенням рейтингів студентів.

Ім'я Sheet$ - це ім'я, яке надається драйвером для першої таблиці в робочій книзі Excel. Оператор SQL використовується для отримання полів всіх записів.

Наступні 4 звертання прив'язують змінні до стовпчиків таблиці. Таке призначення функції SQLBindCol. Після послідовного отримання записів, значення полів переміщуються в ці змінні.

Самі записи отримуються за допомогою функції SQLFetch і відображаються з використанням printf. Функція SQLFetch викликається до тих пір, поки значення, що повертається нею, не відрізняється чим-небудь від SQL_SUCCESS. Значення, що повертається, SQL_NO_DATA_FOUND показує, що отриманий останній запис, все інше є помилкою і обробляється відповідним чином.

Програма завершується обов'язковими звертаннями до функцій SQLFreeStmt, SQLDisconnect, SQLFreeConnect та SQLFreeEnv для звільнення ресурсів і закінчення зв'язку з джерелом даних.

При запуску цієї програми забезпечується такий вивід:

Стандарт SQL та ODBC

Синтаксис для ODBC заснований на стандарті ANSI SQL-92.

Майже кожна СУБД використовує свій власний діалект SQL, синтаксис якого може трохи відрізнятися. Кожен діалект може підтримувати різний набір властивостей. Драйвер ODBC для конкретної бази даних забезпечить необхідний переклад загального SQL на специфічний діалект, що використовується в певній СУБД.

Існує три основні групи операторів SQL:

мова визначення даних DDL (Data Definition Language) використовується для завдання структури бази даних і створення її об'єктів;

мова керування даними DCL (Data Control Language) - для роботи з правами користувача на конкретні об'єкти;

мова маніпулювання даними DML (Data Manipulation Language) - для виконання інших операцій таких, як додавання і модифікація даних, а також виконання запитів.

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

В DDL для роботи з об'єктами використовуються такі оператори SQL:

CREATE - створює новий об'єкт;

ALTER - модифікує існуючий об'єкт;

DROP- видаляє об'єкт.

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

В таблицях - основних об'єктах реляційних базах даних - можуть міститися дані різних типів. Типи даних SQL, згруповані згідно рівням підлеглості ODBC SQL.

Мінімальний рівень:

CHAR (n) - символьний рядок з n символів фіксованої довжини.

VARCHAR (n) - символьний рядок змінної довжини, але не більше n символів.

LONG VARCHAR - символьний рядок змінної необмеженої довжини.

Базовий рівень:

DECIMAL (p,s) або NUMERIC (p,s) - значення з плавучою комою.

SMALLINT- двохбайтове ціле.

INTEGER - чотрьохбайтове ціле.

REAL - чотирьохбайтове значення з плавучою комою.

FLOAT або DOUBLE PRECISION - восьмибайтове значення з плавучою комою.

Розширений рівень:

BIT - один біт.

TINYINT - однобайтове ціле.

BIGINT - восьмибайтове ціле.

BINARY (n) - двійкове поле фіксованої довжини, що складається з n байт.

VARBINARY (n) - двійкове поле змінної довжини, що не перевищує n байт.

LONG VARBINARY- двійкове поле змінної необмеженої довжини.

DATE- значення дати.

TIME - значення часу.

TIMESTAMP - значення, що містить час і дату.

Створення таблиці.

CREATE TABLE Student (

StudIDUNTEGER,

StudNameVARCHAR (20) )

Стовпчики таблиці можна довизначити, якщо додати після типу даних додаткові модифікатори. Найчастіше використовується модифікатор NOT NULL, який вказує на те, що значення для цього стовпця повинно бути задано. Можна також вимагати, щоб конкретне поле в таблиці не повторювалось. Для цього використовується модифікатор UNIQUE. Можна також задати для стовпця значення, що буде використовуватися по замовченню, якщо не було задано явних значень. Для цього служить модифікатор DEFAULT.

Видалення таблиці.

DROP TABLE Student

В опрераторі видалення можуть використовуватися ключові слова CASCADE та RESTRICT. Якщо в операторі вказано ключове слово CASCADE, то при видаленні таблиці видаляються також всі представлення або обмежувачі цілостності, пов'язані з цією таблицею. Модифікатор RESTRICT не дозволить видалити таблицю, якщо на неї є посилання в яких-небудь представленнях або обмежувачах цілостності.

Зміна таблиці.

Додавання стовпців:

ALTER TABLE Student ADD COLUMN Course INTEGER

Видалення стовпців:

ALTER TABLE Student DROP COLUMN Course

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

Представлення.

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

CREATE VIEW MyView AS SELECT * FROM TABLE MyTable

Представлення відображає всі стовпці таблиці

CREATE VIEW MyView (Id, Name) AS SELECT (StudID, Studname) FROM Student

Існуюче представлення не можна модифікувати, але можна його видалити.

DROP VIEW MyView

Мова керування даними DCL.

Дозволяє працювати з правами користувачів на об'єкти в базі даних.

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

SELECT дозволяє запитувати дані

INSERT дозволяє додавати нові рядки

DELETE дозволяє видаляти рядки

UPDATE дозволяє змінювати існуюючі рядки

REFERENCES це право потрібне лише в тому випадку, коли користувач намагається модифікувати таблицю, що має обмеження цілостності посилань, які зсилаються на стовпці іншої таблиці. Такий користувач повинен мати право REFERENCES на стовпці, що використовуються з обмеженнями.

Права присвоюються:

GRANT SELECT ON Student TO PUBLIC

GRANT SELECT, INSERT ON Student TO Sveta, Lena

Права UPDATE та REFERENCES можуть поширюватися на окремі стовпці.

GRANT UPDATE (Raiting, Credit) ON Student TO Sveta

Відмінити права на об'єкти можна за допомогою оператора REVOKE:

REVOKE SELECT ON Student FROM Lena

В операторі REVOKE можна використовувати модифікатори CASCADE та RESTRICT. Якщо відміняються права користувача на деяку таблицю, то доцільно відмінити його права на всі представлення, що потребують доступу до всієї таблиці. Зробити це можна за допомогою CASCADE. Модифікатор RESTRICT не дозволяє відмінити право доступу, яке вимагається згідно іншим правам, що присвоєні цьому користувачу.

Мова маніпулювання даними DML.

Основні типи операторів:

SELECT

INSERT

DELETE

UPDATE

SELECT - основа SQL. Використовується кожен раз при отриманні даних. Базовий синтаксис оператора SELECT:

SELECT * FROM Student

Інші:

SELECT * FROM Student WHERE Raiting>91 AND Credit<120

SELECT * FROM Student WHERE NOT Course=4

SELECT * FROM Student WHERE (Raiting/Credit)<1

В SQL є спеціальний оператор для порівняння символьних рядків. Предикат LIKE вибирає рядки на основі визначеного шаблону. В шаблон можуть входити звичайні символи, а також символи % та _. Рядок символів довільної довжини можна поставити у відповідність шаблону %, а один символ - _.

Вибір всіх рядків, що містять рядок Database в полі Title

SELECT ChapterNum FROM Chapters WHERE Title LIKE `%Database%'

Пошук заголовків, в яких починаючи з другої позиції міститься рядок ata

SELECT ChapterNum FROm Chapters WHERE Title LIKE `_ata%'

Для спрощення оператору WHERE використовується предикати IN та BETWEEN:

SELECT StudID FROM Student WHERE Course IN (4, 3)

SELECT StudName FROM Student WHERE Raiting BETWEEN 91 AND 100

В багатьох задачах треба знайти всі можливі значення певного поля на деякій множині рядків. Зробити це можна за допомогою ключового слова DISTINCT, яке запобігає дублюванню елементів в вихідній множині результатів.

SELECT DISTINCT Course FROM Student

По замовченню рядки, що повертаються після виконання запиту, подаються в довільному порядку. Змінити це можна за допомогою оператора ORDER BY, який дозволяє вказати один або декілька стовпців, що будуть використовуватися для сортування повертаємих рядків. Для кожного стовпця можна вказати модифікатор ASC або DESC.

SELECT StudID FROM Student ORDER BY StudID ASC

Якщо в операторі ORDER BY вказати декілька стовпців, то повертаємі рядки будуть відсортовані спочатку за першим стовпцем. Потім рядки, що містять однакові значення в першому полі, будуть відсортовані ще і за другим стовпцем.

Сортування рядків за зростанням значень в стовпці Salary, а рядки з однаковими значеннями в цьому полі - за спаданням ідентифікаційних номерів EmpID:

SELECT EmpID, Salary FROM Employee ORDER BY Salary ASC, EmpID DESC

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

AVG - повертає середнє значення в стовпці.

COUNT - підраховує кількість повертаємих рядків.

MAX - повертає максимальне значення для деякого стовпця в результуючій множині.

MIN - повертає мінімальне значення для деякого стовпця в результуючій множині.

SUM - підраховує загальну суму всіх значень для деякого стовпця в результуючій множині.

Задання значень дати і часу викликає особливий інтерес. Як правило, в різних системах керування базами даних використовуються різні, а тому, несумісні, способи представлення літералів для таких значень. ODBC забезпечує переносимий синтаксис для таких значень.

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

{d `yyyy-mm-dd'}

Для літералів часу:

{t `hh:mm:ss'}

Для представлення значень дати і часу:

{ts `yyyy-mm-dd hh:mm:ss'}

Функції SQL.

В SQL, що використовується для ODBC, визначено багато функцій, які можна використовувати при побудові запитів або в параметрі списку вибору, або в операторі WHERE. Ці функціі можна розподілити на 5 груп: числові, строкові, функції дати та часу, функції системи та функції перетворення типів даних.

Синтаксис ODBC визначає таку форму запису при виклику функції в SQL:

{fn ім'я функції}

ODBC в MFS-застосуваннях

Використання ODBC значно спрощується за допомогою Microsoft Foundation Classes Library (Бібліотека основних класів Microsoft). Прості застосування, що отримують доступ к таблицям через ODBC, можуть бути створені всього лише декількома натисненнями кнопки миші з використанням мастерів AppWizard та ClassWizard. Існує декілька класів MFS, які підтримують доступ до баз даних і наборам записів.

Класи ODBC в MFS.

Найголовніші класи, що надаються MFS для підтримки застосувань ODBC - це класи CDatabase та CRecordset. Клас CDatabase представляє з'єднання з джерелом даних. Його змінна m_hdbc представляє дескриптор з'єднання ODBC. Функції Open та Close можна використовувати для установки або закриття з'єднання з джерелом даних. Інші функції використовуються для установки або отримання параметрів з'єднання. До таких функцій належать: GetConnect(повертає рядок з'єднання ODBC), IsOpen, GetDatabaseName, CanUpdate, CanTransact, InWaitForDataSource, SetLoginTimeout та SetSynchronousMode. По замовченню для доступу до джерела даних клас CDatabase використовує асинхронний режим. Виконувана асинхронна дія може бути перервана викликом функції Cancel.

Обробка транзанкцій підтримується функціями BeginTrans та Rollback.

Клас CDatabase надає також дві перекриваємі функції. Функція OnSetOptions використовується для установки стандартних опцій з'єднання. Функція OnWaitForDataSource викликається системою для повідомлення про час обробки при виконанні довгої операції.

Функцію ExecuteSQL можна використовувати для безпосереднього виконання оператора SQL. Цей оператор не використовується разом з операторами SQL, що повертають записи даних.

Клас CRecordset інкапсулює функціональні можливості оператора ODBC SQL і набору рядків, що повертаються оператором. Змінні-члени цього класу ідентифікують дескриптор оператора ODBC, число полів і параметрів в наборі даних, об'єкт CDatabase, за допомогою якого набір записів підключен до джерела даних, і два рядки, що відповідають умовам WHERE та ORDER BY.

Двома основними типами наборів записів є динамічні і статичні набори. Тип набору записів вказується при виклику функції CRecordset:Open. Статичні набори представляють статичний варіант представлення даних. Це найбільш зручно для таких задач, як створення звіту. Динамічні набори представляють динамічний варіант представлення даних, що відображає зміни,виконані іншими користувачами або за допомогою інших наборів записів застосування.

Коли набір записів відкривається викликом функції Open, відбувається доступ до таблиці і запит, що представляється записів, виконується. Набір записів і пов'язаний з ним дескриптор можуть бути закриті викликом функції Close.

Атрибути набору записів можна отримати через виклик функцій CanAppend, CanRestart, CanScroll, CanTransact, CanUpdate, GetRecordCount, GetTableName, GetSQL, IsOpen, IsEOF, IsBOF та IsDeleted.

Переміщення по набору записів можна отримати за допомогою функцій Move, MoveFirst, MoveLast, MoveNext та MovePrev.

Дії з набором записів можуть відбуватися викликом функцій Addnew, Delete, Edit або Update.

Об'єкт типу CRecordset ніколи не використовується безпосередньо. Необхідно отримати клас, похідний від CRecordset, і додати змінні, що відповідають полям таблиці, яку представляють набір записів. Потім треба перекрити функцію DoFieldExchange набору записів; ця функція за допомогою функцій обміну полями записів RFX_(Record Field Exchange) повинна сприяти обміну даних між змінними класу та полями в базі даних. Ці функції за синтаксисом аналогічні функціям обміну даними діалогу (dialog data exchange - DDX_).

Обмін полями підтримується за допомогою класу CfieldExchange. Об'єкт цього класу містить інформацію про поля, обмін якими повинен відбуватися при виклику функції DoFieldExchange набору записів.

Клас CRecordView - це клас перегляду, похідний від CformView, розробленого спеціально для відображення в формах записів баз даних. Об'єкти типу CRecordView використовують функції обміну даними діалогу (DDX) та обміна полями записів (RFX) для підтримки переміщення даних між формою і джерелом даних. Об'єкти, похідні від CRecordView використовуються разом з об'єктами, похідними від CRecordset.

Операції ODBC використовують клас CDBException для повідомлення про помилки шляхом механізму MFC-виключень.

ODBC для Firebird

Firebird (Firebirdsql) - компактна, кроссплатформенная, вільна система керування базами даних (СУБДсуд), що працює на Linux, Microsoft Windows і різноманітних Unix платформах.

У якості переваг Firebird можна відзначити многоверсионную архітектуру, що забезпечує паралельну обробку оперативних і аналітичних запитів (це можливо тому, що читаючі користувачі не блокують пишучих), компактність (дистрибутив 5Mb), високу ефективність і потужну язикову підтримку для збережених процедур і тригерів.

Firebird використовується в різних промислових системах (складські й господарські, фінансовий і державний сектори) з 2001 р. Це комерційно незалежний проект C і C++ програмістів, технічних радників і розроблювачів мультиплатформенных систем керування базами даних, заснований на вихідному коді, випущеному корпорацією Borland 25 липня 2000 року у вигляді вільної версії Interbase. Серед недоліків: відсутність кеша результатів запитів, повнотекстових індексів.

Основні характеристики

* Відповідність вимогам ACID: Firebird зроблений спеціально, щоб задовольняти вимогам "атомарности, цілісності, ізоляції й надійності" транзакцій ("Atomicity, Consistency, Isolation and Durability")[1].

* Версионная архітектура: Основна особливість Firebird - версионная архітектура, що дозволяє серверу обробляти різні версії однієї й тієї ж запису в будь-який час таким чином, що кожна транзакція бачить свою версію даних, не заважаючи сусіднім ("читаючі транзакції не блокують пишучі, а пишучі не блокують читаючих"). Це дозволяє використовувати одночасно OLTP і OLAP запити.

* Збережені процедури: Використовуючи мову PSQL (процедурний SQL) Firebird, можливо створювати складні збережені процедури для обробки даних повністю на стороні сервера. Для генерації звітів особливо зручні збережені процедури з можливістю вибірки, що повертають дані у вигляді набору записів. Такі процедури можна використовувати в запитах точно так само як і звичайні таблиці.

* Події: Збережені процедури й тригери можуть генерувати події, на які може підписатися клієнт. Після успішного завершення транзакції (COMMIT) він буде сповіщений про що відбувся подіях і їх кількості.

* Генератори: Ідея генераторів (послідовностей) уможливлює просту реалізацію автоинкрементных полів, і не тільки їх. Генератори є 64?битнымибитными збереженими в базі даних лічильниками, що працюють незалежно від транзакцій. Вони можуть бути використані для різних цілей, таких як генерація первинних ключів, керування тривалими запитами в сусідніх транзакціях, і т.д.

* Бази даних тільки для читання: дозволяють поширювати бази даних, приміром , на CD-ROM. Особливо спрощує поширення даних їхнє використання в комбінації з версією, що вбудовується, сервера Firebird (Firebird Embedded).

* Повний контроль над транзакціями: Один клієнтський додаток може виконувати безліч одночасних транзакцій. У різних транзакціях можуть бути використані різні рівні ізоляції. Протокол двофазного підтвердження транзакцій забезпечує гарантовану стійкість при роботі з декількома базами даних. Так само доступні оптимістичне блокування даних і крапки збереження транзакцій.

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

* Тригери: Для кожної таблиці можливе призначення декількох тригерів, що спрацьовують до або після вставки, відновлення або видалення записів. Для тригерів використовується мова PSQL, дозволяючи вносити початкові значення, перевіряти цілісність даних, викликати виключення, і т.д. В Firebird 1.5 з'явилися "універсальні" тригери, що дозволяють в одному тригері обробляти вставки, відновлення й видалення записів таблиці.

* Зовнішні функції: бібліотеки з UDF (User Defined Function) можуть бути написані на будь-якій мові й легко підключені до сервера у вигляді DLL/SO, дозволяючи розширювати можливості сервера "зсередини".

* Декларативний опис посилальної цілісності: Забезпечує несуперечність і цілісність багаторівневих відносин "master-detail" між таблицями.

* Набори символів: Firebird підтримує безліч міжнародних наборів символів (включаючи Unicode) з безліччю варіантів сортування.

Відповідність стандарту SQL

* Firebird повністю підтримує SQL 92 Entry Level 1 і реалізує більшу частину стандарту SQL-99 c деякими дуже корисними доповненнями. Це включає вираження DML/DDL, синтаксис об'єднань FULL/LEFT/RIGHT [OUTER] JOIN, вираження UNION, DISTINCT, підзапити (IN, EXISTS), вбудовані функції (AVG, SUM, MIN, MAX, COALESCE, CASE, ..), обмеження цілісності (PRIMARY KEY, UNIQUE, FOREIGN KEY), і всі загальні типи даних SQL.

Firebird також реалізує обмеження перевірки (check constraints) на рівні доменов і полів, відображення (views), виключення, ролі й керування правами доступу. Для більш докладної інформації див. Firebird Reference Guide і Release Notes.

Вимоги до апаратного забезпечення

* Firebird працює на 32- і 64- розрядних версіях Windows, Linux, також на Macos X, HP-UX, Freebsd, і ін., на апаратних платформах x86, x64 і Powerpc, Sparc і багатьох інших, і підтримує легкий перехід між цими платформами. Може використовуватися навіть не дуже потужне встаткування, особливо під Linux. І як у будь-який СУБД, на продуктивність впливають: кількість пам'яті, швидкість роботи дискової підсистеми, і т.д. Рекомендації для вибору апаратного забезпечення залежать від вимоги до системи, прогнозованого розміру бази даних, кількості користувачів, і т.д. Припустимо починати з мінімальної конфігурації, розширюючи її в міру потреби.

Доступні операційні системи

* Найбільше широко використовуваними для серверів Firebird операційними системами є Linux і Microsoft Windows (включаючи NT) (включаючи термінальні сервіси MS і Citrix). Інші підтримувані платформи - Mac OS X, Solaris, Freebsd і HP-UX.

Перехід від однієї ОС до іншої досить простий - досить зробити резервну копію бази в стерпному форматі в одній системі й відновити на іншій.

Засобу доступу до сервера

* Firebird підтримує безліч способів доступу, включаючи: власні набори компонент для C/C++, Delphi, класи для Ada, ODBC, JDBC (Jaybird), драйвери для Python, PHP, драйвер OLE DB, dbexpress, провайдер даних .NET і прямій доступ з використанням клієнтської бібліотеки сервера

Фізичні обмеження

* Firebird підтримує більші бази даних. Бази даних можуть бути розташовані в декількох файлах, граничний розмір яких залежить від операційної системи. Теоретична межа в цей час становить 64TB для одного файлу бази даних, таким чином, головні обмеження накладаються файловою системою й місцем на жорсткому диску. Практично база даних обсягом 1 ТБ стабільно працює, що доводить проведений тест.

* Максимальна довжина одному запису (сумарно всі поля за винятком полів з типом BLOB) рівна 64 КБ.

Список використаної літератури

В.Тосс и др. Visual C++5. Энциклопедия пользователя. -Киев: DiaSoft, 1998.-683c.

Д.Беннет. Visual C++5. Руководство разработчика. -Киев: Диалектика, 1998.-760с.

Джон Вейскас. Эфективная работа с Access 7.0. -Санкт-Петербург: Питер, 1997.-830с.

К. Дейт. Введение в систему баз данных. -М.: Наука,1988.-463с.

Дж. Вебер. Технология Java в подлиннике. -Санкт-Петербург: BHV, 1998.-1070с.

Размещено на Allbest.ru


Подобные документы

  • Администратор источников данных ODBC: его запуск и принципы работы, возможности эксплуатации и управления. Вкладка "Пользовательское DSN", ее содержание и структура. Библиотеки для доступа к ODBC, типы используемых данных. Функция SQLAllocHandle.

    презентация [485,0 K], добавлен 06.01.2014

  • Оператори визначення даних. Створення таблиць. Вилучення таблиць. Додавання записів. Модифікація даних. Видалення даних. Пошук даних. Database Desktop. Компонент TQuery.

    реферат [165,8 K], добавлен 13.06.2007

  • Основні дії з файлами, які використовують програми. Диски і файли. Особливості використання даних, збережених на диску. Дискова фізична модель бази даних. Управління дисковим простором. Управління буферами даних. Стратегія заміни сторінок у фреймах.

    реферат [19,8 K], добавлен 10.08.2011

  • Опис мови програмування PHP. Стратегія Open Source. Мова розмітки гіпертекстових документів HTML. Бази даних MySQL. Обґрунтування потреби віддаленого доступу до БД. Веб-сервер Apache. Реалізація системи. Інструкція користувача і введення в експлуатацію.

    курсовая работа [42,9 K], добавлен 21.12.2012

  • Концептуальна модель бази даних, визначення зв’язків між ними, атрибутів сутностей їх доменів. Створення ORM source model та Database model diagram для бази даних "Автотранспортне підприємство". Генерування ddl-скрипта для роботи в СУБД SQL-Server.

    курсовая работа [47,3 K], добавлен 17.10.2013

  • Проектування бази даних та інтерфейсу програми. Розробка бази даних за допомогою Firebird 2.5. Контроль коректності вхідних та вихідних даних. Додавання та редагування інформації. Вплив електронно-обчислювальних машин на стан здоров'я користувачів.

    дипломная работа [4,7 M], добавлен 12.10.2015

  • Використання баз даних та інформаційних систем. Поняття реляційної моделі даних. Ключові особливості мови SQL. Агрегатні функції і угрупування даних. Загальний опис бази даних. Застосування технології систем управління базами даних в мережі Інтернет.

    курсовая работа [633,3 K], добавлен 11.07.2015

  • Система управління базами даних (СУБД) як сукупність програм загального користування. Створення СУБД у середовищі MS Access для підприємства послуг зв’язку "NewTone". Основні споживачі послуг підприємства. Ієрархічна структура елементів бази даних.

    курсовая работа [5,0 M], добавлен 24.02.2011

  • Створення вжитків зі сторони сервера баз даних. Оголошення обмежень цілісності в таблиці визначень або з використанням механізму тригерів баз даних. Описання мови команд SQL*Plus як інтерактивної системи, невід'ємної для бази даних Oracle і вжитків.

    реферат [17,3 K], добавлен 09.08.2011

  • Поняття бази даних та основне призначення системи управління. Access як справжня реляційна модель баз даних. Можливості DDE і OLE. Модулі: Visual Basic for Applications програмування баз даних. Система управління базами даних Microsoft SQL Server 2000.

    реферат [41,2 K], добавлен 17.04.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.