Смекни!
smekni.com

Visual C++. Бази даних Укр. (стр. 4 из 7)

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

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

Строкові функції

Деякі функції для роботи з рядками в ODBC SQL:

- CONCAT(вираз1, вираз2) – приєднання вираз1 до вираз2;

- INSERT(вираз1, початок, довжина, вираз2) – повертає вираз1, в якому видалена довжина символів, починаючи з символу початок, замість яких, починаючи з символу початок, вставлено вираз2;

- LCASE(вираз) – повертає вираз, символи якого перетворені на відповідні з нижнього регістру;

- LENGTH (вираз) – довжина вираз в символах;

- POSITION (вираз1, вираз2) – повертає позицію вираз1 в вираз2;

- UCASE(вираз) – повертає вираз, всі символи якого перетворені на відповідні верхнього регістру.

Числові функції.

Деякі числові функції в ODBC SQL:

- ABS(вираз) – повертає абсолютне значення вираз;

- MOD(вираз1, вираз2) – повертає остачу від ділення вираз1 на вираз2;

- POWER(вираз1, вираз2) – повертає вираз1 в степені вираз2;

- RAND(вираз) – повертає випадкове число. Вираз задає кількість випадкових чисел;

- ROUND(вира1, вираз2) – повертає вираз1 округлене з точністю до вираз2 знаків після коми;

- SQRT(вираз) – повертає квадратний корінь з вираз.

Функції дати та часу.

Деякі функції дати та часу в ODBC SQL:

- CURDATE() – повертає поточну дату;

- CURTIME() – повертає поточний час;

- NOW() – повертає поточний час і дату в форматі дата/час;

Системні функції.

Деякі системні функції в ODBC SQL:

- DATABASE() – повертає ім’ бази даних, що використовується в поточному сеансі;

- USER() – повертає ім’я користувача бази даних, що використовується в поточному сеансі;

Перетворення типів даних.

Функція перетворення типів даних в ODBC SQL:

CONVERT(вираз, тип_даних)

Параметр тип_даних може приймати такі значення:

-SQL_BINARY

-SQL_CHAR

-SQL_DECIMAL

-SQL_DOUBLE

-SQL_FLOAT

-SQL_INTEGER

-SQL_LONGVARCHAR

-SQL_NUMERIC

-SQL_REAL

-SQL_SMALLINT

-SQL_TYPE_DATE

-SQL_TYPE_TIME

-SQL_TYPE_TIMESTAMP

-SQL_VARCHAR

Об’єднання.

Операція об’єднання повертає рядки, що сформовані з даних двох або більше різних таблиць і об’єднані в процесі виконання запиту.

SELECT Name, Prices FROMProducts, Prices WHERE Products.ID=Prices.ID

При виконанні цього оператора будуть виділені всі рядки з таблиці Products, що відповідають рядкам з таблиці Prices. Це так зване внутрішнє об’єднання. Для того, щоб створити запит, який повертає рядки, що не мають відповідності в одній з цих таблиць, треба використовувати зовнішнє об’днання.

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

SELECT * FROM

{oj Employee LEFT OUTER JOIN Department ON

Employee.DeptNum=Department.DeptNum}

LEFT OUTER JOIN використовується для того, щоб гарантувати, що в результуючій множині будуть представлені всі рядки з лівої таблиці (Employee). Щоб включити всі рядки з правої таблиці можна використовувати RIGHTOUTER JOIN, а для вибору всіх рядків з обох таблиць – FULLOUTER JOIN.

Вкладені запити.

Вкладений запит може використовуватися з предикатом EXISTS (NOT EXISTS).

Вибрати список відділів, що не укомплектовані працівниками:

SELECT DeptName FROM Department

WHERE DeptNum NOT EXISTS (SELECT * FROM Employee)

Повертається список відділів, номера яких не містяться в жодному запису таблиці Employee.

Можна також використовувати предикати IN та NOT IN.

Дуже часто вкладені запити використовуються для операцій порівняння з клячовими словами ANY та ALL.

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

SELECT Student_DCSS.Name FROM Student_DCSS

WHERE Student_DCSS.Rating >ALL

(SELECT Student_FNS.Rating FROM Student_FNS)

Об’єднані запити.

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

SELECT * FROM Students_DCSS

UNION

SELECT * FROM Students_FNS

Оператор INSERT.

За допомогою оператора INSERT можна вставити дані в певне місце в базі даних.

INSERT INTO Students_vipuskniki

VALUES (1, ‘Sveta Fiyalka’, ‘DCSS’, 95)

Оператор DELETE.

DELETE FROM Student WHERE Student.Rating<61

Оператор UPDATE.

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

UPDATE Employee SET Salary+100

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 інкапсулює функціональні можливості оператора ODBCSQL і набору рядків, що повертаються оператором. Змінні-члени цього класу ідентифікують дескриптор оператора 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_).

Функції RFX_

Ім’я функції Тип поля Тип SQL ODBC
FX_Binary CByteArray SQL_BINARY, SQL_LONGVARBINARY,SQL_VARBINARY
RFX_Bool BOOL SQL_BIT
RFX_Byte BYTE SQL_TINYINT
RFX_Date CTime SQL_DATE, SQL_TIME, SQL_TIMESTAMP
RFX_Double double SQL_DOUBLE
RFX_Int int SQL_SMALLINT
RFX_Long LONG SQL_INTEGER
RFX_LongBinary CLongBinary SQL_LONGVARCHAR
RFX_Single float SQL_REAL
RFX_Text Cstring SQL_CHAR, SQL_DECIMAL, SQL_LONGVARCHAR, SQL_NUMERIC,SQL_VARCHAR

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

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

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

Створення структури застосування ODBC за допомогою AppWizard.

Перш ніж MFS-застосування ODBC буде створено за допомогою AppWizard, необхідно ідентифікувати джерело даних, яким буде оперувати застосування. Джерело даних повинно бути ідентифіковано і інстальовано за допомогою програми установки ODBC.

Нехай джерелом даних буде база даних Microsoft Access. Для доступу до цього файлу потрібен драйвер Microsoft Access Driver.

База даних Student складається з 3 таблиць, що містять інформацію про студента, предмети та оцінки студента з цих предметів. В базі даних Access також створено запити, які оперують з даними бази.

Щоб створити структуру застосування ODBC треба запустити майстер AppWizard. Нехай проект буде мати назву - MFSDB.

Проекти, створені таким чином, можуть бути однодокументними, багатодокументними або діалоговими застосуваннями. Однодокументне застосування може представляти користувачу в будь-який момент лише один файл. Найкращим прикладом такого застосування є текстовий редактор Notepad в Windows. Багатодокументне застосування може одночасно представляти декілька документів, кожний у своєму вікні. Більшість текстових редакторів, таких як Microsoft Word, є багатодокументними застосуваннями. Інтерфейс користувача діалогового застосування являє собою одне діалогове вікно. Такі застосування використовуються, якщо взаємодію з користувачем можна провести в одному шаблоні діалогового вікна. Прикладом діалогового застосування є Таблиця символів (Character Map) Windows.