Программирование >>  Разработка пользовательского интерфейса 

1 ... 91 92 93 [ 94 ] 95 96 97 ... 147


lngCurrentRow As Long Текущая запись в курсоре lngLastRow As Long Последняя запись в курсоре lngLastSetRow As Long Последняя запись в наборе данных

strCursorName As String Имя курсора intArrayPos As Integer Позиция этого типа в массиве

intRowStatus() As Integer Расширенная информация

о наборе записей strColLabels() As String Текст метки колонки lngColLabels() As Long Длина метки колонки lngDisplaySize() As Long Ширина вывода колонки End Type

Информация о наборе данных или создание переменной типа, который объявлен выше -oRecordSet:

Private mtypODBC As OrecordSet

Помимо этого понадобятся следующие константы: Возможные значения, которые будет возвращать вызов ODBC

Public Const SQL INVALID HANDLE = -2 Public Const SQL ERROR = -1 Public Const SQL SUCCESS = 0

Public Const SQL SUCCESS WITH INFO = 1

Public Const SQL STILL EXECUTING = 2

Public Const SQL NEED DATA = 99 Public Const SQL NO DATA FOUND = 100

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

Function rODBCConnect(strServer As String, strUID As String, strPassword As String) As Integer Dim intRet As Integer Dim strConnOut As String * 256 Dim intConnOut As Integer Dim typOBad As ORecordSet Dim i As Integer

On Error GoTo rODBCConnectErr

rODBCConnect = True

Установка указателя окружения

intRet = oSQLAllocEnv(mtypODBC.lngHenv)

If intRet <<>> SQL SUCCESS Then

Call rODBCErrorInfo(mtypODBC.lngHenv, SQL NULL HDBC,

SQL NULL HSTMT) End If

If intRet << SQL SUCCESS Then

rODBCConnect = False

GoTo rODBCConnectExit End If

Установка указателя соединения

intRet = oSQLAllocConnect(ByVal mtypODBC.lngHenv,

mtypODBC.lngHdbc)

If intRet <<>> SQL SUCCESS Then

Call rODBCErrorInfo(mtypODBC.lngHenv, mtypODBC.lngHdbc, SQL NULL HSTMT)

End If

If intRet << SQL SUCCESS Then

rODBCConnect = False

GoTo rODBCConnectExit End If

Соединения с указанным драйвером intRet = oSQLConnect(ByVal mtypODBC.lngHdbc, strServer, Len(strServer), strUID, Len(strUID), strPassword,



Len(strPassword)) If intRet <<>> SQL SUCCESS Then

Call rODBCErrorInfo(mtypODBC.lngHenv, mtypODBC.lngHdbc, SQL NULL HSTMT)

End If

If intRet << SQL SUCCESS Then rODBCConnect = False GoTo rODBCConnectExit

End If

rODBCConnectExit: Exit Function rODBCConnectErr:

MsgBox Err.Number & : & Err.Description,

vbCritical, rODBCConnect()

typOBad.intArrayPos = -1 rODBCConnect = False Resume rODBCConnectExit End Function

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

intRet = oSQLAllocStmt(ByVal mtypODBC.lngHdbc,

mtypODBC.lngHstmt)

К счастью, эту функцию надо выполнять только один раз, так как возвращаемый указатель может использоваться любым количеством соединений. Однако с некоторыми серверами, такими как Microsoft SQL Server, вы должны завершить запрос с указателем утверждением, перед тем как начать выполнение другого запроса. В силу этого, вы не можете разместить указатель другого утверждения без открытия другого соединения к серверу или же вам необходимо подождать, пока текущее выражение не завершит работу. В зависимости от драйвера вы можете иметь возможность выполнять несколько выражений на одном соединении. Используйте функцию SQLGetInfo() для того, чтобы определить, способен ли ваш драйвер выполнять несколько утверждений на одном соединении.

Таким образом, мы подошли к процессу выполнения SQL выражения. Для этого мы используем объявление следующей функции:

Declare Function oSQLExecDirect Lib odbc32.dll Alias SQLExecDirect (ByVal hstmt As Long,

ByVal szSqlStr As String, ByVal cbSqlStr As Integer) As Integer

Теперь мы объявили все функции для открытия доступа к набору данных, хранящихся на сервере. Эта функция может выглядеть следующим образом:

Function rODBCOpenRecordset( strSQL As String, lngType As Long) As Boolean

Открывает набор данных на источнике данных ODBC

Вначале необходимо вызвать ODBCConnect для установки

соединения

Возвращает true при успешном завершении, false при любой ошибке

Dim intRet As Integer

Dim i As Integer

On Error GoTo rODBCOpenRecordsetErr

rODBCOpenRecordset = True

Проверка наличия соединения

If mtypODBC.lngHdbc = SQL NULL HDBC Then

MsgBox Нет открытых дескрипторов. Нет открытых соединений для открытия наборов

данных. &

Вызовите вначале rODBCOpenRecordset , vbCritical, rODBCOpenRecordset() rODBCOpenRecordset = False GoTo rODBCOpenRecordsetExit End If



Размещает SQL выражение для использования в других функциях

intRet = oSQLAllocStmt(ByVal mtypODBC.lngHdbc,

mtypODBC.lngHstmt) If intRet <<>> SQL SUCCESS Then

Call rODBCErrorInfo(mtypODBC.lngHenv, mtypODBC.lngHdbc, mtypODBC.lngHstmt)

End If

If intRet << SQL SUCCESS Then

rODBCOpenRecordset = False

GoTo rODBCOpenRecordsetExit End If

Устанавливает некоторые значения в глобальной структуре

mtypODBC.BOF = False mtypODBC.EOF = False mtypODBC.lngFirstRow = 0 mtypODBC.lngCurrentRow = 0 mtypODBC.lngLastRow = 0

mtypODBC.lngCursor = SQL CURSOR DYNAMIC If lngType = dbOpenDynaset Then

mtypODBC.lngConcur = SQL CONCUR VALUES ElseIf lngType = dbOpenSnapshot Then

mtypODBC.lngConcur = SQL CONCUR READ ONLY

Else

rODBCOpenRecordset() rODBCOpenRecordset = False GoTo rODBCOpenRecordsetExit End If

mtypODBC.lngRowSetSize = odbcRowsetSize Устанавливает максимальное количество записей mtypODBC.lngMaxRows = odbcMaxRows Устанавливает максимальную ширину поля в этом выражении

mtypODBC.lngMaxWidth = odbcMaxWidth

intRet = oSQLSetStmtOption(ByVal mtypODBC.lngHstmt,

SQL ROWSET SIZE, mtypODBC.lngRowSetSize)

If intRet <<>> SQL SUCCESS Then

Debug.Print Сообщение: не можем установить размер набора Call rODBCErrorInfo(mtypODBC.lngHenv, mtypODBC.lngHdbc, mtypODBC.lngHstmt)

End If

Устанавливает тип курсора для этого выражения intRet = oSQLSetStmtOption(ByVal mtypODBC.lngHstmt, SQL CURSOR TYPE, mtypODBC.lngCursor)

If intRet <<>> SQL SUCCESS Then

Debug.Print Сообщение: не можем установить тип курсора Call rODBCErrorInfo(mtypODBC.lngHenv, mtypODBC.lngHdbc, mtypODBC.lngHstmt)

End If

Устанавливает тип согласования для этого выражения intRet = oSQLSetStmtOption(ByVal mtypODBC.lngHstmt,

SQL CONCURRENCY, mtypODBC.lngConcur)

If intRet <<>> SQL SUCCESS Then

Call rODBCErrorInfo(mtypODBC.lngHenv, mtypODBC.lngHdbc, mtypODBC.lngHstmt)

End If

intRet = oSQLSetStmtOption(ByVal mtypODBC.lngHstmt,

SQL MAX ROWS, mtypODBC.lngMaxRows) If intRet <<>> SQL SUCCESS Then

Call rODBCErrorInfo(mtypODBC.lngHenv, mtypODBC.lngHdbc, mtypODBC.lngHstmt)

End If

Присваивает имя курсора выражения intRet = oSQLSetCursorName(mtypODBC.lngHstmt, C1 , 2)



1 ... 91 92 93 [ 94 ] 95 96 97 ... 147

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика