Visual C++. Бази даних Укр.
Нацiональний унiверситет тАЬКиiво-Могилянська АкадемiятАЭ
Курсова роботана тему:
тАЬVisual C++. Бази даних. тАЭ
Студентки 4-го курсудепартаменту
комптАЩютерних технологiй
Фiялка СвiтланиНауковий керiвник:
Спасiтiлiва С.О.
Киiв-1999Змiст:
ВступПрограмування баз даних за допомогою ODBC
Архiтектура ODBC
Концепцii API ODBC
Блок-схема типовоi ODBC-програми
Програма установки ODBC
Приклад програми ODBC
Стандарт SQL та ODBC
ODBC в MFS-застосуваннях
Створення структури застосування за допомогою AppWizard
ОбтАЩiкти доступу до даних (DAO
Класи DAO
Побудова застосування DAO
Вiзуальнi iнструменти баз даних
Висновки
Вступ .
В першу чергу Visual C++ - це компiлятор C++, але це також i середовище, компоненти якого, взаiмодiючи один з одним, спрощують процес розробки застосувань. Середовище Visual C++ пропонуi великi можливостi для програмування Windows-застосувань. Найхарактернiшою його компонентою i бiблiотека основних класiв Microsoft (Microsoft Foundation Classes тАУ MFS). Великий набiр класiв С++ iнкапсулюi основну частину API (Application Standart Interface) Win32 i пропонуi могутню основу для написання типових застосувань. До складу Visual C++ входить Microsoft Developer Studio Integrated Development Environment тАУ iнтегроване середовище для розробки застосувань (IDE). Visual Studio 97 тАУ остання версiя Microsoft Developer Studio тАУ i ядром системи розробки Visual C++. Вона пропонуi багато рiзних можливостей, надаi доступ до багатьох компонент системи розроблювача Visual C++, а також взаiмодii з такими засобами розробки Micrisoft, як Visual J++ або Microsoft Network Library. Visual Studio пiдтримуi iнтерфейс для компонентiв проектiв, початкових файлiв i файлiв ресурсiв, а також ряд iнструментiв для побудови, запуску i тестування застосувань, хоча компiлятор C/C++ та iншi компоненти середовища розробника можна використовувати i з командного рядка. Visual Studio пропонуi iнтегрований iнтерфейс для таких основних iнструментiв Visual C++ як майстри. Майстри (Wizards), такi як AppWizard, - це iнструменти генерацii структур застосувань. За допомогою таких майстрiв можна створювати структури застосувань серверiв або контейнерiв компонентiв OLE, застосувань ODBC та DAO, серверiв автоматизацii, елементiв управлiння ActiveX.
Visual C++ пропонуi широкi можливостi для програмування баз даних, якi, зокрема, полягають в розширеному керуваннi джерел даних i вiдладцi. В застосуваннях можна використовувати декiлька технологiй баз даних: ODBC (Open Database Connectivity) - ЗвтАЩязок вiдкритих баз даних, незалежний вiд постачальника механiзм доступу до даних з рiзних джерел, DAO (Data Access Objects) тАУ ОбтАЩiкти доступу до даних, застосовуiться для доступу к базам даних в Microsoft Visual Basic, Microsoft Access, Visual Basic for Applications, ADO (ActiveX Data Objects) тАУ компактна технологiя доступу до даних, орiiнтована на Web, OLE DB тАУ база даних OLE, набiр специфiкацiй iнтерфейсiв компонентноi обтАЩiктноi моделi COM.
Метою даноi курсовоi роботи i розгляд основних можливостей програмування баз даних в Visual C++, зокрема використовуючи ODBC та DAO.
Програмування баз даних за допомогою ODBC.
ODBC або Open Database Connectivity (ЗвтАЩязок вiдкритих баз даних) тАУ незалежний вiд постачальника механiзм доступу до даних з рiзних джерел. Вiн i реалiзацiiю специфiкацiй X/Open та SAG CLI (SQL Access Group Call Level Interface) тАУ iнтерфейс рiвня виклику групи доступу SQL, яку виконала фiрма Microsoft. ODBC пропонуi функцii для взаiмодii з базами даних за допомогою мови програмування, наприклад, додавання, модифiкування i видалення даних, отримання службовоi iнформацii про базу даних, таблицi та iндекси.
Архiтектура ODBC.
Архiтектура ODBC складаiться з птАЩяти основних рiвнiв: прикладний рiвень, iнтерфейс ODBC, диспетчер драйверiв, драйвер та джерело даних.
Прикладний рiвень реалiзуi GUI (Graphical User Interface тАУ Графiчний iнтерфейс користувача) та бiзнес-логiку. Вiн написаний на мовi програмування, такiй як Java, Visual Basic або C++. Прикладна програма використовуi функцii з iнтерфейсу ODBC для взаiмодii з базами даних.
Диспетчер драйверiв i частиною ODBC Microsoft. Вiн керуi рiзними драйверами, що знаходяться в системi, виконуючи завантаження, спрямування викликiв на потрiбний драйвер i надання прикладнiй програмi iнформацii про драйвер, коли це необхiдно. Оскiльки одна прикладна програма може бути звтАЩязана з декiлькома базами даних, то диспетчер драйверiв гарантуi, що вiдповiдна система керування базою даних отримуi всi запити, що надходять до неi, та що всi данi з джерела даних будуть переданi прикладнiй програмi.
Драйвер тАУ та частина архiтектури, яка все знаi про будь-яку базу даних. Система драйверiв ODBC працюi не лише на платформi WINDOWS, але i на iнших, зокрема UNIX, що перетворюi API ODBC на могутнiй iнструмент для створення платформно-незалежних застосувань. Крiм того ODBC приводить використовуiмий в застосуваннi синтаксис SQL до iдиного стандарту, що дозволяi розробляти застосування незалежнi вiд вида бази даних. Звичайно драйвер повтАЩязаний з конкретною базою даних, наприклад, драйвери Access, Oracle та драйвер SQL Server. РЖнтерфейс ODBC маi набiр функцiй, таких як оператори SQL, управлiння зтАЩiднанням, iнформацiя про базу даних тощо. В обовтАЩязки драйвера входить iх реалiзацiя. Це означаi, що в деяких базах даних драйвер повинен емулювати функцii iнтерфейсу ODBC, якi не пiдтримуються системою керування базою даних. Вiн виконуi роботу по розсиланню запитiв в бази даних, отриманню вiдповiдей i вiдправленню iх прикладнiй програмi. Для баз даних, що працюють в локальних мережах або Internet, драйвер пiдтримуi мережний звтАЩязок.
Джерело даних в контекстi ODBC може бути системою керування базою даних або просто набором файлiв на жорсткому диску. Вiн може бути як простою базою даних Microsoft Access для невеликоi фiрми, так i багатосерверним зберiгачем iнформацii про клiiнтiв телефонноi компанii i iх розмовах.
Коцепцii API ODBC.
Основною частиною системи ODBC i драйвер. Драйвери можуть бути однорiвневi та багаторiвневi. Однорiвневi драйвери обробляють звертання ODBC i оператори SQL, а багаторiвневi тАУ обробляють звертання ODBC та передають оператори SQL джерелу даних (можливо, серверу, розташованому де-небудь в мережi). ODBC не вимагаi, щоб драйвери пiдтримували всi функцii цього iнтерфейсу. Замiсть цього для драйверiв визначаються рiвнi вiдповiдностi API та граматики SQL. РДдина вимога: якщо драйвер задовiльняi деякому рiвню, то вiн повинен пiдтримувати всi функцii ODBC, визначенi на цьому рiвнi, незалежно вiд того, чи пiдтримуi iх база даних. Так як в обовтАЩязки драйвера входить емуляцiя функцiй ODBC, що не пiдтримуються системою керування базою даних, то iнтерфейс ODBC не залежить вiд реалiзацii бази даних.
Рiвнi вiдповiдностi API та граматики SQL для ODBC.
Тип | Рiвень вiдповiдностi | Опис |
Рiвнi вiдповiдностi API | Ядро | Всi функцii iз специфiкацii SAG CLI. Видiлення i звiльнення описувачiв звтАЩязку, SQL-оператора i оточення. Пiдготовка i виконання операторiв SQL. Отримання результату i службовоi iнформацii про результат. Отримання iнформацii про помилки. Здатнiсть виконувати транзанкцii. |
Рiвень 1 | Розширений набiр 1 включаi API ядра плюс можливостi посилати i отримувати частковi набори даних, шукати iнформацiю в каталозi, отримувати iнформацiю про можливостi драйвера i бази даних, тощо. | |
Рiвень 2 | Розширений набiр 2 включаi рiвень 1 плюс можливостi обробляти масиви як параметри, можливiсть прокрутки курсору, виклик DLL транзанкцiй, тощо. | |
Рiвнi вiдповiдностi граматики SQL | Мiнiмальна граматика | Функцii створення i видалення таблиць в мовi визначення даних. Простi функцii вибору, вставки, модифiкацii i видалення в мовi манiпулювання даними. Простi вирази. |
Граматика ядра | Вiдповiднiсть специфiкацiям SAG CAE 1992 на мiнiмальну граматику плюс змiна таблиць, створення i видалення iндексу, створення i видалення логiчних таблиць бази даних для DLL. Повний оператор SELECT для DDL. Повний Оператор SELECT для DML. Функцiii в виразах, наприклад, SUM and MAX. | |
Розширена граматика | Додатковi можливостi, такi як зовнiшнi зтАЩiднання, позицiйованi модифiкацiя i видалення, бiльше виразiв i типiв даних, виклики процедур. |
ODBC не i еквiвалентом Embedded SQL (Вбудований SQL), який використовуi оператори SQL в вихiдних програмах, написаних на iнших мовах. Схожi гiбрiднi програми перед передечею компiлятору основноi мови програмування оброблюються прекомпiлятором. ODBC iнтерпретуi оператори SQL пiд час виконання. Основна програма не потребуi прекомпiляцii для виконання рiзних операторiв SQL, як i не треба компiлювати окремi версii програми для рiзних джерел даних.
Блок-схема типовоi ODBC-програми.
Перш нiж реалiзувати оператори SQL, застосування ODBC повинно виконати ряд дiй, щоб пiдтАЩiднатись до джерела даних. Типовi дii звертання ODBC:
SQLAllocEnv(); Видiляi середовище ODBC
SQLAllocConnect(); Видiляi памтАЩять для пiдключення
SQLConnect(); Завантажуi драйвер, пiдключаi до джерела
|
SQLFreeStmt(); Звiльнюi памтАЩять, видiлену для оператора
SQLDisconnect(); Перерозподiляi драйвер, вiдключаi вiд джерела
SQLFreeConnect(); Звiльнюi памтАЩять, видiлену для пiдключення
SQLFreeEnv(); Звiльнюi середовище, перериваi сеанс
Виклик SQLAllocEnv() iнiцiалiзуi бiблiотеку ODBC i повертаi дескриптор типу SQLHENV. Дескриптор типу SQLHDBC, що повертаiться функцiiю SQLAllocConnect(), використовуiться в наступних звертаннях до функцiй ODBC для посилання на певне пiдключення. Одне застосування може пiдтримувати декiлька вiдкритих пiдключень. Функцiя SQLConnect() шляхом завантаження драйверу i пiдключення до джерела даних встановлюi зтАЩiднання. Це звертання до функцii маi варiанти; наприклад, виклик SQLDriverConnect(), можна використовувати для пiдключення до джерел даних, якi не встановлюються за допомогою програми початковоi установки ODBC. SQLBrowseConnect() дозволяi застосуванню циклiчно продивлятися джерела даних. Видiляючи памтАЩять для оператора SQL за допомогою функцii SQLAllocStmt() на окремому кроцi, ODBC забезпечуi механiзм, при якому оператори можуть конструюватися i використовуватися один раз i кiлька разiв перш, нiж видiлена памтАЩять. Пiсля цих чотирьох звертань, як правило, застосування ODBC створюi звертання до бази даних для виконання операторiв SQL. Воно може використовувати функцiю SQLPrepare() для пiдготовки (компiляцii) оператора SQL для виконання i функцiю SQLExecute() для дiйсного його виконання. В якостi альтернативи виклику SQLPrepare() та SQLExecute() застосування можуть використовувати функцiю SQLExecDirect() для виконання оператора SQL в однiй дii. Спочатку стовпчики звтАЩязуються з змiнними програми за допомогою SQLBindCol, потiм цi змiннi зчитуються пiсля виконання SQLFetch() над рядком таблицi. Якщо даних бiльше нема, SQLFetch() повертаi SQL_NO_DATA_FOUND. В якостi альтернативи використанню SQLBindCol() для повтАЩзаних стовпцiв застосування можна використовувати функцiю SQLGETDATA() для отримання даних з незвтАЩязаних стовпцiв.
Коли його робота закiнчена, застосування повинно звiльнити задiянi ним ресурси ODBC.
В ODBC 3.0 функцiя SQLFreeHandle() використовуiться замiсть функцiй ODBC 2.x SQLFreeEnv(), SQLFreeConnect(), SQLFreeHandle().
Програма установки ODBC.
Програма установки ODBC викликаiться за допомогою Control Panel (Панель керування) в Windows i використовуiться для регiстрацii джерел даних. Що саме i джерелом даних? Це залежить вiд драйвера. У випадку такого драйвера, як SQL Server, джерелом даних може бути база даних на серверi. В випадку драйвера Microsoft Access або Microsoft Excel база даних i файлом (MDB або XLS). В випадку Microsoft Text Driver база даних тАУ це каталог, що мiстить текстовi файли, якi стосовно драйвера i таблицями в базi даних. Останнi версii ODBC розрiзняють три типи джерел даних. Джерело даних користувача тАУ це джерело даних, яке бачить лише той, хто його створив. Джерело системних даних доступне всiм користувачам даного комптАЩютера. Джерело файлових даних - це джерело даних, специфiкацii якого зберiгаються в файлi i можуть бути одночасно використанi користувачами на рiзних комптАЩютерах.
Для додавання джерела даних треба викликати програму установки ODBC в Control Panel i, вибравши необхiдний тип джерела даних, вибрати драйвер i додати його кнопкою Add. В зтАЩявившомуся дiалоговому вiкнi тАЬCreate New Data SourceтАЭ можна вибрати базу даних i встановити необхiднi властивостi драйвера. Основне дiалогове вiкно мiстить список всiх iнстальованних джерел даних:
джерело даних джерело системних джерело файлових
користувача даних даних
Дiалогове вiкно тАЬODBC Data Source AdministratorтАЭ
Приклад програми ODBC.
Нище наведено текст простого застосування ODBC, яке зчитуi рядки, що мiстяться в таблицi Excel. Коли доступ до таблицi Excel здiйснюiться з використанням драйвера Microsoft Excel ODBC, електроннi таблицi вiдiграють роль таблиць бази даних, а рядки в таблицi тАУ роль записiв у нiй.
Таблиця Excel складаiться з 4 стовпчикiв, що мiстять iнформацiю про прiзвище та iмтАЩя студента, факультет, де вiн навчаiться, та рейтинг за осiннiй триместр 1998/1999 навч. рiк.
Замiсть iнсталяцii цiii таблицi в якостi джерела даних, використовуючи програму початковоi установки ODBC, можна скористуватися можливостями функцii SQLDriverConnect.
Застосування може бути скомпiльовано з командного рядка введеннням:
cl student.c odbc32.lib. Файл student.xls (таблиця Excel) повинен бути доступним з поточного каталогу.
#include
#include
#include
#include
#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 %snSQLState = %snSQL message = %snВ», 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 #%dtName: %stFaculty: %stRating: %dnВ», 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 #%dtName: %stFaculty: %stRating: %dnВ», 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 використовуiться для повiдомлення про помилки.
Пiсля обовтАЩязкових звертань до функцiй SQLAllocEnv та SQLAllocConnect програма викликаi SQLDriveConnect. Цей виклик робить можливим вiдкриття таблицi, яка не встановлювалась з використанням програми початковоi установки ODBC i робить це без вiдображення iнтерфейса користувача. Для вiдкриття таблицi використовуються константи CONNSTR та CONNLEN. Як тiльки пiдключення до бази даних успiшно завершено, виконуються послiдовно два оператори SQL:
1) SELECT * FROM [Sheet$] - Вибрати всi записи з таблицi Student.
2) SELECT * FROM[Sheet$] WHERE Rating>91 ORDER BY Rating DESC тАУ Вибрати записи з таблицi Student про тих студентiв, що мають рейтинг бiльший за 91, та впорядкувати виведений список за зменшенням рейтингiв студентiв.
РЖмтАЩя Sheet$ - це iмтАЩя, яке надаiться драйвером для першоi таблицi в робочiй книзi Excel. Оператор SQL використовуiться для отримання полiв всiх записiв.
Наступнi 4 звертання привтАЩязують змiннi до стовпчикiв таблицi. Таке призначення функцii SQLBindCol. Пiсля послiдовного отримання записiв, значення полiв перемiщуються в цi змiннi.
Самi записи отримуються за допомогою функцii SQLFetch i вiдображаються з використанням printf. Функцiя SQLFetch викликаiться до тих пiр, поки значення, що повертаiться нею, не вiдрiзняiться чим-небудь вiд SQL_SUCCESS. Значення, що повертаiться, SQL_NO_DATA_FOUND показуi, що отриманий останнiй запис, все iнше i помилкою i обробляiться вiдповiдним чином.
Програма завершуiться обовтАЩязковими звертаннями до функцiй SQLFreeStmt, SQLDisconnect, SQLFreeConnect та SQLFreeEnv для звiльнення ресурсiв i закiнчення звтАЩязку з джерелом даних.
При запуску цiii програми забезпечуiться такий вивiд:
Стандарт SQL та ODBC.
Синтаксис для ODBC заснований на стандартi ANSI SQL-92.
Майже кожна СУБД використовуi свiй власний дiалект SQL, синтаксис якого може трохи вiдрiзнятися. Кожен дiалект може пiдтримувати рiзний набiр властивостей. Драйвер ODBC для конкретноi бази даних забезпечить необхiдний переклад загального SQL на специфiчний дiалект, що використовуiться в певнiй СУБД.
РЖснуi три основнi групи операторiв SQL:
мова визначеня даних DDL (Data Definition Language) використовуiться для задання структури бази даних i створення ii обтАЩiктiв;
мова керування даними DCL (Data Control Language) тАУ для роботи з правами користувача на конкретнi обтАЩiкти;
мова манiпулювання даними DML (Data Manipulation Language) тАУ для виконання iнших операцiй таких, як додавання i модифiкацiя даних, а також виконання запитiв.
Всi цi мови i частиною SQL, а не i окремими мовами, хоча в бiльшостi застосувань використовуються лише оператори, що вiдносяться до конкретноi групи.
В DDL для роботи з обтАЩiктами використовуються такi оператори SQL:
CREATE тАУ створюi новий обтАЩiкт;
ALTER тАУ модифiкуi iснуючий обтАЩiкт;
DROP- видаляi обтАЩiкт.
Цi оператори використовуються для роботи з рiзними обтАЩiктами бази даних таких, як таблицi, iндекси i представлення таблиць. Для кожного з цих типiв обтАЩiктiв використовуiться рiзний синтаксис оператора.
В таблицях тАУ основних обтАЩiктах реляцiйних базах даних тАУ можуть мiститися данi рiзних типiв. Типи даних SQL, згрупованi згiдно рiвням пiдлеглостi ODBC SQL.
Мiнiмальний рiвень:
- CHAR (n) тАУ символьний рядок з n символiв фiксованоi довжини.
- VARCHAR (n) тАУ символьний рядок змiнноi довжини, але не бiльше n символiв.
- LONG VARCHAR тАУ символьний рядок змiнноi необмеженоi довжини.
Базовий рiвень:
- DECIMAL (p,s) або NUMERIC (p,s) тАУ значення з плавучою комою.
- SMALLINT- двохбайтове цiле.
- INTEGER тАУ чотрьохбайтове цiле.
- REAL тАУ чотирьохбайтове значення з плавучою комою.
- FLOAT або DOUBLE PRECISION тАУ восьмибайтове значення з плавучою комою.
Розширений рiвень:
- BIT тАУ один бiт.
- TINYINT тАУ однобайтове цiле.
- BIGINT тАУ восьмибайтове цiле.
- BINARY (n) тАУ двiйкове поле фiксованоi довжини, що складаiться з n байт.
- VARBINARY (n) тАУ двiйкове поле змiнноi довжини, що не перевищуi n байт.
- LONG VARBINARY- двiйкове поле змiнноi необмеженоi довжини.
- DATE- значення дати.
- TIME тАУ значення часу.
- TIMESTAMP тАУ значення, що мiстить час i дату.
Створення таблицi.
CREATE TABLE Student (
StudID UNTEGER,
StudName VARCHAR (20) )
Стовпчики таблицi можна довизначити, якщо додати пiсля типу даних додатковi модифiкатори. Найчастiше використовуiться модифiкатор NOT NULL, який вказуi на те, що значення для цього стовпця повинно бути задано. Можна також вимагати, щоб конкретне поле в таблицi не повторювалось. Для цього використовуiться модифiкатор UNIQUE. Можна також задати для стовпця значення, що буде використовуватися по замовченню, якщо не було задано явних значень. Для цього служить модифiкатор DEFAULT.
Видалення таблицi.
DROP TABLE Student
В опрераторi видалення можуть використовуватися ключовi слова CASCADE та RESTRICT. Якщо в операторi вказано ключове слово CASCADE, то при видаленнi таблицi видаляються також всi представлення або обмежувачi цiлостностi, повтАЩязанi з цiiю таблицею. Модифiкатор RESTRICT не дозволить видалити таблицю, якщо на неi i посилання в яких-небудь представленнях або обмежувачах цiлостностi.
Змiна таблицi.
Додавання стовпцiв:
ALTER TABLE Student ADD COLUMN Course INTEGER
Видалення стовпцiв:
ALTER TABLE Student DROP COLUMN Course
Як i при видаленнi таблицi, тут можна використовувати ключовi слова CASCADE та RESTRICT. При включеннi модифiкатору CASCADE видаляються також всi представлення i обмежувачi, якi посилаються на видаляiмий стовпець. Використання модифiкатора RESTRICT запобiгаi видаленню стовпця, якщо на нього i посилання в представленнях або обмежувачах цiлостностi посилань.
РЖндекси.
Це обтАЩiкти баз даних, що забезпечують бiльш ефективний доступ до рядкiв таблицi. РЖндекс продивляiться рядки таблицi на основi значень певного стовпця або декiлькох стовпцiв. РЖндекси можуть значно пiдвищити продуктивнiсть бази даних при виконаннi певних типiв операцiй пошуку, проте для iх пiдтримання треба великий обсяг динамiчноi памтАЩятi. Якщо для одноi таблицi створити багато рiзних iндексiв, продуктивнiсть всього застосування значно зменшиться.
CREATE [UNIQUE] INDEX StudIndex ON Student (StudID) [ASC, DESC]
ASC тАУ в зростаючому порядку
DESC тАУ в спадаючому порядку
Змiнити iндекс неможливо, а можна лише видалити його.
DROP INDEX StudIndex
Представлення.
Педставлення таблиць, або просто представлення можна розглядати як вид вiртуальноi таблицi. З точки зору застосувань користувачiв, представлення таблицi виглядаi як i сама таблиця. Проте в представленнi зберiгаються не його власнi данi, а лише посилання на данi, що мiстяться в таблицях. В цiлому представлення використовуються для вiдображення даних, що мiстяться в таблицях, рiзними способами зручними для користувача. Представлення можна використовувати для вiдображення пiдмножини стовпцiв однiii або декiлькох таблиць, що вiповiдають деякому типу запита. Це дозволяi представляти таблицю з потрiбними даними, хоча в дiйсностi стуктура бази даних може бути iншою, сформованою виходячи з мiркувань цiлостностi та продуктивностi. Представлення таблиць зручнi для забезпечення безпеки. За допомогою представлення можна забезпечити доступ користувачiв до деякоi пiдмножини стовпцiв в таблицi, залишаючи захищеними iншi стовпцi. Представлення служать i для забезпечення логiчноi незалежностi даних, завдяки чому змiни занесенi в реальнi таблицi баз даних не вiдображаються на застосуваннях користувача. Якщо таблиця в базi даних буде змiнена, то можна буде просто настроiти представлення у вiдповiдностi з новою структурою таблицi i не треба буде повертатися i вносити змiни в кожне написане застосування.
CREATE VIEW MyView AS SELECT * FROM TABLE MyTable
Представлення вiдображаi всi стовпцi таблицi
CREATE VIEW MyView (Id, Name) AS SELECT (StudID, Studname) FROM Student
РЖснуюче представленя не можна модифiкувати, але можна його видалити.
DROP VIEW MyView
Мова керування даними DCL.
Дозволяi працювати з правами користувачiв на обтАЩiкти в базi даних.
Мова SQL дозволяi присвоiти групi користувачiв певнi права на деякий обтАЩiкт. Права можуть бути такими:
SELECT дозволяi запитувати данi
INSERT дозволяi додавати новi рядки
DELETE дозволяi видаляти рядки
UPDATE дозволяi змiнювати iснуюючi рядки
REFERENCES це право потрiбне лише в тому випадку, коли користувач намагаiться модифiкувати таблицю, що маi обмеження цiлостностi посилань, якi зсилаються на стовпцi iншоi таблицi. Такий користувач повинен мати право REFERENCES на стовпцi, що використовуються з обмеженнями.
Права присвоюються:
GRANT SELECT ON Student TO PUBLIC
GRANT SELECT, INSERT ON Student TO Sveta, Lena
Права UPDATE та REFERENCES можуть поширюватися на окремi стовпцi.
GRANT UPDATE (Raiting, Credit) ON Student TO Sveta
Вiдмiнити права на обтАЩiкти можна за допомогою оператора REVOKE:
REVOKE SELECT ON Student FROM Lena
В операторi REVOKE можна використовувати модифiкатори CASCADE та RESTRICT. Якщо вiдмiняються права користувача на деяку таблицю, то доцiльно вiдмiнити його права на всi представлення, що потребують доступу до всiii таблицi. Зробити це можна за допомогою CASCADE. Модифiкатор RESTRICT не дозволяi вiдмiнити право доступу, яке вимагаiться згiдно iншим правам, що присвоiнi цьому користувачу.
Мова манiпулювання даними DML.
Основнi типи операторiв:
SELECT
INSERT
DELETE
UPDATE
SELECT тАУ основа SQL. Використовуiться кожен раз при отриманнi даних. Базовий синтаксис оператора SELECT:
SELECT * FROM Student
РЖншi:
SELECT * FROM Student WHERE Raiting>91 AND Credit<120
SELECT * FROM Student WHERE NOT Course=4
SELECT * FROM Student WHERE (Raiting/Credit)<1
В SQL i спецiальний оператор для порiвняння символьних рядкiв. Предикат LIKE вибираi рядки на основi визначеного шаблону. В шаблон можуть входити звичайнi символи, а також символи % та _. Рядок символiв довiльноi довжини можна поставити у вiдповiднiсть шаблону %, а один символ - _.
Вибiр всiх рядкiв, що мiстять рядок Database в полi Title
SELECT ChapterNum FROM Chapters WHERE Title LIKE тАШ%Database%тАЩ
Пошук заголовкiв, в яких починаючи з другоi позицii мiститься рядок ata
SELECT ChapterNum FROm Chapters WHERE Title LIKE тАШ_ata%тАЩ
Для спрощення оператору WHERE використовуiться предикати IN та BETWEEN:
SELECT StudID FROM Student WHERE Course IN (4, 3)
SELECT StudName FROM Student WHERE Raiting BETWEEN 91 AND 100
В багатьох задачах треба знайти всi можливi значення певного поля на деякiй множинi рядкiв. Зробити це можна за допомогою ключового слова DISTINCT, яке запобiгаi дублюванню елементiв в вихiднiй множинi результатiв.
SELECT DISTINCT Course FROM Student
По замовченню рядки, що повертаються пiсля виконання запиту, подаються в довiльному порядку. Змiнити це можна за допомогою оператора ORDER BY, який дозволяi вказати один або декiлька стовпцiв, що будуть використовуватися для сортування повертаiмих рядкiв. Для кожного стовпця можна вказати модифiкатор ASC або DESC.
SELECT StudID FROM Student ORDER BY StudID ASC
Якщо в операторi ORDER BY вказати декiлька стовпцiв, то повертаiмi рядки будуть вiдсортованi спочатку за першим стовпцем. Потiм рядки, що мiстять однаковi значення в першому полi, будуть вiдсортованi ще i за другим стовпцем.
Сортування рядкiв за зростанням значень в стовпцi Salary, а рядки з однаковими значеннями в цьому полi тАУ за спаданням iдентифiкацiйних номерiв EmpID:
SELECT EmpID, Salary FROM Employee ORDER BY Salary ASC, EmpID DESC
Дуже часто треба вираховувати значення на основi даних з усiх рядкiв, що повертаються, наприклад загальну суму значень в деякому стовпцi всiх повертаiмих рядкiв. Такi типи розрахункiв можна виконувати за допомогою таких функцiй:
- AVG тАУ повертаi середнi значення в стовпцi.
- COUNT тАУ пiдраховуi кiлькiсть повертаiмих рядкiв.
- MAX тАУ повертаi максимальне значення для деякого стовпця в результуючiй множинi.
- MIN тАУ повертаi мiнiмальне значення для деякого стовпця в результуючiй множинi.
- SUM тАУ пiдраховуi загальну суму всiх значень для деякого стовпця в результуючiй множинi.
Задання значень дати i часу викликаi особливий iнтерес. Як правило, в рiзних системах керування базами даних використовуються рiзнi, а тому, несумiснi, способи представлення лiтералiв для таких значень. ODBC забезпечуi переносимий синтаксис для таких значень.
Для лiтералiв дати використовуються один з наступних форматiв:
{d тАШyyyy-mm-ddтАЩ}
Для лiтералiв часу:
{t тАШhh:mm:ssтАЩ}
Для представлення значень дати i часу:
{ts тАШyyyy-mm-dd hh:mm:ssтАЩ}
Функцii SQL.
В SQL, що використовуiться для ODBC, визначено багато функцiй, якi можна використовувати при побудовi запитiв або в параметрi списку вибору, або в операторi WHERE. Цi функцii можна розподiлити на 5 груп: числовi, строковi, функцii дати та часу, функцii системи та функцii перетворення типiв даних.
Синтаксис ODBC визначаi таку форму запису при виклику функцii в SQL:
{fn iмтАЩя функцii}
Строковi функцii
Деякi функцii для роботи з рядками в ODBC SQL:
- CONCAT(вираз1, вираз2) тАУ приiднання вираз1 до вираз2;
- INSERT(вираз1, початок, довжина, вираз2) тАУ повертаi вираз1, в якому видалена довжина символiв, починаючи з символу початок, замiсть яких, починаючи з символу початок, вставлено вираз2;
- LCASE(вираз) тАУ повертаi вираз, символи якого перетворенi на вiдповiднi з нижнього регiстру;
- LENGTH (вираз) тАУ довжина вираз в символах;
- POSITION (вираз1, вираз2) тАУ повертаi позицiю вираз1 в вираз2;
- UCASE(вираз) тАУ повертаi вираз, всi символи якого перетворенi на вiдповiднi верхнього регiстру.
Числовi функцii.
Деякi числовi функцii в ODBC SQL:
- ABS(вираз) тАУ повертаi абсолютне значення вираз;
- MOD(вираз1, вираз2) тАУ повертаi остачу вiд дiлення вираз1 на вираз2;
- POWER(вираз1, вираз2) тАУ повертаi вираз1 в степенi вираз2;
- RAND(вираз) тАУ повертаi випадкове число. Вираз задаi кiлькiсть випадкових чисел;
- ROUND(вира1, вираз2) тАУ повертаi вираз1 округлене з точнiстю до вираз2 знакiв пiсля коми;
- SQRT(вираз) тАУ повертаi квадратний корiнь з вираз.
Функцii дати та часу.
Деякi функцii дати та часу в ODBC SQL:
- CURDATE() тАУ повертаi поточну дату;
- CURTIME() тАУ повертаi поточний час;
- NOW() тАУ повертаi поточний час i дату в форматi дата/час;
Системнi функцii.
Деякi системнi функцii в ODBC SQL:
- DATABASE() тАУ повертаi iмтАЩ бази даних, що використовуiться в поточному сеансi;
- USER() тАУ повертаi iмтАЩя користувача бази даних, що використовуiться в поточному сеансi;
Перетворення типiв даних.
Функцiя перетворення типiв даних в ODBC SQL:
CONVERT(вираз, тип_даних)
Параметр тип_даних може приймати такi значення:
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
ОбтАЩiднання.
Операцiя обтАЩiднання повертаi рядки, що сформованi з даних двох або бiльше рiзних таблиць i обтАЩiднанi в процесi виконання запиту.
SELECT Name, Prices FROM Products, Prices WHERE Products.ID=Prices.ID
При виконаннi цього оператора будуть видiленi всi рядки з таблицi Products, що вiдповiдають рядкам з таблицi Prices. Це так зване внутрiшнi обтАЩiднання. Для того, щоб створити запит, який повертаi рядки, що не мають вiдповiдностi в однiй з цих таблиць, треба використовувати зовнiшнi обтАЩднання.
Вибрати рядки для кожного працiвника, зокрема тих, хто ще не вiдноситься нi до якого вiддiлу.
SELECT * FROM
{oj Employee LEFT OUTER JOIN Department ON
Employee.DeptNum=Department.DeptNum}
LEFT OUTER JOIN використовуiться для того, щоб гарантувати, що в результуючiй множинi будуть представленi всi рядки з лiвоi таблицi (Employee). Щоб включити всi рядки з правоi таблицi можна використовувати RIGHT OUTER JOIN, а для вибору всiх рядкiв з обох таблиць тАУ FULL OUTER JOIN.
Вкладенi запити.
Вкладений запит може використовуватися з предикатом EXISTS (NOT EXISTS).
Вибрати список вiддiлiв, що не укомплектованi працiвниками:
SELECT DeptName FROM Department
WHERE DeptNum NOT EXISTS (SELECT * FROM Employee)
Повертаiться список вiддiлiв, номера яких не мiстяться в жодному запису таблицi Employee.
Можна також використовувати предикати IN та NOT IN.
Дуже часто вкладенi запити використовуються для операцiй порiвняння з клячовими словами ANY та ALL.
Скласти список всiх студентiв департаменту комптАЩютерних технологiй, у яких рейтинг вищий, нiж у студентiв природничого факультету.
SELECT Student_DCSS.Name FROM Student_DCSS
WHERE Student_DCSS.Rating >ALL
(SELECT Student_FNS.Rating FROM Student_FNS)
ОбтАЩiднанi запити.
SQL дозволяi отримати один результат через обтАЩiднання двох незалежних запитiв шляхом iх комбiнацii за допомогою ключового слова UNION.
SELECT * FROM Students_DCSS
UNION
SELECT * FROM Students_FNS
Оператор INSERT.
За допомогою оператора INSERT можна вставити данi в певне мiсце в базi даних.
INSERT INTO Students_vipuskniki
VALUES (1, тАШSveta FiyalkaтАЩ, тАШDCSSтАЩ, 95)
Оператор DELETE.
DELETE FROM Student WHERE Student.Rating<61
Оператор UPDATE.
За допомогою цього оператора можна змiнювати значення в iснуючих рядках бази даних:
UPDATE Employee SET Salary+100
ODBC в MFS-застосуваннях.
Використання ODBC значно спрощуiться за допомогою Microsoft Foundation Classes Library (Бiблiотека основних класiв Microsoft). Простi застосування, що отримують доступ к таблицям через ODBC, можуть бути створенi всього лише декiлькома натисненнями кнопки мишi з використанням мастерiв AppWizard та ClassWizard. РЖснуi декiлька класiв MFS, якi пiдтримують доступ до баз даних i наборам записiв.
Класи ODBC в MFS.
Найголовнiшi класи, що надаються MFS для пiдтримки застосувань ODBC тАУ це класи CDatabase та CRecordset. Клас CDatabase представляi зтАЩiднання з джерелом даних. Його змiнна m_hdbc представляi дескриптор зтАЩднання ODBC. Функцii Open та Close можна використовувати для установки або закриття зтАЩiднання з джерелом даних. РЖншi функцii використовуються для установки або отримання параметрiв зтАЩiднання. До таких функцiй належать: GetConnect(повертаi рядок зтАЩiднання ODBC), IsOpen, GetDatabaseName, CanUpdate, CanTransact, InWaitForDataSource, SetLoginTimeout та SetSynchronousMode. По замовченню для доступу до джерела даних клас CDatabase використовуi асинхронний режим. Виконувана асинхронна дiя може бути перервана викликом функцii Cancel.
Обробка транзанкцiй пiдтримуiться функцiями BeginTrans та Rollback.
Клас CDatabase надаi також двi перекриваiмi функцii. Функцiя OnSetOptions використовуiться для установки стандартних опцiй зтАЩiднання. Функцiя OnWaitForDataSource викликаiться системою для повiдомлення про час обробки при виконаннi довгоi операцii.
Функцiю ExecuteSQL можна використовувати для безпосереднього виконання оператора SQL. Цей оператор не використовуiться разом з операторами SQL, що повертають записи даних.
Клас CRecordset iнкапсулюi функцiональнi можливостi оператора ODBC SQL i набору рядкiв, що повертаються оператором. Змiннi-члени цього класу iдентифiкують дескриптор оператора ODBC, число полiв i параметрiв в наборi даних, обтАЩiкт CDatabase, за допомогою якого набiр записiв пiдключен до джерела даних, i два рядки, що вiдповiдають умовам WHERE та ORDER BY.
Двома основними типами наборiв записiв i динамiчнi i статичнi набори. Тип набору записiв вказуiться при виклику функцii CRecordset:Open. Статичнi набори представляють статичний варiант представлення даних. Це найбiльш зручно для таких задач, як створення звiту. Динамiчнi набори представляють динамiчний варiант представлення даних, що вiдображаi змiни,виконанi iншими користувачами або за допомогою iнших наборiв записiв застосування.
Коли набiр записiв вiдкриваiться викликом функцii Open, вiдбуваiться доступ до таблицi i запит, що представляiться наьором записiв, виконуiться. Набiр записiв i повтАЩязаний з ним дескриптор можуть бути закритi викликом функцii Close.
Атрибути набору записiв можна отримати через виклик функцiй CanAppend, CanRestart, CanScroll, CanTransact, CanUpdate, GetRecordCount, GetTableName, GetSQL, IsOpen, IsEOF, IsBOF та IsDeleted.
Перемiщення по набору записiв можна отримати за допомогою функцiй Move, MoveFirst, MoveLast, MoveNext та MovePrev.
Дii з набором записiв можуть вiдбуватися викликом функцiй Addnew, Delete, Edit або Update.
ОбтАЩiкт типу CRecordset нiколи не використовуiться безпосередньо. Необхiдно отримати клас, похiдний вiд CRecordset, i додати змiннi, що вiдповiдають оплям таблицi, яку представляють набiр записiв. Потiм т
Вместе с этим смотрят:
A history of the english language
Accommodation in St.Petersburg
Acquaintance with geometry as one of the main goals of teaching mathematics to preschool children