REFERATUA.ORG.UA — База українських рефератів




всім користувачам даного комп'ютера. Джерело файлових даних - це джерело даних, специфікації якого зберігаються в файлі і можуть бути одночасно використані користувачами на різних комп'ютерах.

Для додавання джерела даних треба викликати програму установки ODBC в Control Panel і, вибравши необхідний тип джерела даних, вибрати драйвер і додати його кнопкою Add. В з'явившомуся діалоговому вікні "Create New Data Source" можна вибрати базу даних і встановити необхідні властивості драйвера. Основне діалогове вікно містить список всіх інстальованних джерел даних:

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

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

Visual C
Visual CVisual CVisual C

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

Приклад програми ODBC.

Нище наведено текст простого застосування ODBC, яке зчитує рядки, що містяться в таблиці Excel. Коли доступ до таблиці Excel здійснюється з використанням драйвера Microsoft Excel ODBC, електронні таблиці відіграють роль таблиць бази даних, а рядки в таблиці – роль записів у ній.

ТVisual C
аблиця Excel складається з 4 стовпчиків, що містять інформацію про прізвище та ім'я студента, факультет, де він навчається, та рейтинг за осінній триместр 1998/1999 навч. рік.

Замість інсталяції цієї таблиці в якості джерела даних, використовуючи програму початкової установки ODBC, можна скористуватися можливостями функції SQLDriverConnect.

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

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 використовується для повідомлення про помилки.

Після обов'язкових звертань до функцій SQLAllocEnv та SQLAllocConnect програма викликає SQLDriveConnect. Цей виклик робить можливим відкриття таблиці, яка не встановлювалась з використанням програми початкової установки ODBC і робить це без відображення інтерфейса користувача. Для відкриття таблиці використовуються константи CONNSTR та CONNLEN. Як тільки підключення до бази даних успішно завершено, виконуються послідовно два оператори SQL:

  • SELECT * FROM [Sheet$] - Вибрати всі записи з таблиці Student.

  • SELECT * FROM[Sheet$] WHERE Rating>91 ORDER BY Rating DESC – Вибрати записи з таблиці Student про тих студентів, що мають рейтинг більший за 91, та впорядкувати виведений список за зменшенням рейтингів студентів.

    Ім'я Sheet$ - це ім'я, яке надається драйвером для першої таблиці в робочій книзі Excel. Оператор SQL використовується для отримання полів всіх записів.

    Наступні 4 звертання прив'язують змінні до стовпчиків таблиці. Таке призначення функції SQLBindCol. Після послідовного отримання записів, значення полів переміщуються в ці змінні.

    Самі записи отримуються за допомогою функції SQLFetch і відображаються з використанням printf. Функція SQLFetch викликається до тих пір, поки значення, що повертається нею, не відрізняється чим-небудь від SQL_SUCCESS. Значення, що повертається, SQL_NO_DATA_FOUND показує, що отриманий останній запис, все інше є помилкою і обробляється відповідним чином.

    Програма завершується обов'язковими звертаннями до функцій SQLFreeStmt, SQLDisconnect, SQLFreeConnect та SQLFreeEnv для звільнення ресурсів і закінчення зв'язку з джерелом даних.

    При запуску цієї програми забезпечується такий вивід:

    Visual C

    Стандарт SQL та


  •  
    Загрузка...