p>
# define CONNSTR «DBQ = Student.XLS; DRIVER = (Microsoft Excel Driver (*. xls )}» p>
# define CONNLEN (sizeof (CONNSTR) -1) p>
# define SQLTRY (x, y) p>
( p>
rc = y; p>
if (rc! = SQL_SUCCESS) p>
( p>
char szState [6]; p>
char szMsg [255]; p>
SDWORD sdwNative; p>
SWORD swMsgLen; p>
SQLError (hEnv, hDBC, hStmt, szState, & sdwNative, szMsg, sizeof (szMsg), & swMsgLen); p>
printf ( «Error% d performing% snSQLState =% snSQL message =% sn», rc, x, szState, szMsg); p>
goto Terminate; p>
) p>
) p>
void main (void) p>
( p>
SQLHENV hEnv = 0; p>
SQLHDBC hDBC = 0; p>
SQLHSTMT hStmt = 0; p>
SQLCHAR szConnStr [255]; p>
SQLCHAR szStmt [255]; p>
SQLCHAR szName [255]; p>
SQLCHAR szFaculty [255]; p>
long nRating; p>
SWORD cbConnStr; p>
RETCODE rc; p>
SDWORD sdwNLen; p>
SDWORD sdwFLen; p>
SDWORD sdwRLen; p>
int i; p>
char szResult [1000]; p>
SQLTRY ( «SQLAllocEnv», SQLAllocEnv (& hEnv)) p>
SQLTRY ( «SQLAllocConnect», SQLAllocConnect (hEnv, & hDBC)) p>
SQLTRY ( «SQLDriverConnect», SQLDriverConnect (hDBC, NULL, CONNSTR, CONNLEN, szConnStr, sizeof (szConnStr),
& cbConnStr, SQL_DRIVER_NOPROMPT)) p>
SQLTRY ( «SQLAllocStmt», SQLAllocStmt (hDBC, & hStmt)) p>
sprintf (szStmt, «SELECT * FROM [Sheet1 $]»); b> p>
SQLTRY ( «SQLPrepare», SQLPrepare (hStmt, szStmt, strlen (szStmt ))) p>
SQLTRY ( «SQLBindCol», SQLBindCol (hStmt, 1, SQL_C_CHAR, (PTR) szName, sizeof (szName), & sdwNLen)) p>
SQLTRY ( «SQLBindCol», SQLBindCol (hStmt, 2, SQL_C_CHAR, (PTR) szFaculty, sizeof (szFaculty), & sdwFLen)) p>
SQLTRY ( «SQLBindCol», SQLBindCol (hStmt, 3, SQL_C_SLONG, (PTR) & nRating, sizeof (nRating), & sdwRLen)) p>
SQLTRY ( «SQLExecute», SQLExecute (hStmt)) p>
for (i = 1; (rc = SQLFetch (hStmt)) == SQL_SUCCESS; i ++) p>
( p>
printf ( «Record #% dtName:% stFaculty:% stRating:% dn», i, szName, szFaculty, nRating); p>
) p>
if (rc! = SQL_NO_DATA_FOUND) p>
( p>
SQLTRY ( «SQLFetch», rc) p>
) p>
printf ( «Successfully completed.n »); p>
Terminate0: p>
if (hStmt) SQLFreeStmt (hStmt, SQL_CLOSE); p>
if (hDBC) SQLDisconnect (hDBC); p>
if (hDBC) SQLFreeConnect (hDBC); p>
if (hEnv) SQLFreeEnv (hEnv); p>
SQLTRY ( «SQLAllocEnv», SQLAllocEnv (& hEnv)) p>
SQLTRY ( «SQLAllocConnect», SQLAllocConnect (hEnv, & hDBC)) p>
SQLTRY ( «SQLDriverConnect», SQLDriverConnect (hDBC, NULL, CONNSTR, CONNLEN, szConnStr, sizeof (szConnStr), & cbConnStr,
SQL_DRIVER_NOPROMPT)) p>
SQLTRY ( «SQLAllocStmt», SQLAllocStmt (hDBC, & hStmt)) p>
sprintf (szStmt, «SELECT * FROM [Sheet1 $] WHERE Rating> 91 ORDER BY Rating DESC »); b> p>
SQLTRY ( «SQLPrepare», SQLPrepare (hStmt, szStmt, strlen (szStmt ))) p>
SQLTRY ( «SQLBindCol», SQLBindCol (hStmt, 1, SQL_C_CHAR, (PTR) szName, sizeof (szName), & sdwNLen)) p>
SQLTRY ( «SQLBindCol», SQLBindCol (hStmt, 2, SQL_C_CHAR, (PTR) szFaculty, sizeof (szFaculty), & sdwFLen)) p>
SQLTRY ( «SQLBindCol», SQLBindCol (hStmt, 3, SQL_C_SLONG, (PTR) & nRating, sizeof (nRating), & sdwRLen)) p>
SQLTRY ( «SQLExecute», SQLExecute (hStmt)) p>
for (i = 1; (rc = SQLFetch (hStmt)) == SQL_SUCCESS; i ++) p>
( p>
printf ( «Record #% dtName:% stFaculty:% stRating:% dn», i, szName, szFaculty, nRating); p>
) p>
if (rc! = SQL_NO_DATA_FOUND) p>
( p>
SQLTRY ( «SQLFetch», rc) p>
) p>
printf ( «Successfully completed.n »); p>
Terminate: p>
if (hStmt) SQLFreeStmt (hStmt, SQL_CLOSE); p>
if (hDBC) SQLDisconnect (hDBC); p>
if (hDBC) SQLFreeConnect (hDBC); p>
if (hEnv) SQLFreeEnv (hEnv); p>
) p>
Простий макрос SQLTRY використовується для повідомлення про помилки. p>
Після обов'язкових звертань до функцій SQLAllocEnv та SQLAllocConnect програма викликає SQLDriveConnect. Цей виклик робить
можливим відкриття таблиці, яка не встановлювалась з використанням програми початкової установки ODBC і робить це без відображення інтерфейса користувача. Для
відкриття таблиці використовуються константи CONNSTR та CONNLEN. Як тільки підключення до бази
даних успішно завершено, виконуються послідовно два оператори SQL: p>
1) SELECT * FROM [Sheet $] b> - Вибрати всі записи з таблиці Student. p>
2) SELECT * FROM b> [Sheet $] WHERE Rating> 91 ORDER BY Rating DESC --
b> Вибрати записи з таблиці Student про тих студентів, що мають рейтинг більший за 91, та впорядкувати
виведений список за зменшенням рейтингів студентів. p>
Ім'я Sheet $ - b> це ім'я, яке надається драйвером для першої таблиці в робочій книзі Excel. Оператор SQL використовується для
отримання полів всіх записів. p>
Наступні 4 звертання прив'язують змінні до стовпчиків таблиці. Таке призначення функції SQLBindCol. Після послідовного
отримання записів, значення полів переміщуються в ці змінні. p>
Самі записи отримуються за допомогою функції SQLFetch і відображаються з використанням printf. Функція SQLFetch викликається до тих пір, поки
значення, що повертається нею, не відрізняється чим-небудь від SQL_SUCCESS. Значення, що повертається, SQL_NO_DATA_FOUND показує, що отриманий останній запис, все інше є помилкою
і обробляється відповідним чином. p>
Програма завершується обов'язковими звертаннями до функцій SQLFreeStmt, SQLDisconnect, SQLFreeConnect та SQLFreeEnv для звільнення ресурсів
і закінчення зв'язку з джерелом даних. p>
При запуску цієї програми забезпечується такий вивід: p>
p>
Стандарт SQL та ODBC. p>
Синтаксис для ODBC заснований на стандарті ANSI SQL-92. p>
Майже кожна СУБД використовує свій власний діалект SQL, синтаксис якого може трохи відрізнятися. Кожен діалект
може підтримувати різний набір властивостей. Драйвер ODBC для конкретної бази даних забезпечить необхідний переклад загального SQL на специфічний діалект, що
використовується в певній СУБД. p>
Існує три основні групи операторів SQL: p>
мова визначеня даних DDL (Data Definition Language) використовується для задання
структури бази даних і створення її об'єктів; p>
мова керування даними DCL (Data Control Language) - для роботи з правами користувача
на конкретні об'єкти; p>
мова маніпулювання даними DML (Data Manipulation Language) - для виконання інших операцій
таких, як додавання і модифікація даних, а також виконання запитів. p>
Всі ці мови є частиною SQL, а не є окремими мовами, хоча в більшості застосувань використовуються лише оператори, що відносяться до
конкретної групи. p>
У DDL b> для роботи з об'єктами використовуються такі оператори SQL: p>
CREATE - створює новий об'єкт; p>
ALTER - модіфікує існуючий об'єкт; p>
DROP-видаляє об'єкт. p>
Ці оператори використовуються для роботи з різними об'єктами бази даних таких, як таблиці, індекси і
представлення таблиць. Для кожного з цих типів об'єктів використовується різний синтаксис оператора. p>
У таблицях - основних об'єктах реляційних базах даних - можуть міститися дані різних типів.
Типи даних SQL, згруповані згідно рівням підлеглості ODBC SQL. P>
Мінімальний рівень: p>
- CHAR (n) - символьної рядок з n символів фіксованої довжини. p>
- VARCHAR (n) - символьної рядок змінної довжини, але не більше n символів. p>
- LONG VARCHAR - символьної рядок змінної необмеженої довжини. p>
Базовий рівень: p>
- DECIMAL (p, s) або NUMERIC (p, s) - значення з плавучу комою. p>
- SMALLINT-двохбайтове ціле. p>
- INTEGER - чотрьохбайтове ціле. p>
- REAL - чотірьохбайтове значення з плавучу комою. p>
- FLOAT або DOUBLE PRECISION - восьмібайтове значення з плавучу комою. p>
Розширений рівень: p>
- BIT - один біт. p>
- TINYINT - однобайтових ціле. p>
- BIGINT - восьмібайтове ціле. p>
- BINARY (n) - двійкове поле фіксованої довжини, що складається з n байт. p>
- VARBINARY (n) - двійкове поле змінної довжини, що не перевищує n байт. p>
- LONG VARBINARY-двійкове поле змінної необмеженої довжини. p>
- DATE-значення дати. p>
- TIME - значення часу. p>
- TIMESTAMP - значення, що містить час і дату. p>
Створення таблиці. b> p>
CREATE TABLE Student ( p>
StudID UNTEGER, p>
StudName VARCHAR (20)) p>
Стовпчики таблиці можна довізначіті, якщо додати після типу даних додаткові модифікатори.
Найчастіше використовується модіфікатор NOT NULL, який вказує на те, що значення для цього стовпця
повинно бути задано. Можна також вимагати, щоб конкретне поле в таблиці не повторювалось. Для цього використовується модіфікатор UNIQUE. Можна також задати для стовпця значення, що буде
використовуватися по замовченню, якщо не було задано явних значень. Для цього служити модіфікатор DEFAULT. p>
Видалення таблиці. b> p>
DROP TABLE Student p>
У опрераторі видалення можуть використовуватися ключові слова CASCADE та RESTRICT.
Якщо в операторі вказано ключове слово CASCADE, то при видаленні таблиці видаляються також всі
представлення або обмежувачі цілостності, пов'язані з цією таблицею. Модіфікатор RESTRICT не дозволить
видалити таблицю, якщо на неї є посилання в яких-небудь представлених або обмежувача цілостності. p>
Зміна таблиці. b> p>
Додавання стовпців: p>
ALTER TABLE Student ADD COLUMN Course INTEGER p>
Видалення стовпців: p>
ALTER TABLE Student DROP COLUMN Course p>
Як і при видаленні таблиці, тут можна використовувати ключові слова CASCADE та RESTRICT.
При включенні модіфікатору CASCADE видаляються також всі представлення і обмежувачі, які посилаються на відаляємій
стовпець. Використання модіфікатора RESTRICT запобігає видаленню стовпця, якщо на нього є посилання в
представлених або обмежувача цілостності посилань. p>
Індекси. b> p>
Це об'єкти баз даних, що забезпечують більш ефективний доступ до рядків таблиці. Індекс
продівляється рядки таблиці на основі значень певного стовпця або декількох стовпців. Індекси можуть значно підвищити продуктивність бази даних при
виконанні певних типів операцій пошуку, проте для їх підтримання треба великий обсяг динамічної пам'яті. Якщо для одної таблиці створити багато різних
індексів, продуктивність всього застосування значно зменшиться. p>
CREATE [UNIQUE] INDEX StudIndex ON Student (StudID) [ASC, DESC] p>
ASC - в зростаючому порядку p>
DESC - в спадаючому порядку p>
Змінити індекс неможливо, а можна лише видалити його. p>
DROP INDEX StudIndex p>
Представлення. b> p>
Педставлення таблиць, або просто представлення можна розглядати як вид віртуальної таблиці.
З точки зору застосувань користувачів, представлення таблиці виглядає як і сама таблиця. Проте в представленні зберігаються не його власні дані, а лише
посилання на дані, що містяться в таблицях. В цілому представлення використовуються для відображення даних, що містяться в таблицях, різними способами
зручними для користувача. Представлення можна використовувати для відображення підмножіні стовпців однієї або декількох таблиць, що віповідають деякому типу
запита. Це дозволяє представляти таблицю з потрібними даними, хоча в дійсності стуктура бази даних може бути іншою, сформованою виходячи з міркувань
цілостності та продуктивності. Представлення таблиць зручні для забезпечення безпеки. За допомогою представлення можна забезпечити доступ користувачів до
деякої підмножіні стовпців в таблиці, залишаючи захищеними інші стовпці. Представлення служать і для забезпечення логічної незалежності даних, завдяки
чому зміни занесені в реальні таблиці баз даних не відображаються на застосуваннях користувача. Якщо таблиця в базі даних буде змінена, то можна
буде просто настроїти представлення у відповідності з новою структурою таблиці і не треба буде повертатися і вносити зміни в кожне написане застосування. p>
CREATE VIEW MyView AS SELECT * FROM TABLE MyTable p>
Представлення відображає всі стовпці таблиці p>
CREATE VIEW MyView (Id, Name) AS SELECT (StudID, Studname) FROM Student p>
Існуюче уявлення не можна модифікувати, але можна його видалити. p>
DROP VIEW MyView p>
Мова керування даними b> DCL b> . b> p>
Дозволяє працювати з правами користувачів на об'єкти в базі даних. p>
Мова SQL дозволяє присвоїти групі користувачів певні права на деякий об'єкт. Права можуть бути такими: p>
SELECT дозволяє запитувати дані p>
INSERT дозволяє додавати нові рядки p>
DELETE дозволяє видаляти рядки p>
UPDATE дозволяє змінювати існуюючі рядки p>
REFERENCES це право потрібне лише в тому випадку, коли користувач
намагається модифікувати таблицю, що має обмеження цілостності посилань, які зсілаються на стовпці іншої таблиці. Такий користувач повинен мати право
REFERENCES на стовпці, що використовуються з обмеженнями. p>
Права присвоюються: p>
GRANT SELECT ON Student TO PUBLIC p>
GRANT SELECT, INSERT ON Student TO Sveta, Lena p>
Права UPDATE та REFERENCES можуть поширюватися на окремі стовпці. p>
GRANT UPDATE (Raiting, Credit) ON Student TO Sveta p>
Відмінити права на об'єкти можна за допомогою оператора REVOKE: p>
REVOKE SELECT ON Student FROM Lena p>
У операторі REVOKE можна використовувати модифікатори CASCADE та RESTRICT. Якщо відміняються права користувача на деяку
таблицю, то доцільно відмінити його права на всі представлення, що потребують доступу до всієї таблиці. Зробити це можна за допомогою CASCADE. Модіфікатор RESTRICT не дозволяє відмінити право доступу, яке вимагається
згідно іншим правам, що присвоєні цьому користувачу. p>
Мова маніпулювання даними b> DML b> . b> p>
Основні типи операторів: p>
SELECT p>
INSERT p>
DELETE p>
UPDATE p>
SELECT - основа SQL. Використовується кожен раз при отриманні даних. Базовий синтаксис
оператора SELECT: p>
SELECT * FROM Student p>
Інші: p>
SELECT * FROM Student WHERE Raiting> 91 AND Credit <120 p>
SELECT * FROM Student WHERE NOT Course = 4 p>
SELECT * FROM Student WHERE (Raiting/Credit) <1 p>
У SQL є спеціальний оператор для порівняння символьних рядків. Предикат LIKE вибирає рядки на основі визначеного шаблону.
У шаблон можуть входити звичайні символи, а також символи% та _. Рядок символів довільної довжини можна поставити у відповідність шаблону%, а один символ - _. p>
Вибір всіх рядків, що містять рядок Database в полі Title p>
SELECT ChapterNum FROM Chapters WHERE Title LIKE '% Database%' p>
Пошук заголовків, в яких починаючи з другої позиції міститься рядок ata p>
SELECT ChapterNum FROm Chapters WHERE Title LIKE '_ata%' p>
Для спрощення оператору WHERE використовується Предикати IN та BETWEEN: p>
SELECT StudID FROM Student WHERE Course IN (4, 3) p>
SELECT StudName FROM Student WHERE Raiting BETWEEN 91 AND 100 p>
В багатьох задачах треба знайти всі можливі значення певного поля на деякій множині рядків.
Зробити це можна за допомогою ключового слова DISTINCT, яке запобігає дублюванню елементів в
вихідній множині результатів. p>
SELECT DISTINCT Course FROM Student p>
За замовченню рядки, що повертаються після виконання запиту, подаються в довільному порядку. Змінити
це можна за допомогою оператора ORDER BY, який дозволяє вказати один або декілька стовпців, що
будуть використовуватися для сортування повертаєміх рядків. Для кожного стовпця можна вказати модіфікатор ASC або DESC. p>
SELECT StudID FROM Student ORDER BY StudID ASC p>
Якщо в операторі ORDER BY вказати декілька стовпців, то повертаємі рядки будуть відсортовані спочатку за першим
стовпцях. Потім рядки, що містять однакові значення в першому полі, будуть відсортовані ще і за іншим стовпцях. p>
Сортування рядків за зростанням значень в стовпці Salary, а рядки з однаковими значеннями в цьому полі
- За спаданням ідентифікаційних номерів EmpID: p>
SELECT EmpID, Salary FROM Employee ORDER BY Salary ASC, EmpID DESC p>
Дуже часто треба вираховувати значення на основі даних з усіх рядків, що повертаються, наприклад загальну суму значень в деякому стовпці всіх
повертаєміх рядків. Такі типи розрахунків можна виконувати за допомогою таких функцій: p>
- AVG - повертає середнє значення в стовпці. p>
- COUNT - підраховує кількість повертаєміх рядків. p>
- MAX - повертає максимальне значення для деякого стовпця в результуючій множині. p>
- MIN - повертає мінімальне значення для деякого стовпця в результуючій множині. p>
- SUM - підраховує загальну суму всіх значень для деякого стовпця в результуючій множині. p>
завдання значень дати і часу викликає особливий інтерес. Як правило, в різних системах керування
базами даних використовуються різні, а тому, несумісні, способи представлення літералів для таких значень. ODBC
забезпечує переносимої синтаксис для таких значень. p>
Для літералів дати використовуються один з наступних форматів: p>
(d 'yyyy-mm-dd') p>
Для літералів часу: p>
(t 'hh: mm: ss') p>
Для представлення значень дати і часу: p>
(ts 'yyyy-mm-dd hh: mm: ss') p>
Функції b> SQL b> . b> p>
В SQL, що використовується для ODBC, визначено багато функцій, які можна використовувати при побудові запитів або в
параметрі списку вибору, або в операторі WHERE. Ці функціі можна розподілити на 5 груп: числові,
строкові, функції дати та часу, функції системи та функції перетворення типів даних. p>
Синтаксис ODBC визначає таку форму запису при виклику функції в SQL: p>
(fn ім'я функції) p>
Строкові функції b> p>
Деякі функції для роботи з рядками в ODBC SQL: p>
- CONCAT (віраз1, віраз2) - приєднання віраз1 до віраз2; p>
- INSERT (віраз1, початок, довжина, віраз2) - повертає віраз1, в якому видалена довжина
символів, починаючи з символу початок, замість яких, починаючи з символу початок, вставлено віраз2; p>
- LCASE (вираз) - повертає вираз, символи якого перетворені на відповідні з нижнього регістру; p>
- LENGTH (вираз) - довжина вираз в символах; p>
- POSITION (віраз1, віраз2) - повертає позицію віраз1 в віраз2; p>
- UCASE (вираз) - повертає вираз, всі символи якого перетворені на відповідні верхнього регістру. p>
Числові функції. b> p>
Деякі числові функції в ODBC SQL: p>
- ABS (вираз) - повертає абсолютне значення вираз; p>
- MOD (віраз1, віраз2) - повертає остачу від ділення віраз1 на віраз2; p>
- POWER (віраз1, віраз2) - повертає віраз1 в степені віраз2; p>
- RAND (вираз) - повертає випадкове число. Вираз задає кількість випадкових чисел; p>
- ROUND (віра1, віраз2) - повертає віраз1 округлення з точністю до віраз2 знаків після коми; p>
- SQRT (вираз) - повертає квадратний корінь з вираз. p>
Функції дати та часу. b> p>
Деякі функції дати та часу в ODBC SQL: p>
- CURDATE () - повертає поточну дату; p>
- CURTIME () - повертає поточний час; p>
- NOW () - повертає поточний час і дату в форматі дата/час; p>
Системні функції. b> p>
Деякі системні функції в ODBC SQL: p>
- DATABASE () - повертає ім 'бази даних, що використовується в поточному сеансі; p>
- USER () - повертає ім'я користувача бази даних, що використовується в поточному сеансі; p>
Перетворення типів даних. b> p>
Функція перетворення типів даних в ODBC SQL: p>
CONVERT (вираз, тіп_даніх) p>
Параметр тіп_даніх може приймати такі значення: p>
SQL_BINARY p>
SQL_CHAR p>
SQL_DECIMAL p>
SQL_DOUBLE p>
SQL_FLOAT p>
SQL_INTEGER p>
SQL_LONGVARCHAR p>
SQL_NUMERIC p>
SQL_REAL p>
SQL_SMALLINT p>
SQL_TYPE_DATE p>
SQL_TYPE_TIME p>
SQL_TYPE_TIMESTAMP p>
SQL_VARCHAR p>
Об'єднання. b> p>
Операція об'єднання повертає рядки, що сформовані з даних двох або більше різних таблиць і
об'єднані в процесі виконання запиту. p>
SELECT Name, Prices FROM Products, Prices WHERE Products.ID = Prices.ID p>
При виконанні цього оператора будуть виділені всі рядки з таблиці Products, що відповідають рядки з таблиці Prices. Це так зване внутрішнє об'єднання. Для того,
щоб створити запит, який повертає рядки, що не мають відповідності в одній з цих таблиць, треба використовувати зовнішнє об'днання. p>
Вибрати рядки для кожного працівника, зокрема тих, хто ще не відноситься ні до якого відділу. p>
SELECT * FROM p>
(oj Employee LEFT OUTER JOIN Department ON p>
Employee.DeptNum = Department.DeptNum) p>
LEFT OUTER JOIN використовується для того, щоб гарантувати, що в результуючій множині будуть представлені всі рядки з лівої таблиці (Employee).
Щоб включити всі рядки з правої таблиці можна використовувати RIGHT OUTER JOIN, а для вибору всіх рядків з обох
таблиць - FULL OUTER JOIN. p>
Вкладені запити. b> p>
вкладений запит може використовуватися з предикатом EXISTS (NOT EXISTS). p>
Вибрати список відділів, що не укомплектовані працівниками: p>
SELECT DeptName FROM Department p>
WHERE DeptNum NOT EXISTS (SELECT * FROM Employee) p>
Повертається список відділів, номера яких не містяться в жодному запису таблиці Employee. p>
Можна також використовувати Предикати IN та NOT IN. p>
Дуже часто вкладені запити використовуються для операцій порівняння з клячовімі словами ANY та ALL.
p>
Скласти список всіх студентів департаменту комп'ютерних технологій, у яких рейтинг вищий, ніж у
студентів природничого факультету. p>
SELECT Student_DCSS.Name FROM Student_DCSS p>
WHERE Student_DCSS.Rating> ALL p>
(SELECT Student_FNS.Rating FROM Student_FNS) p>
Об'єднані запити b>. p>
SQL дозволяє отримати один результат через об'єднання двох незалежних запитів шляхом їх комбінації за допомогою ключового слова UNION. p>
SELECT * FROM Students_DCSS p>
UNION p>
SELECT * FROM Students_FNS p>
Оператор b> INSERT b> . b> p>
За допомогою оператора INSERT можна вставити дані в певне місце в базі даних. p>
VALUES (1, 'Sveta Fiyalka', 'DCSS', 95) p>
Оператор b> DELETE b> . b> p>
DELETE FROM Student WHERE Student.Rating <61 p>
Оператор b> UPDATE b> . b> p>
За допомогою цього оператора можна змінювати значення в існуючих рядках бази даних: p>
UPDATE Employee SET Salary +100 p>
p>
ODBC в MFS-застосуваннях. p>
Використання ODBC значно спрощується за допомогою Microsoft Foundation Classes Library b> (Бібліотека
основних класів Microsoft). Прості застосування, що отримують доступ до таблиць через ODBC, можуть бути створені всього лише декількома
натисненням кнопки миші з використанням мастерів AppWizard та ClassWizard. Існує декілька класів MFS, які підтримують доступ до баз даних і розділами
записів. p>
Класи b> ODBC b> в b> MFS b> . b> p>
Найголовніші класи, що надаються MFS для підтримки застосувань ODBC - це класи CDatabase b> та CRecordset b>. Клас CDatabase
представляє з'єднання з джерелом даних. Його змінна m_hdbc представляє дескриптор з'днання ODBC. Функції Open та Close можна використовувати для установки або закриття з'єднання з джерелом
даних. Інші функції використовуються для установки або отримання параметрів з'єднання. До таких функцій належать: GetConnect (повертає рядок з'єднання ODBC), IsOpen, GetDatabaseName, CanUpdate, CanTransact,
InWaitForDataSource, SetLoginTimeout та SetSynchronousMode. За замовченню для доступу до джерела даних
клас CDatabase використовує асинхронний режим. Виконувана асинхронно дія може бути перервана викликом функції Cancel. p>
Обробка транзанкцій підтримується функціями BeginTrans та Rollback. p>
Клас CDatabase надає також дві перекріваємі функції. Функція OnSetOptions використовується для установки стандартних опцій
з'єднання. Функція OnWaitForDataSource викликається системою для повідомлення про час обробки при виконанні довгої операції. p>
Функцію ExecuteSQL можна використовувати для безпосереднього виконання оператора SQL.