Главная страница
Навигация по странице:

  • Порядок выполнения работы

  • Основные сведения Функция SQLAllocEnv

  • Коды возврата функций ODBC

  • Лабораторная работа N 4

  • Порядок выполнения работы и варианты заданий

  • Основные сведения Функция SQLAllocStmt

  • Функция SQLBindParameter

  • Лабораторная работа N 5

  • Основные сведения Функция SQLBindCol

  • Функция SQLExtendedFetch

  • Методические указания к выполнению лабораторных и курсовой работ ЙошкарОла 2007


    Скачать 0.8 Mb.
    НазваниеМетодические указания к выполнению лабораторных и курсовой работ ЙошкарОла 2007
    Дата15.03.2022
    Размер0.8 Mb.
    Формат файлаdoc
    Имя файлаsql (1).doc
    ТипМетодические указания
    #397929
    страница7 из 11
    1   2   3   4   5   6   7   8   9   10   11

    Соединение с базой данных в ODBC
    Цель работы: изучить функции ODBC для соединения с базой данных, а также функции для получения информации о драйвере и источнике данных, приобрести навыки использования данных функций при разработке клиентских приложений баз данных.
    Порядок выполнения работы
    1.Ознакомиться с концепцией ODBC.

    2. Изучить программный интерфейс функций SQLAllocEnv,

    SQLFreeEnv, SQLAllocConnect, SQLFreeConnect, SQLConnect, SQLDisconnect, а также функций SQLGetInfo и SQLGetFunctions.

    3. Написать на языке программирования высокого уровня C/C++

    программу, которая устанавливает соединение с источником данных,

    получает определенную вариантом задания информацию о драйвере и источнике данных, разъединяет соединение с источником данных.

    4. Запустить ODBC-администратор и с его помощью выбрать ODBC-драйвер для используемого в программе источника данных.

    5. Выполнить программу, разработанную в п.3.

    6. Оформить отчет о проделанной работе.
    Содержание отчета

    1.Задание;

    2. Краткое описание используемых функций ODBC;

    3. Краткое описание программы;

    4. Листинг программы;

    5. Результаты выполнения программы;
    Для последующих лабораторных работ содержание отчета будет

    иметь такую же структуру.
    Основные сведения
    Функция SQLAllocEnv
    Данная функция распределяет память для идентификатора среды

    и инициализирует интерфейс ODBC для использования прикладной программой. Функция SQLAllocEnv имеет следующий синтаксис:

    RETCODE SQLAllocEnv(phev),

    где phenv – адрес идентификатора среды (выходной параметр типа HENV FAR *).

    Поскольку в рамках одной среды можно установить произвольное число соединений, для каждой прикладной программы достаточно выделить только один идентификатор среды.
    Функция SQLFreeEnv
    Данная функция освобождает идентификатор среды, а также всю

    назначенную ему память. Функция SQLFreeEnv имеет следующий синтаксис:

    RETCODE SQLFreeEnv(henv),

    где henv – идентификатор среды (входной параметр типа HENV).
    Функция SQLAllocConnect
    Данная функция распределяет память для идентификатора соединения в рамках среды, определенной с помощью идентификатора henv. Функция SQLAllocConnect имеет следующий синтаксис:

    RETCODE SQLAllocConnect(henv, phdbc)

    Описание параметров для данной функции приведено в следующей таблице.


    Аргумент

    Тип

    Использование

    Описание

    henv

    HENV

    Вход

    Идентификатор среды

    phdbc

    HDBC FAR*

    Выход

    Идентификатор соединения (адрес)


    Функция SQLFreeConnect
    Данная функция освобождает идентификатор соединения и всю

    связанную с ним память. Функция SQLFreeConnect имеет следующий

    синтаксис:

    RETCODE SQLFreeConnect(hdbc),

    где hdbc – идентификатор соединения (входной параметр типа HDBC).
    Функция SQLConnect
    Функция SQLConnect загружает драйвер базы данных и устанавливает соединение с источником данных. Функция SQLConnect имеет следующий синтаксис:

    RETCODE SQLConnect(hdbc, szDSN, cbDSN, szUID, cbUID, szAuthStr, cbAuthStr)

    Описание параметров для данной функции приведено в следующей таблице.


    Аргумент

    Тип

    Использование

    Описание

    hdbc

    HDBC

    Вход

    Идентификатор соединения

    szDSN

    UCHAR FAR*

    Вход

    Имя источника данных (адрес)

    cbDSN

    SWORD

    Вход

    Длина szDSN.

    szUID

    UCHAR FAR*

    Вход

    Идентификатор пользователя (адрес)

    cbUID

    SWORD

    Вход

    Длина szUID

    szAuthStr

    UCHAR FAR*

    Вход

    Пароль (адрес)

    cbAuthStr

    HDBC

    Вход

    Длина szAuthStr



    Если строка имени источника данных, строка идентификатора

    пользователя или строка пароля имеют нулевое окончание, то, соответственно, cbDSN, cbUID или cbAuthStr могут быть установлены в SQL_NTS.

    Если источник данных не требует имени пользователя (пароля), то нулевое значение или пустая строка должны быть переданы в szUID (szAuthStr), нулевое значение или SQL_NTS - в cbUID (cbAuthStr).
    Функция SQLDisconnect
    Данная функция закрывает соединение с источником данных.

    Функция SQLDisconnect имеет следующий синтаксис:

    RETCODE SQLDisconnect(hdbc),

    где hdbc – идентификатор соединения (входной параметр типа HDBC).


    Функция SQLGetInfo
    Данная функция возвращает общую информацию о драйвере и источнике данных, соответствующих заданному идентификатору соединения. Функция SQLGetInfo имеет следующий синтаксис:

    RETCODE SQLGetInfo(hdbc, fInfoType, rgbInfoValue, cbInfoValueMax, cbInfoValue)

    Описание параметров для данной функции приведено в следующей таблице.


    Аргумент

    Тип

    Использование

    Описание

    hdbc

    HDBC

    Вход

    Идентификатор соединения

    fInfoType

    UWORD

    Вход

    Тип информации

    rgbInfoValue

    PTR

    Выход

    Область хранения информации (адрес)

    cbInfoValueMax

    SWORD

    Вход

    Максимальная длина области хранения (в байтах)

    cbInfoValue

    SWORD

    FAR *

    Выход

    Длина области хранения информации (адрес)



    В зависимости от запрашиваемого fTypeInfo возвращаемая ин-

    формация будет одного из нижеследующих типов: строка символов с

    нуль-окончанием, 16-битное целое значение, 32-битный флаг или 32-

    битное двоичное значение. Ниже приведены некоторые значения

    fTypeInfo и их содержательная трактовка: SQL_DATABASE_NAME – имя базы данных, SQL_DBMS_NAME – имя СУБД, SQL_DRIVER_NAME –имя драйвера, SQL_ACTIVE_STATEMENT – число активных операторов в соединении. Для определения типов выборки, связанных с курсором, используется SQL_FETCH_DIRECTION.

    В качестве результата вызова функции возвращается 32-разрядная битовая маска, в которой выделяются следующие битовые маски:

    SQL_FD_FETCH_NEXT,SQL_FD_FETCH_FIRST,

    SQL_FD_FETCH_LAST,SQL_FD_FETCH_PRIOR, SQL_FD_FETCH_ABSOLUTE, SQL_FD_FETCH_RELATIVE.

    Чтобы выяснить, поддерживает ли источник данных позиционные операторы DELETE и UPDATE, следует использовать POSITIONED_STATEMENTS. При этом будет возвращена 32-разрядная битовая маска, которая перечисляет, какие позиционные SQL-операторы поддерживаются. Битовыми масками являются SQL_PS_POSITIONED_DELETE, SQL_PS_POSITIONED_UPDATE и SQL_PS_SELECT_FOR_UPDATE.
    Функция SQLGetFunctions
    Данная функция определяет, поддерживает ли драйвер заданную

    функцию ODBC. Функция SQLGetFunctions имеет следующий синтаксис:

    RETCODE SQLGetFunctions(hdbc, fFunction, pfExists)

    Описание параметров для данной функции приведено в следующей таблице.


    Аргумент

    Тип

    Использование

    Описание

    hdbc

    HDBC

    Вход

    Идентификатор соединения

    fFunction

    UWORD

    Вход

    Функция ODBC

    pfExists

    UWORD FAR*

    Выход

    Логическое значение TRUE или FALSE



    Значение параметра fFunction должно быть вида: SQL_API_???,

    где ??? – имя ODBC-функции. Например, для функции SQLGetInfo значением fFunction будет SQL_API_SQLGETINFO.
    Коды возврата функций ODBC


    Код возврата

    Описание

    SQL_SUCCESS

    Функция выполнена успешно. Информация об ошибке для возврата отсутствует.

    SQL_SUCCESS_WITH_INFO

    Функция выполнена успешно, однако имеется некоторая дополнительная информация о выполнении функции

    SQL_NO_DATA_FOUND

    Все строки результирующего множества извлечены.


    SQL_ERROR

    Ошибка в процессе выполнения данной функции

    SQL_INVALID_HANDLE

    Недействительный идентификатор

    SQL_STIL_EXECUTING

    Функция выполняется асинхронно и все еще находится в процессе выполнения

    SQL_NEED_DATA

    При подготовке или выполнении какого-либо оператора драйвер установил, что прикладная программа должна определить не менее одного значения параметра.




    Функция SQLError
    Для получения дополнительной информации в случае возникновения ошибки (при этом кодом завершения ODBC-функции является значение SQL_ERROR SQL_SUCCESS_WITH_INFO) следует воспользоваться функцией SQLError. Функция SQLError имеет следующий синтаксис:

    RETCODE SQLError(henv, hdbc, hstmt, szSqlState, pfNativeError, szErrorMsg, cbErrorMsgMax, cbErrorMsg)

    Описание параметров для данной функции приведено в следующей таблице.


    Аргумент

    Тип

    Использование

    Описание

    Henv

    HENV

    Вход

    Идентификатор среды

    Hdbc

    HDBC

    Вход

    Идентификатор соединения

    Hstmt

    HSTMT

    Вход

    Идентификатор оператора

    SzSqlState

    UCHAR

    FAR *

    Выход

    Строка состояния (адрес)

    PfNativeError

    SDWORD FAR *

    Выход

    Собственный код ошибки СУБД (адрес)

    SzErrorMsg

    UCHAR

    FAR *

    Выход

    Строка текста ошибки (адрес)

    CbErrorMsgMax

    SWORD

    Вход

    Максимальная длина строки szErrorMsg

    PcbErrorMsg

    SWORD FAR *

    Выход

    Общее число символов в строке текста ошибки (адрес)



    Идентификаторы среды, соединения и оператора могут принимать

    нулевые значения – SQL_NULL_HENV, SQL_NULL_HDBC и

    SQL_NULL_HSTMT, соответственно. Функция SQLError возвращает информацию об ошибке для крайнего справа ненулевого идентификатора. Для строки состояния требуется шесть байт, из них пять – собственно для состояния, последний байт – нуль-окончание. В ряде случаев информация об ошибке может состоять более чем из одной части. В таких случаях для выборки информации функцию SQLError следует вызывать более одного раза.
    Методические указания
    Обобщенный алгоритм использования ODBC в прикладных программах представлен ниже (в скобках указаны основные используемые функции).
    Фаза инициализации

    Шаг 1. Назначение идентификатора среды (SQLAllocEnv)

    Шаг 2. Назначение идентификатора соединения (SQLAllocConnect)

    Шаг 3. Соединение с сервером (SQLConnect)

    Шаг 4. Назначение идентификатора оператора (SQLAllocStmt)
    Фаза обработки SQL операторов

    Шаг 5. Выполнение оператора (SQLExecDirect, SQLPrepare,

    SQLExecute)

    Шаг 6. Выборка данных (SQLFetch, SQLBindCol, SQLGetData,

    SQLExtendedFetch)
    Фаза завершения

    Шаг 7. Освобождение идентификатора оператора (SQLFreeStmt)

    Шаг 8. Разрыв соединения с сервером (SQLDisconnect)

    Шаг 9. Освобождение идентификатора соединения (SQLFreeConnect)

    Шаг 10. Освобождение идентификатора окружения(SQLFreeEnv)
    Вышеприведенный алгоритм являетсяобщим для лабораторных

    работ NN 3-5. В данной лабораторной работе используется алгоритм,

    включающий шаги 1, 2, 3, использование функций SQLGetFunctions и

    SQLGetInfo, шаги 8, 9, 10 в приведенном порядке.

    Для возможности работы с функциями ODBC в программу на языках С или С++ необходимо включить заголовочный файл sql.h директивой #include

    Настройка ODBC производится следующим образом. В окне Control Panel щелкните мышью на пиктограмме ODBC. В появившемся окне выберите закладку User DSN, нажмите кнопку Add. В появившемся списке выберите SQL Server. Нажмите кнопку Finish. После этого в появившемся диалоговом окне ODBC SQL Server Setup заполните определенные поля. В поле Data Source Name впишите имя использующегося в прикладной программе источника данных (например, my_source), а в поле Server - имя используемого SQL-сервера (например, VT30213_S). В этом же диалоговом окне нажмите кнопку Options и в открывшемся окне в поле Database впишите имя используемой базы данных SQL Server (например, dbstud2). При этом имя источника данных связывается с указанной базой данных.
    Варианты заданий
    Задание типа А: Определить, поддерживает ли драйвер заданную

    функцию.
    1. SQLAllocEnv, SQLMoreResults, SQLDriverConnect, SQLRowCount;

    2. SQLFreeEnv, SQLColumnPrivileges, SQLStatistics, SQLParamData;

    3. SQLAllocConnect, SQLExtendedFetch, SQLDrivers, SQLPutData;

    4. SQLFreeConnect, SQLSetStmtOption, SQLColumns, SQLTransact;

    5. SQLConnect, SQLGetCursorName, SQLTables, SQLGetTypeInfo;

    6. SQLDisconnect, SQLSetConnectOption, SQLProcedure, SQLColAttributes;

    7. SQLAllocStmt, SQLDataSources, SQLGetConnectOption, SQLCancel;

    8. SQLFreeStmt, SQLSpecialColumns, SQLParamOption, SQLGetInfo;

    9.SQLExecDirect, SQLTablePrivileges, SQLDescribeCol, SQLNativeSql;

    10. SQLExecute, SQLGetData, SQLSetCursorName, SQLGetFunctions;

    11. SQLPrepare, SQLFetch, SQLProcedureColumns, SQLPrimaryKeys;

    12. SQLBindCol, SQLForeignKeys, SQLNumResultCols, SQLSetPos.
    ЗаданиетипаБ: Выбрать информацию об источнике данных. Тип

    выбираемых данных помечается символами S, B, N, заключенными в

    круглые скобки. Тип данных, отмеченный символом S, соответствует

    символьной строке, а символом N – числовому значению. Тип данных,

    отмеченный символом ?, является логическим. При этом надо определить, поддерживает ли источник данных указанные возможности.
    1. Имя текущей базы данных (S);

    2. Имя СУБД (S);

    3. Имя драйвера (S);

    4. Курсор с выборкой следующей строки (?);

    5. Курсор с выборкой первой строки (?);

    6. Курсор с выборкой последней строки (?);

    7. Курсор с выборкой предыдущей строки (?);

    8. Курсор с выборкой N-й строки (?);

    9. Курсор с выборкой N-й строки по отношению к текущей позиции (?);

    10. Оператор позиционного удаления (?);

    11. Оператор позиционной модификации (?);

    12. Число активных операторов в соединении (N).

    Лабораторная работа N 4
    Выполнение операторов SQL в ODBC
    Цель работы: изучить функции ODBC для выполнения SQL-

    операторов, приобрести навыки использования данных функций при

    разработке клиентских приложений баз данных.
    Порядок выполнения работы и варианты заданий
    1. Изучить программный интерфейс функций SQLAllocStmt,

    SQLFreeStmt, SQLExecDirect, SQLPrepare, SQLExecute, SQLBindParameter.

    2. Написать на языке программирования высокого уровня C/C++

    программу для создания и заполнения данными таблицы в соответствии с заданием лабораторной работы N 2. Также программа должна содержать возможность создания и вызова хранимой процедуры, триггеров, пользовательской функции, и просмотра результатов работы. Пользовательский интерфейс программы должен включать формы с полями ввода для занесения информации в таблицу. При нечетном номере варианта задания использовать прямое выполнение SQL-оператора, а при четном – подготавливаемое.

    3. Запустить ODBC-администратор и с его помощью выбрать ODBC-драйвер для используемого в программе источника данных.

    4. Выполнить программу, разработанную в п.2.

    5. Оформить отчет о проделанной работе.
    Основные сведения
    Функция SQLAllocStmt

    Данная функция распределяет память для идентификатора оператора в рамках определенного соединения. Функция SQLAllocStmt имеет следующий синтаксис:

    RETCODE SQLAllocStmt(hdbc, phstmt)

    Описание параметров для данной функции приведено в следующей таблице.


    Аргумент

    Тип

    Использование

    Описание

    hdbc

    HDBC

    Вход

    Идентификатор соединения

    phstmt

    HSTMT FAR

    Выход

    Идентификатор оператора (адрес)


    Функция SQLFreeStmt
    Данная функция выполняет следующие действия:

    • останавливает обрабатываемые SQL-операторы, связанные с

    заданным идентификатором оператора;

    • закрывает открытые курсоры, имеющие отношение к заданному

    идентификатору оператора;

    • отбрасывает ожидаемые результаты;

    • освобождает все ресурсы, связанные с заданным идентификатором оператора.

    Функция SQLFreeStmt имеет следующий синтаксис:

    RETCODE SQLFreeStmt(hstmt, fOption)

    Описание параметров для данной функции приведено в следующей таблице.


    Аргумент

    Тип

    Использование

    Описание

    hstmt

    HSTMT

    Вход

    Идентификатор оператора

    fOption

    UWORD

    Вход

    Опция завершения


    Опция SQL_CLOSE закрывает курсор и отбрасывает все ожидаемые результаты. Опция SQL_DROP освобождает идентификатор оператора и все связанные с ним ресурсы, а также выполняет действия предыдущей опции. Опция SQL_UNBIND освобождает (“отвязывает”) все столбцы, используемые соответствующей функцией SQLBindCol. Опция SQL_RESET_PARAMS освобождает все параметры, используемые соответствующей функцией SQLBindParameter. Перечисленные опции используются применительно к заданному идентификатору оператора.
    Функция SQLExecDirect
    Данная функция выполняет SQL-оператор. Если в операторе существуют какие-либо параметры, то при выполнении используются их текущие значения. ФункцияSQLExecDirect имеет следующий синтаксис:

    RETCODE SQLExecDirect(hstmt, szSqlStr, cbSqlStr)

    Описание параметров для данной функции приведено в таблице.


    Аргумент

    Тип

    Использование

    Описание

    hstmt

    HSTMT

    Вход

    Идентификатор оператора

    szSqlStr

    UCHAR FAR*

    Вход

    Строка, содержащая SQL-оператор (адрес)

    cbSqlStr

    SDWORD

    Вход

    Длина строки szSqlStr


    Функция SQLExecDirect представляет самый быстрый способ запустить SQL-оператор при одноразовом выполнении.
    Функция SQLPrepare
    Данная функция подготавливает SQL-строку для выполнения.

    Функция SQLPrepare имеет следующий синтаксис:

    RETCODE SQLPrepare(hstmt, szSqlStr, cbSqlStr)

    Данная функция имеет такие же параметры, что и функция SQLExecDirect.
    Функция SQLExecute
    Данная функция выполняет подготовленный SQL-оператор. Если в операторе существуют какие-либо параметры, то при выполнении используются их текущие значения. Функция SQLExecute имеет следующий синтаксис:

    RETCODE SQLExecute(hstmt),

    где hstmt – идентификатор оператора (входной параметр типа HSTMT).

    Перед вызовом функции SQLExecute должна быть выполнена

    функция SQLPrepare.
    Функция SQLBindParameter
    Данная функция связывает параметр SQL-оператора с буфером,

    где хранится его значение. Функция SQLBindParameter имеет следующий синтаксис:

    RETCODE SQLBindParameter(hstmt, ipar, fParamType, fCType,

    fSqlType, cbColDef, ibScale, rgbValue, cbValueMax, pcbValue)

    Описание параметров для данной функции приведено в следующей таблице.


    Аргумент

    Тип

    Использование

    Описание

    hstmt

    HSTMT

    Ввод

    Идентификатор оператора

    ipar

    UWORD

    Ввод

    Номер параметра

    fParamType

    SWORD

    Ввод

    Тип параметра

    fCType

    SWORD

    Ввод

    С-тип данных параметра

    fSqlType

    SWORD

    Ввод

    SQL-тип данных параметра

    cbColDef

    UDWORD

    Ввод

    Точность столбца источника данных

    ibScale

    SWORD

    Ввод

    Размер столбца источника данных

    rgbValue

    PTR

    Ввод/вывод

    Буфер значения параметра (адрес)

    CbValueMax

    SDWORD

    Ввод

    Максимальная длина буфера rgbValue

    PcbValue

    SDWORD FAR*

    Ввод/вывод

    Буфер значения длины параметра (адрес)


    Параметры в SQL-операторах отмечаются маркером ?. Пример:

    INSERT INTO Emp(empid, firstname) VALUES (?,?).

    Нумерация параметров начинается с 1. Тип параметра fParamType может принимать одно из трех значений: SQL_PARAM_INPUT, SQL_PARAM_INPUT_OUTPUT или SQL_PARAM_OUTPUT. Значение SQL_PARAM_INPUT используется для всех параметров, которые не включены в процедуру, а также для процедур, использующих параметры ввода. Значение SQL_PARAM_INPUT_OUTPUT маркирует параметр ввода/вывода в процедуре. Значение SQL_PARAM_OUTPUT маркирует значение возврата или параметр вывода в процедуре.

    С-тип данных - это тип данных, из которого конвертируются данные. C-тип данных параметра может быть одним из следующих значений: SQL_C_BINARY, SQL_C_BIT, SQL_C_CHAR, SQL_C_DATE,

    SQL_C_DEFAULT, SQL_C_DOUBLE, SQL_C_FLOAT, SQL_C_SLONG,

    SQL_C_SSHORT, SQL_STINYINT, SQL_C_TIME, SQL_C_TIMESTAMP,

    SQL_C_ULONG, SQL_C_USHORT, SQL_C_UTINYINT, SQL_C_DEFAULT.

    SQL-тип данных - это тип данных, в который конвертируются данные. Он должен совпадать с SQL-типом соответствующего столбца.

    SQL-тип данных может быть одним из следующих значений:

    SQL_BIGINT, SQL_BINARY, SQL_BIT, SQL_CHAR, SQL_DATE,

    SQL_DECIMAL, SQL_DOUBLE, SQL_FLOAT, SQL_INTEGER,

    SQL_LONGVARBINARY, SQL_LONGVARCHAR, SQL_NUMERIC,

    SQL_REAL, SQL_SMALLINT, SQL_TIME, SQL_TIMESTAMP,

    SQL_TINYINT, SQL_VARBINARY, SQL_VARCHAR.

    Пример вызова функции SQLBindParameter:

    rc=SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR,

    SQL_CHAR, TEST_LEN, 0, szTEST, 0, &cbTEST);
    Методические указания
    Данная лабораторная работа основывается на результатах предыдущей лабораторной работы. При выполнении данной лабораторной работы используются шаги 1-5, 1-10 алгоритма использования ODBC, представленного в предыдущей работе, в приведенном порядке.

    Лабораторная работа N 5
    Выборка данных из результирующего множества в ODBC
    Цель работы: изучить функции ODBC для выборки данных из результирующей таблицы, изучить скроллируемые курсоры в ODBC, приобрести навыки использования данных функций при разработке клиентских приложений баз данных.
    Порядок выполнения работы и варианты заданий
    1. Изучить программный интерфейс функций SQLFetch, SQLBindCol, SQLGetData, SQLExtendedFetch, SQLSetStmtOption.

    2. Написать на языке программирования высокого уровня С/C++:

    а) программу для создания курсора в ODBC. Определение курсора берется из вариантов заданий к лабораторной работе N 2. При нечетном номере варианта задания следует использовать статические курсоры, а при четном – динамические.

    б) программу для просмотра результирующей таблицы с использованием функций SQLFetch и SQLBindCol (для нечетного номера варианта задания) и функции SQLGetData (для четного номера варианта задания);

    в) программу для различных типов выборки строк из результирующей таблицы с использованием функции SQLExtendedFetch. Пользовательский интерфейс программы должен включать элементы управления (например, кнопки, диалоговые окна и т.д.) для показа первой, последней, следующей и предыдущей строк, а также строк с абсолютным и относительным номером N.

    3. Запустить ODBC-администратор и с его помощью выбрать ODBC-драйвер для используемого в программе источника данных.

    4. Выполнить программу, разработанную в п.2.

    5. Оформить отчет о проделанной работе.
    Основные сведения
    Функция SQLBindCol
    Данная функция назначает область хранения в памяти и тип данных для столбца результирующей таблицы. Функция SQLBindCol имеет следующий синтаксис:

    RETCODE SQLBindCol(hstmt, icol, fcType, rgbValue, cbValueMax,

    pcbValue)

    Описание параметров функции приведено в следующей таблице.


    Аргумент

    Тип

    Использование

    Описание

    hstmt

    HSTMT

    Ввод

    Идентификатор оператора

    icol

    UWORD

    Ввод

    Номер столбца

    fCType

    SWORD

    Ввод

    С-тип данных столбца

    rgbValue

    PTR

    Ввод

    Область хранения данных (адрес)

    cbValueMax

    SDWORD

    Ввод

    Максимальная длина области хранения

    pcbValue

    SDWORD FAR*

    Ввод

    Длина столбца выборки (адрес)


    Столбцы результирующей таблицы нумеруются слева направо, начиная с 1.
    Функция SQLFetch
    Данная функция извлекает очередную строку данных из результирующей таблицы, причем возвращаются данные для всех столбцов, которые были связаны с помощью функции SQLBindCol. Синтаксис функции SQLFetch:

    RETCODE SQLFetch(hstmt),

    где hstmt – идентификатор оператора (входной аргумент типа HSTMT).
    Функция SQLGetData
    Эта функция позволяет выполнить выборку данных из столбцов, которые не были связаны с помощью функции SQLBindCol. Функция

    SQLGetData имеет следующий синтаксис:

    RETCODE SQLGetData(hstmt, icol, fCType, rgbValue, rgbValueMax,

    pcbValue)

    Данная функция имеет те же параметры, что и функция SQLBindCol. Функция SQLGetData полезна в тех случаях, когда нет нужды выполнять выборку одних и тех же столбцов для каждой строки результирующей таблицы при вызове SQLFetch.
    Функция SQLExtendedFetch
    Данная функция используется вместо функции SQLFetch для выборки строк результирующей таблицы. Функция SQLExtendedFetch расширяет функциональность функции SQLFetch, поскольку предусматривает блочные и скроллируемые (перемещаемые) курсоры. Функция SQLExtendedFetch имеет следующий синтаксис:

    RETCODE SQLExtendedFetch(hstmt,fFetchType, irow, pcrow, rgfRowStatus)

    Описание параметров функции приведено в следующей таблице.


    Аргумент

    Тип

    Использование

    Описание

    hstmt

    HSTMT

    Ввод

    Идентификатор оператора

    fFetchType

    UWORD

    Ввод

    Тип выборки

    Irow

    SDWORD

    Ввод

    Число строк выборки

    pcrow

    UDWORD

    FAR *

    Выход


    Число реально извлеченных строк (адрес)

    rgfRowStatus

    UWORD

    FAR *


    Выход


    Массив значений состояния для извлеченного множества строк



    ODBC поддерживает статические и динамические курсоры. Статические курсоры нечувствительны к изменениям базовых таблиц, а динамические являются полностью чувствительными.

    Движение курсора устанавливается с помощью параметров

    fFetchType и irow. В приведенной ниже таблице определены значения

    параметра fFetchType и соответствующие им результаты выборки функции SQLExtendedFetch.


    FFetchType

    Действие SQLExtendedFetch

    SQL_FETCH_NEXT

    Следующее строковое множество

    SQL_FETCH_PRIOR

    Предыдущее строковое множество

    SQL_FETCH_RELATIVE

    Строковое множество, начиная с N-й строки по отношению к текущей позиции курсора

    SQL_FETCH_FIRST

    Первое строковое множество

    SQL_FETCH_LAST

    Последнее строковое множество

    SQL_FETCH_ABSOLUTE

    Строковое множество, начиная с N-й строки


    В приведенной таблице значение N определяется параметром irow. В данной лабораторной работе не используются блочные курсоры, по умолчанию считается, что строковое множество состоит из одной строки.
    Методические указания
    Создание курсора в ODBC не предполагает использование SQL-

    оператора объявления курсора. Курсор создается автоматически при

    выполнении оператора выборки SELECT. При этом идентификатор

    данного оператора SELECT должен использоваться для выборки данных из результирующей таблицы.

    При выполнении данной лабораторной работы в полном объеме используется алгоритм использования ODBC, приведенный в описании лабораторной работы N 3.

    Для выборки всех данных из заданных столбцов результирующей

    таблицы с помощью функций SQLBindCol и SQLFetch следует использовать следующий алгоритм:

    1. Вызвать функцию SQLBindCol один раз для каждого столбца, который должен быть возвращен из результирующей таблицы.

    2. Вызвать функцию SQLFetch для перемещения курсора на следующую строку и возврата данных из связанных столбцов.

    3. Повторить шаг 2 до тех пор, пока функция SQLFetch не возвратит SQL_NO_DATA_FOUND.

    Для выборки всех данных из заданных столбцов результирующей

    таблицы с помощью функций SQLGetData и SQLFetch следует использовать следующий алгоритм:

    1. Вызывать функцию SQLFetch для перемещения курсора на следующую строку.

    2. Вызвать функцию SQLGetData для каждого из заданных столбцов.

    3. Повторить шаги 1 и 2 до тех пор, пока функция SQLFetch не возвратит SQL_NO_DATA_FOUND.

    Прежде чем использовать перемещаемые курсоры, необходимо

    проверить, поддерживает ли драйвер функцию SQLExtendedFetch.

    Затем рекомендуется проверить, какие типы выборки допускает курсор (см. лабораторную работу N 3, варианты заданий типа B NN 4-9). После этого необходимо установить тип курсора (скроллируемый) с помощью функции SQLSetStmtOption. Пример вызова функции SQLSetStmtOption:

    Rc=SQLSetStmtOption(hstmt, SQL_CURSOR_TYPE,

    SQL_CURSOR_DYNAMIC);

    В данном случае выбран динамический курсор. Для выбора

    статического курсора необходимо использовать опцию

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

    1   2   3   4   5   6   7   8   9   10   11


    написать администратору сайта