|
Программирование >> Разработка пользовательского интерфейса
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)
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |