41434 (686872), страница 2

Файл №686872 41434 (Visual C++. Бази даних Укр.) 2 страница41434 (686872) страница 22016-07-31СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

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

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


Діалогове вікно “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

#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 %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(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»);

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:

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

  2. 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 для звільнення ресурсів і закінчення зв’язку з джерелом даних.

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

Стандарт SQL та ODBC.

Синтаксис для ODBC заснований на стандарті ANSI SQL-92.

Майже кожна СУБД використовує свій власний діалект SQL, синтаксис якого може трохи відрізнятися. Кожен діалект може підтримувати різний набір властивостей. Драйвер ODBC для конкретної бази даних забезпечить необхідний переклад загального SQL на специфічний діалект, що використовується в певній СУБД.

Існує три основні групи операторів SQL:

  • мова визначеня даних DDL (Data Definition Language) використовується для задання структури бази даних і створення її об’єктів;

  • мова керування даними DCL (Data Control Language) – для роботи з правами користувача на конкретні об’єкти;

  • мова маніпулювання даними DML (Data Manipulation Language) – для виконання інших операцій таких, як додавання і модифікація даних, а також виконання запитів.

Всі ці мови є частиною SQL, а не є окремими мовами, хоча в більшості застосувань використовуються лише оператори, що відносяться до конкретної групи.

В DDL для роботи з об’єктами використовуються такі оператори SQL:

  • CREATE – створює новий об’єкт;

  • ALTER – модифікує існуючий об’єкт;

  • DROP- видаляє об’єкт.

Ці оператори використовуються для роботи з різними об’єктами бази даних таких, як таблиці, індекси і представлення таблиць. Для кожного з цих типів об’єктів використовується різний синтаксис оператора.

В таблицях – основних об’єктах реляційних базах даних – можуть міститися дані різних типів. Типи даних SQL, згруповані згідно рівням підлеглості ODBC SQL.

Мінімальний рівень:

  • CHAR (n) – символьний рядок з n символів фіксованої довжини.

  • VARCHAR (n) – символьний рядок змінної довжини, але не більше n символів.

  • LONG VARCHAR – символьний рядок змінної необмеженої довжини.

Базовий рівень:

  • DECIMAL (p,s) або NUMERIC (p,s) – значення з плавучою комою.

  • SMALLINT- двохбайтове ціле.

  • INTEGER – чотрьохбайтове ціле.

  • REAL – чотирьохбайтове значення з плавучою комою.

  • FLOAT або DOUBLE PRECISION – восьмибайтове значення з плавучою комою.

Розширений рівень:

  • BIT – один біт.

  • TINYINT – однобайтове ціле.

  • BIGINT – восьмибайтове ціле.

  • BINARY (n) – двійкове поле фіксованої довжини, що складається з n байт.

  • VARBINARY (n) – двійкове поле змінної довжини, що не перевищує n байт.

  • LONG VARBINARY- двійкове поле змінної необмеженої довжини.

  • DATE- значення дати.

  • TIME – значення часу.

  • TIMESTAMP – значення, що містить час і дату.

Створення таблиці.

CREATE TABLE Student (

StudID UNTEGER,

StudName VARCHAR (20) )

Стовпчики таблиці можна довизначити, якщо додати після типу даних додаткові модифікатори. Найчастіше використовується модифікатор NOT NULL, який вказує на те, що значення для цього стовпця повинно бути задано. Можна також вимагати, щоб конкретне поле в таблиці не повторювалось. Для цього використовується модифікатор UNIQUE. Можна також задати для стовпця значення, що буде використовуватися по замовченню, якщо не було задано явних значень. Для цього служить модифікатор DEFAULT.

Видалення таблиці.

DROP TABLE Student

В опрераторі видалення можуть використовуватися ключові слова CASCADE та RESTRICT. Якщо в операторі вказано ключове слово CASCADE, то при видаленні таблиці видаляються також всі представлення або обмежувачі цілостності, пов’язані з цією таблицею. Модифікатор RESTRICT не дозволить видалити таблицю, якщо на неї є посилання в яких-небудь представленнях або обмежувачах цілостності.

Зміна таблиці.

Додавання стовпців:

ALTER TABLE Student ADD COLUMN Course INTEGER

Видалення стовпців:

ALTER TABLE Student DROP COLUMN Course

Як і при видаленні таблиці, тут можна використовувати ключові слова CASCADE та RESTRICT. При включенні модифікатору CASCADE видаляються також всі представлення і обмежувачі, які посилаються на видаляємий стовпець. Використання модифікатора RESTRICT запобігає видаленню стовпця, якщо на нього є посилання в представленнях або обмежувачах цілостності посилань.

Індекси.

Це об’єкти баз даних, що забезпечують більш ефективний доступ до рядків таблиці. Індекс продивляється рядки таблиці на основі значень певного стовпця або декількох стовпців. Індекси можуть значно підвищити продуктивність бази даних при виконанні певних типів операцій пошуку, проте для їх підтримання треба великий обсяг динамічної пам’яті. Якщо для одної таблиці створити багато різних індексів, продуктивність всього застосування значно зменшиться.

CREATE [UNIQUE] INDEX StudIndex ON Student (StudID) [ASC, DESC]

Характеристики

Тип файла
Документ
Размер
10,21 Mb
Тип материала
Учебное заведение
Неизвестно

Список файлов курсовой работы

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6529
Авторов
на СтудИзбе
301
Средний доход
с одного платного файла
Обучение Подробнее