Visual C++. Бази даних \Укр.\

В ході написання даної курсової роботи були створені такі програмні продукти: Консольне застосування - ODBC_Excel програма ODBC, що може бути

Visual C++. Бази даних \Укр.\

Курсовой проект

Разное

Другие курсовые по предмету

Разное

Сдать работу со 100% гаранией
иконання різних операторів SQL, як і не треба компілювати окремі версії програми для різних джерел даних.

 

 

Блок-схема типової ODBC-програми.

Перш ніж реалізувати оператори SQL, застосування ODBC повинно виконати ряд дій, щоб підєднатись до джерела даних. Типові дії звертання ODBC:

SQLAllocEnv(); Виділяє середовище ODBC

SQLAllocConnect(); Виділяє память для підключення

SQLConnect(); Завантажує драйвер, підключає до джерела

SQLAllocStmt(); Виділяє память для оператора SQL

 

 

SQLFreeStmt(); Звільнює память, виділену для оператора

SQLDisconnect(); Перерозподіляє драйвер, відключає від джерела

SQLFreeConnect(); Звільнює память, виділену для підключення

SQLFreeEnv(); Звільнює середовище, перериває сеанс

 

Виклик 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 в Control Panel і, вибравши необхідний тип джерела даних, вибрати драйвер і додати його кнопкою Add. В зявившомуся діалоговому вікні “Create New Data Source” можна вибрати базу даних і встановити необхідні властивості драйвера. Основне діалогове вікно містить список всіх інстальованних джерел даних:

джерело даних джерело системних джерело файлових

користувача даних даних

 

 

Діалогове вікно “ODBC Data Source Administrator”

 

Приклад програми 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(szNa

Похожие работы

< 1 2 3 4 5 6 > >>