Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 [ 94 ] 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146

SQLAJ ocEr-iV > SQLAIlQcGDrinact -> SQLCorinc-=t 3Q AllocSlrrt

SGLFatth

KQI Disnnnrnnt

-DROP Option

-(lORF Onticn

Рис. 8.12.

Таблица 8.6. Базисные функции ODBC API

Назначение

Соединение с источником данных

Функция

SQLAllocEnv

SQLAlloc-Connect

SQLConnect

Описание

Получает указатель окружения. Одно окружение может служить для создания нескольких соединений.

Получает указатель соединения.

Подготовка SQL запросов

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

SQLAllocStmt Размещает указатель выражения.

mtypODBC.lngHdbc, SQL NULL HSTMT)

End If

intRet = oSQLFreeConnect(ByVal mtypODBC.lngHdbc) If intRet <<>> SQL SUCCESS Then

Call rODBCErrorInfo(mtypODBC.lngHenv,

mtypODBC.lngHdbc, SQL NULL HSTMT) End If

intRet = oSQLFreeEnv(ByVal mtypODBC.lngHenv) If intRet <<>> SQL SUCCESS Then

Call rODBCErrorInfo(mtypODBC.lngHenv, SQL NULL HDBC, SQL NULL HSTMT) End If

rODBCDisconnectExit:

Exit Function rODBCDisconnectErr:

MsgBox Err.Number & ": " & Err.Description, vbCritical, "rODBCDisconnect()"

rODBCDisconnect = False

Resume rODBCDisconnectExit End Function

Как видно из вышеизложенного, функции ODBC API можно разделить на несколько типов, в зависимости от задач, для которых они предназначены.

В табл. 8.6 перечислены базисные функции или функции ядра ODBC с пояснениями их назначения (см. также рис. 8.12). При этом функции объединены по признаку их назначения.



Выполнение запросов

Выборка результатов и информации о результатах

Окончание работы выражения

Окончание работы соединения

SQLPrepare SQLGet-

CursorName

SQLSet-

CursorName SQLExecute

SQLExec-Direct

SQLRow-Count

SQLNum-ResultCol

SQLDescribe-Col

SQLCol-Attributes

SQLBindCol

SQLFetch

SQLFreeStmt

SQLCancel SQLTransact

SQL-Disconnect

SQLFreeEnv

SQLFree-

Connect

Подготавливает SQL выражение для дальнейшего использования.

Возвращает имя, связанное с указателем выражения.

Устанавливает имя курсора.

Выполняет заранее подготовленный запрос.

Выполняет запрос.

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

Возвращает количество колонок в выбранном наборе данных.

Описывает колонку в выбранном наборе данных.

Описывает атрибуты колонки в выбранном наборе данных.

Присваивает место в памяти для колонки в выбранном наборе данных и указывает ее тип данных.

Возвращает несколько наборов данных.

Заканчивает процесс работы выражения.

Прерывает работу выражения.

Завершает или откатывает транзакцию.

Закрывает транзакцию.

Удаляет указатель окружения. Удаляет указатель соединения.

Ниже приводится пример объявления функций ODBC API, которые вы можете применять своих программах, если, конечно, в качестве среды разработки используется система, поддерживающая вызов DLL функций:

Declare Function oSQLRowCount Lib "odbc32.dll"

Alias "SQLRowCount" (ByVal hstmt As Long, pcrow As Long) As Integer

Declare Function oSQLBindCol Lib "odbc32.dll"

Alias "SQLBindCol" (ByVal hstmt As Long, ByVal icol As Integer,

ByVal fCType As Integer, rgbValue As Any,

ByVal cbValueMax As Long, pcbValue As Long) As Integer

Declare Function oSQLColAttributes Lib "odbc32.dll"

Alias "SQLColAttributes" (ByVal hstmt As Long, ByVal icol As Integer,

ByVal fCType As Integer, rgbDesc As Any, ByVal cbDescMax As Integer, pcbDesc As Integer, pfDesc As Long) As Integer Declare Function oSQLDescribeCol Lib "odbc32.dll" Alias "SQLDescribeCol" (ByVal hstmt As Long,

ByVal icol As Integer, ByVal szColName As String, ByVal cbColNameMax As Integer, pcbColName As Integer, pfSQLType As Integer, pcbColDef As Long, pibScale As Integer, pfNullable As Integer) As Integer Declare Function oSQLDisconnect Lib "odbc32.dll" Alias "SQLDisconnect" (ByVal hdbc As Long) As Integer Declare Function oSQLDriverConnect Lib "odbc32.dll" Alias "SQLDriverConnect" (ByVal hdbc As Long,



ByVal Hwnd As Long, ByVal szConnStrIn As String, ByVal cbConnStrIn As Integer,

ByVal szConnStrOut As String, ByVal cbConnStrOutMax As Integer, pcbConnStrOut As Integer, ByVal fDriverCompletion As Integer) As Integer

Declare Function oSQLError Lib "odbc32.dll"

Alias "SQLError" (ByVal henv As Long, ByVal hdbc As Long,

ByVal hstmt As Long, ByVal szSqlState As String,

pfNativeError As Long, ByVal szErrorMessage As String,

ByVal cbErrorMsgMax As Integer, pcErrorMsg As Integer) As Integer

Объявленная выше последняя функция служит для обработки ошибок, которые могут возникнуть и возникают при использовании ODBC API. ODBC поддерживает стандартную модель обработки ошибок. Каждая функция ODBC возвращает некий код, одним из которых может быть SQL ERROR. Чтобы получить больше информации об ошибке, приложение вызывает функцию SQLError().

Драйвер хранит информацию об ошибке в структурах henv, hdbc и hstmt и возвращает эту информацию приложению, когда приложение вызывает SQLError(). Каждая функция может вызвать ноль или больше ошибок.

Приложение обычно вызывает функцию SQLError(), когда предыдущий вызов ODBC функции возвращает SQL ERROR или SQL SUCCESS WITH INFO. Приложение может тем не менее вызвать SQLError() после вызова любой ODBC функции.

Функция SQLError() возвращает следующую информацию:

• SQLSTATE - стандартный идентификатор ошибки.

• Native Error Code - код ошибки, свойственный данному источнику данных.

• Error Message Text - описание ошибки.

Ошибки сохраняются для текущего указателя до тех пор, пока данный указатель не будет использован в вызове следующей функции. К примеру, ошибки на hstmt для текущей функции очищаются, как только другая функция будет выполнена с использованием такого же указателя. Ошибки, хранимые для данного указателя, никогда не очищаются в результате вызова функции с использованием указателя другого, хотя и родственного типа. Например, ошибки на hdbc не очищаются, когда вызов делается к родственной hstmt.

Функция SQLError() возвращает ошибку из структуры, связанной с самым правым ненулевым аргументом указателя. Приложение запрашивает информацию об ошибке в следующем порядке:

• Чтобы получить ошибки, связанные с окружением, приложение передает соответствующий henv и включает SQL NULL HDBC и SQL NULL HSTMT в hdbc и hstmt соответственно. Драйвер возвращает статус ошибки ODBC функции, вызываемой самой последней с тем же самым henv.

• Для вывода ошибок, связанных с соединением, приложение передает соответствующий hdbc плюс hstmt, равный SQL NULL HSTMT. В таком случае драйвер игнорирует аргумент henv. Драйвер возвращает статус ошибки функции ODBC, вызванной самой последней с

hdbc.

• Для отслеживания ошибок, связанных с выражением, приложение передает соответствующий указатель hstmt. Если вызов SQLError() содержит правильный указатель hstmt, драйвер игнорирует аргументы hdbc и henv. Драйвер возвращает статус ошибки самой последней функции ODBC, вызванной с указателем hstmt.

• Для отслеживания нескольких ошибок, вызываемых функцией, приложение обращается к SQLError() несколько раз. Для каждой ошибки драйвер возвращает SQL SUCCESS и удаляет эту ошибку из списка доступных ошибок.

Когда отсутствует дополнительная информация по самому правому ненулевому указателю, функция SQLError() возвращает SQL NO DATA FOUND.

Declare Function oSQLExtendedFetch Lib "odbc32.dll" Alias "SQLExtendedFetch" (ByVal hstmt As Long, ByVal fFetchType As Long, ByVal irow As Integer, pcrow As Long, rgfRowStatus As Integer) As Integer

Declare Function oSQLFetch Lib "odbc32.dll" Alias "SQLFetch" (ByVal hstmt As Long) As Integer

Declare Function oSQLGetCursorName Lib "odbc32.dll" Alias "SQLGetCursorName" (ByVal hstmt As Long, ByVal szCursor As String, ByVal cbCursorMax As Integer,



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 [ 94 ] 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146