- •Введение
- •Часть 1. Технологии работы с базами данных
- •Часть 2. Проектирование ис и разработка базы данных для некоторой предметной области и программного приложения для работы с ней
- •Лабораторная работа 1 создание и модификация таблиц базы данных Цель работы
- •Содержание работы и методические указания к ее выполнению
- •Insert into имя_таблицы [(поле [,поле]...)]
- •Values (константа [,константа]...)
- •Контрольные вопросы
- •Лабораторная работа 2 выбор и модификация данных таблиц Цель работы
- •Содержание работы и методические указания к ее выполнению
- •Варианты заданий на составление запросов по выборке информации из таблиц базы данных
- •Варианты заданий на составление запросов по модификации информации из таблиц базы данных
- •Контрольные вопросы
- •Лабораторная работа 3 полномочия на использование схемы бызы данных. Работа с внешними схемами базы данных Цель работы
- •Содержание работы и методические указания к ее выполнению
- •Последовательность выполнения лабораторной работы:
- •Варианты заданий
- •Контрольные вопросы
- •Лабораторная работа 4 реализация простейших операций работы с базой данных средствами встроенного sql Цель работы
- •Содержание работы и методические указания к ее выполнению
- •Последовательность выполнения лабораторной работы
- •Требования к разрабатываемой программе
- •Варианты заданий
- •Контрольные вопросы
- •Лабораторная работа 5
- •Последовательность выполнения лабораторной работы
- •Варианты заданий
- •Контрольные вопросы
- •Лабораторная работа 6
- •Последовательность выполнения лабораторной работы:
- •Требования к разрабатываемой программе
- •Варианты заданий
- •Контрольные вопросы
- •2. Средства отслеживания ошибок
- •3. Непосредственное и подготавливаемое выполнение операторов sql
- •4. Использование параметров при выполнении
- •5. Настройка доступа к источнику данных
- •Последовательность выполнения лабораторной работы
- •Требования к разрабатываемой программе
- •Варианты заданий
- •Контрольные вопросы
- •Лабораторная работа 8 выборка данных с использованием средств odbc Цель работы
- •Содержание работы и методические указания к ее выполнению
- •Последовательность выполнения лабораторной работы
- •Требования к разрабатываемой программе
- •Варианты заданий
- •Лабораторная работа 9 доступ к базам данных посредством cgi-скрипта, написанного на языке esql/c Цель работы
- •Содержание работы и методические указания к ее выполнению
- •Последовательность выполнения лабораторной работы
- •Требования к разрабатываемой программе
- •Варианты заданий
- •Контрольные вопросы
- •Лабораторная работа 10 использование языка php для доступа к базам данных Цель работы
- •Содержание работы и методические указания к ее выполнению
- •Последовательность выполнения лабораторной работы
- •Требования к разрабатываемой программе
- •Варианты заданий
- •Контрольные вопросы
- •Последовательность выполнения лабораторной работы:
- •Контрольные вопросы
- •Последовательность выполнения лабораторной работы:
- •Контрольные вопросы
- •Лабораторная работа 13
- •Последовательность выполнения лабораторной работы:
- •Контрольные вопросы
- •Лабораторная работа 14
- •Последовательность выполнения лабораторной работы:
- •Контрольные вопросы
- •Лабораторная работа 15
- •Операторы языка sql
- •1. Операторы описания
- •2. Операторы манипуляции данными
- •3. Операторы определения транзакций
- •4. Операторы определения прав доступа
- •5. Встроенный sql
- •6. Триггеры и процедуры
2. Средства отслеживания ошибок
Для отслеживания ошибок в ODBC используется функция SQLError, которая возвращает сообщение об ошибке при неудачном завершении какой-либо функции ODBC.
Каждая ODBC-функция возвращает RETCODE, который принимает одно из нижеследующих значений:
SQL_SUCCESS Операция выполнена без ошибки.
;
SQL_SUCCESS_WITH_INFO Функция завершена, но при вызове
SQLError указывает на ошибку. В большинстве случаев это возникает, когда значение, которое должно быть возвращено очень большого размера, чем это предусмотрено буфером прикладной программы;
SQL_ERROR Функция не была завершена из-за возникшей ошибки. При вызове
SQLError можно будет получить больше информации о сложившейся ситуации;
SQL_INVALID_HANDLE Не правильно определен идентификатор окружения, соединения или оператора. Это часто случается, когда идентификатор используется после того, как он был освобожден или если был определен нулевой указатель;
SQL_NO_DATA_FOUND Больше нет подходящей информации. Фактически это не является ошибкой. Чаще всего такой статус возникает при использовании курсора, когда больше нет строк для его продвижения;
SQL_NEED_DA
TA Необходимы данные для параметра.
RETCODE SQLError (henv, hdbc, hsmt, szSqlState, pfNativeError, szErrorMsg, cbErrorMsgMax, cbErrorMsg)
HENV henv - идентификатор окружения.
HDBC hdbc - идентификатор соединения.
HSTMT hsmt - идентификатор оператора.
UCHAR szSqlState - SQLSTATE в качестве строки завершения.
SDWORD pfNativeError - в этом параметре и будет возвращена ошибка, возникшая в СУБД, а также ее собственный код. Если соответствующего собственного кода ошибки не существует, то возвращается ноль.
UCHAR szErrorMsg - указатель на буфер, куда будет возвращен текст ошибки (строка с нулевым окончанием).
SWORD cbErrorMsgMax - максимальный размер вышеописанного буфера, должен быть меньше или равен SQL_MAX_MESSAGE_LENGTH-1.
SWORD cbErrorMsg - сюда возвращается число байт, скопированных в буфер.
3. Непосредственное и подготавливаемое выполнение операторов sql
Непосредственное выполнение используется в тех случаях, когда
SQL-
операторы, которые должны быть выполнены, будут выполняться только один раз;
не требуется информации о результирующем множестве до выполнения оператора;
SQLExecDirect представляет собой самый быстрый способ запустить SQL-оператор при одноразовом выполнении.
RETCODE SQLExecDirect (hstmt, szSqlStr, cbSqlStr)
HSTMT hstmt- идентификатор оператора.
UCHAR szSqlStr- строка с SQL-оператором.
SDWORD cbSqlStr - длина строки szSqlStr.
Подготавливаемое выполнение предпочтительнее использовать, когда необходима информация о результирующем множестве до выполнения оператора или когда требуется выполнить SQL-оператор более одного раза. Для этого необходимы две функции SQLPrepare и SQLExecute.
SQLPrepare подготавливает SQL-строку для выполнения:
RETCODE SQLPrepare (hstmt, szSqlStr, cbSqlStr)
HSTMT hstmt - идентификатор оператора
UCHAR szSqlStr- строка с SQL-оператором
SDWORD cbSqlStr - длина строки szSqlStr
SQLExecute выполняет подготовленный оператор:
RETCODE SQLExecute(hstmt)
HSTMT hstmt - идентификатор оператора
SQLPrepare и SQLExecDirect отличаются тем, что при вызове SQLPrepare оператор SQL в действительности не выполняется, вместо этого определяется путь доступа к данным источника данных. Использование подготавливаемого выполнения удобно для операторов, которые будут выполняться более одного раза. Так как путь доступа к данным уже определен, то выполнение может осуществляться несколько быстрее, чем при использовании SQLExecDirect. Кроме того, каждый вызов SQLExecute передает базе данных только идентификатор для планирования обращения, а не весь SQL-оператор.