- •О.С. Зеленський
- •Розділ 9. Структура створення додатків
- •9.1. Загальна структура додатків
- •9.2. Додатки без використання архітектури «Документ-вид»
- •9.2.1. Приклад додатку реєстрації wnd-класу вікна
- •9.2.2. Створення та видалення дочірніх вікон без використання архітектури «Документ-Вид»
- •9.2.3. Створення дочірніх вікон без використання архітектури «Документ-Вид» (переключення вікон з використанням функції ShowWindow)
- •9.3. Архітектура «Документ-Вид»
- •Idr_mainframe формат строкового ресурсу.
- •9.3.1. Приклад додатку з використанням архітектури «Документ-Вид»
- •9.3.2. Види у архітектурі «Документ-Вид»
- •9.3.3. Створення видів у архітектурі «Документ-Вид» (переключення видів з використанням функції ShowWindow)
- •9.3.4. Робота з документами та видами на прикладі додатку SingleTemplate
- •9.4. Додатки mdi, робота з шаблонами
- •9.4.1. Приклад додатку mdi з одним шаблоном
- •9.4.2. Приклад додатку mdi з декількома шаблонами
- •Контрольні питання
- •Розділ 10. Робота з базами даних з використанням об'єктів ado
- •10.1.1. Ініціалізація об'єктів com з використанням директиви #import
- •10.1.2. Підтримка класів сом
- •10.2. Об'єкт Connection
- •10.3. Об'єкт Command
- •10.4. Об'єкт Recordset
- •10.5. Об'єкт Field і колекція Fields
- •10.6. Об'єкт Error і колекція Errors
- •10.8. Коротка характеристика структури мови sql
- •10.9. Синтаксис оператора вибору Select
- •10.10. Приклад програмування об'єктів ado
- •10.11. Опис розробленого навчального пакету ado6 для роботи з базами даних access та MySql
- •Int tip_bd; // тип бд 1- ms access, 2- MySql, 3 - xml
- •Void Connect_Baza(cString str);
- •Void ErrMessage(_com_error &ce);
- •If(pConn.CreateInstance("adodb.Connection"))
- •If(pRecordset.CreateInstance("adodb.RecordSet"))
- •Void cAdo6Doc::ErrMessage(_com_error &ce)
- •Void cAdo6Doc::OnMsaccess()
- •Void cAdo6Doc::OnMysql()
- •Void cAdo6Doc::OnXmlRead()
- •Void cAdo6Doc::Connect_Baza(cString str)
- •Virtual void DoDataExchange(cDataExchange* pDx);
- •Void cAdo6Dlg::DoDataExchange(cDataExchange* pDx)
- •Void cAdo6Dlg::Struct_MySql()
- •Void cAdo6Dlg::OnSelchangeListBaza()
- •Void cAdo6Dlg::OnVibor_bd()
- •Void cAdo6Dlg::AccessOpen()
- •Void cAdo6Dlg::xmlOpen()
- •Void cAdo6Dlg::Structura_bd()
- •Void cAdo6Dlg::OnSelchangeListTab()
- •Void cAdo6Dlg::show(int kod, int kod_bd)
- •Void cAdo6Dlg::Recordset_Baza(cString str)
- •Void cAdo6Dlg::OnClose()
- •10.11.2. Формування списку бд (MySql), відкриття бази даних (ms access), відкриття xml-файлу, формування списку таблиць (MySql і ms access) та полів (MySql, ms access, xml)
- •Void cAdo6Dlg::OnSelchangeListTab()
- •1. Обрану таблицю необхідно брати в зворотні лапки "`", щоб виключити помилку в тому випадку, якщо в імені таблиці будуть зустрічатися пробіли.
- •10.11.3. Робота з sql-запитами
- •Void cAdo6Dlg::OnZapros_Select()
- •If (str_query.Mid(0,6).Compare("select"))
- •If(!baza.Left(3).Compare("otl") &&
- •Void cAdo6Dlg::Recordset_Baza(cString str)
- •Void cado6Dlg::OnZapros_Make()
- •Vr_zap.Format(" Запрос выполнен за %f сек ",conec - nach);
- •10.11.4. Видалення, сортування, пошук, фільтрація, оновлення набору записів
- •Void cado6Dlg::OnZapis_Delete()
- •Void cado6Dlg::OnCheck_Sort()
- •Void cado6Dlg::OnFind()
- •0L,adSearchForward,bb);
- •Void cado6Dlg::OnFilter()
- •Void cado6Dlg::OnVozvrat()
- •10.11.5. Переходи по записах
- •Void cado6Dlg::OnButtonFirst()
- •Void cado6Dlg::OnButtonLast()
- •Void cado6Dlg::OnButtonLeft()
- •Void cado6Dlg::OnButtonRight()
- •Void cado6Dlg::OnButtonRecno()
- •Void cado6Dlg::OnButtonPgup()
- •Void cado6Dlg::OnButtonPgdn()
- •Void cado6Dlg::OnButtonBookmark()
- •10.11.6. Запис даних до xml-файлу
- •Void cAdo6Dlg::OnButtonSave()
- •10.11.7. Кнопки, призначені тільки для роботи з otl_tab
- •Void cado6Dlg::OnZapis_Add1()
- •Void cado6Dlg::OnZapis_Add2()
- •Void cado6Dlg::OnZapis_Update1()
- •Void cado6Dlg::OnZapis_Update2()
- •Void cado6Dlg::OnFormir_bd()
- •Void cAdo6Dlg::OnValues_Fields()
- •10.12. Використання у якості джерела даних електронної таблиці Excel
- •Контрольні питання
- •Завдання
- •Розділ 11. Програмування для інтернет
- •11.1. Створення броузера
- •11.3. Використання протоколу http
- •If ((pInternetSession)
- •11.4. Використання протоколу ftp
- •Контрольні питання
- •Розділ 12. Створення елементів activex
- •12.1. Створення елементів ActiveX
- •Invalidate();
- •12.2. Тестування елемента ActiveX
- •12.4. Створення елемента ActiveX на базі стандартних елементів
- •12.5. Відображення елементів ActiveX
- •Контрольні питання
- •Розділ 13. Налагодження програм
- •Int data[5];
- •Invalidate();
- •13.3. Установка точки переривання
- •13.2. Покрокове виконання програми
- •13.4. Перевірка значень змінних під час виконання програми
- •Контрольні питання
- •Список літератури
- •Додатки
10.6. Об'єкт Error і колекція Errors
Об'єкт ADO Connection містить колекцію Errors, що включає об'єкти Error з конкретною інформацією про помилки, які можуть відбуватися під час з'єднання в рамках однієї операції. У більшості випадків об'єкти Error генеруються тільки при поверненні помилки системою бази даних, а не при помилках ADO під час виконання процедур.
УВАГА !!! Багато помилок ADO не потрапляють до колекції Errors, тому рекомендується використовувати універсальну технологію обробки винятків try catch() з використанням класу _com_error. Дана технологія розглянута у розділі 10.2 при роботі з об'єктом Connection.
10.7. Використання інтерфейсів C++ ADO
Інтерфейси ADO є набором СОМ-компонентів. Отже, в Visual C++ їх можна використовувати кількома способами. У якості одного із способів можна використовувати інтерфейси ADO за допомогою інтерфейсів C++, що поставляються Microsoft у складі Visual C++. Для використання інтерфейсів ADO в C++ необхідно, щоб в додатку були присутні такі рядки включення:
#include <adoid.h> // ідентифікатори класів та інтерфейсів
#include <adoint.h> // інтерфейс ADO
#include <icrsint.h> // розширення прив'язки даних для ADO 2.0
У файлах оголошені ідентифікатори класів та інтерфейсів ADO, а також сам інтерфейс і розширення для прив'язки даних.
Ця технологія не наводиться у посібнику, тому що за основу взято більш універсальна технологія роботи з інтерфейсами ADO, заснована на використанні імпорту, яка значно спрощує використання об'єктів з бібліотеки типів COM в додатках C++.
10.8. Коротка характеристика структури мови sql
Мова SQL. Формування запитів до бази даних
SQL (Structured Query Language - Структурована Мова Запитів) - стандартна мова запитів по роботі з реляційними БД. Мова SQL з'явивлася після реляційної алгебри, і її прототип був розроблений в кінці 70-х років компанією IBM. Він реалізований у першому прототипі реляційної СУБД фірми IBM System R. Надалі ця мова застосовувалася у багатьох комерційних СУБД і в силу свого широкого розповсюдження стала стандартом для мов маніпулювання даними в реляційних СУБД.
Перший міжнародний стандарт мови SQL був прийнятий в 1989 р. (його називають SQL/89 або SQL1). Іноді його також називають стандартом ANSI / ISO і переважна більшість СУБД підтримують цей стандарт повністю.
В кінці 1992 р. був прийнятий новий міжнародний стандарт мови SQL, який називають SQL/92 або SQL2. Більшість виробників СУБД внесли зміни у свої продукти, щоб вони відповідали цьому стандарту.
У 1999 р. з'явився новий стандарт, названий SQL3.
Для постачальників СУБД стандарт - це мета, яка гарантує правильний напрямок робіт.
SQL не можна віднести до традиційних мов програмування: вона не містить традиційних операторів, керуючих ходом виконання програми, операторів опису типів і ін. Вона містить лише набір стандартних операторів доступу до даних, що зберігаються в БД. Оператори мови SQL вбудовуються в базову мову програмування, наприклад, C++, Visual Basic, Visual FoxPro і т.д. Крім того, оператори SQL можуть виконуватися безпосередньо в інтерактивному режимі.
Типи даних
У мові SQL/89 підтримуються наступні типи даних:
CHARACTER(n) або CHAR(n) - символьні рядки постійної довжини в n символів. Під кожне значення завжди відводиться n символів. Якщо реальне значення менше, відсутні символи автоматично доповнюються пробілами.
NUMERIC[(n, m)] точні числа, де n - загальна кількість цифр у числі, m - кількість цифр ліворуч від десяткової точки.
DECIMAL[(n, m)] або DEC [(n, m)] – те ж, що і NUMERIC[(n, m)].
INTEGER або INT – цілі числа 4 байта.
SMALLINT – цілі числа 2 байта.
FLOAT[(n)] – числа з плаваючою точкою n байт.
REAL і DOUBLE PRECISION – числа з плаваючою точкою.
У стандарті SQL/92 додані наступні типи даних:
VARCHAR - рядки символів змінної довжини.
NCHAR(n) - рядки локалізованих (Unicode) символів постійної довжини.
NVARCHAR - рядки локалізованих (Unicode) символів змінної довжини.
BIT(n) - рядок бітів постійної довжини.
BIT VARING - рядок бітів змінної довжини.
DATE - календарна дата.
TIMESTAMP(n) - дата та час, де n - точність.
Більшість комерційних СУБД підтримують додаткові типи даних, які не визначені в стандарті. Специфіка реалізації окремих типів даних серйозним чином впливає на результати запитів до БД. Тому, при перенесенні додатків з однієї СУБД на іншу, потрібно бути дуже уважним. На різних платформах вони можуть працювати по-різному, одна з причин - розбіжність у реалізації типів даних.
Структура SQL
SQL є повною мовою, в ній присутні не тільки операції запитів, але й оператори, відповідні мови опису даних. Крім того, мова містить оператори, призначені для управління (адміністрування) БД.
SQL містить наступні розділи (табл. 10.10):
Таблиця 10.10
Розділи мови SQL
|
Оператор |
Зміст |
Дія |
|
Оператори визначення даних DDL (Data Definition Language) | ||
|
CREATE TABLE |
Створити таблицю |
Створює нову таблицю в БД |
|
DROP TABLE |
Видалити таблицю |
Видаляє таблицю з БД |
|
ALTER TABLE |
Змінити таблицю |
Змінює структуру існуючої таблиці або обмеження цілісності, задані для цієї таблиці |
|
CREATE VIEW |
Створити вид |
Створює віртуальну таблицю (динамічний набір даних), відповідну деякому SQL-запиту |
|
ALTER VIEW |
Змінити вид |
Змінює раніше створену віртуальну таблицю |
|
DROP VIEW |
Видалити вид |
Видаляє раніше створену віртуальну таблицю |
|
CREATE INDEX |
Створити індекс |
Створює індекс для деякої таблиці для забезпечення швидкого доступу до атрибутів, що входять в індекс |
|
DROP INDEX |
Видалити індекс |
Видаляє раніше створений індекс |
|
Мова запитів DQL (Data Query Language) | ||
|
SELECT |
Вибрати рядки |
Оператор, який замінює всі оператори реляційної алгебри і дозволяє сформувати результуюче відношення, відповідає запиту |
|
Оператори маніпулювання даними DML (Data Manipulation Language) | ||
|
DELETE |
Видалити рядки |
Видаляє один або кілька рядків, відповідно умовам фільтрації, з базової таблиці. Застосування оператора узгоджується з принципами підтримки цілісності, тому цей оператор не завжди може бути виконаний коректно, навіть якщо синтаксично він записаний правильно |
|
INSERT |
Вставити рядок |
Вставляє один рядок в базову таблицю. Допустимі модифікації оператора, при яких відразу кілька рядків можуть бути перенесені з однієї таблиці або запиту в базову таблицю |
Продовження таблиці 10.10
|
Оператор |
Зміст |
Дія |
|
UPDATE |
Оновити рядок |
Оновлює значення одного або кількох полів (стовпців) в одному або декількох рядках, що задовольняють умові фільтрації |
|
Засоби управління транзакціями | ||
|
COMMIT |
Завершити транзакцію |
Завершує взаємозв'язану комплексну обробку інформації, об'єднану в транзакцію |
|
ROLLBACK |
Відкат транзакції |
Скасувати зміни, зроблені в ході виконання транзакції |
|
SAVEPOINT |
Зберегти проміжну точку виконання транзакції |
Зберегти проміжний стан БД, позначити його для того, щоб можна було в подальшому до нього повернутися |
|
Засоби адміністрування даних | ||
|
ALTER DATABASE |
Змінити БД |
Змінити набір основних об'єктів в базі даних, обмежень, що стосуються всієї бази даних |
|
ALTER PASSWORD |
Змінити пароль |
Змінити пароль всієї бази даних |
|
CREATE DATABASE |
Створити БД |
Створити нову базу даних, визначив основні параметри для неї |
|
DROP DATABASE |
Видалити БД |
Видалити існуючу базу данних (якщо Ви маєте на це право) |
|
GRANT |
Надати права |
Надати права доступу на ряд дій над деяким об'єктом БД |
|
REVOKE |
Позбавити прав |
Позбавити права доступу до деякого об'єкту БД або деяких дій над об'єктом |
|
Програмний SQL | ||
|
DECLARE |
Визначає курсор для запиту |
Визначає деяке ім'я і визначає пов'язаний з ним запит до БД, який відповідає віртуальному набору даних |
|
OPEN |
Відкрити курсор |
Формує віртуальний набір данних, відповідає опису зазначеного курсору і поточному стану БД |
|
FETCH |
Зчитати рядок з безлічі рядків, визначених набором |
Зчитує черговий рядок, заданий параметром команди, з віртуального набору даних, який відповідає відкритому курсору |
|
CLOSE |
Закрити курсор |
Припиняє доступ до віртуального набору даних, що відповідає зазначеному курсору |
|
PREPARE |
Підготувати оператор SQL до динамічного виконання |
Згенерувати план виконання запиту, відповідного заданому оператору SQL |
|
EXECUTE |
Виконати оператор SQL, раніше підготовлений до виконання |
Виконує раніше підготовлений план запитів |
