Анимация
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

pcbCursor As Integer) As Integer

Declare Function oSQLGetData Lib "odbc32.dll"

Alias "SQLGetData" (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 oSQLGetInfo Lib "odbc32.dll" Alias "SQLGetInfo" (ByVal hdbc As Long,

ByVal fInfoType As Integer, ByRef rgbInfoValue As Any, ByVal cbInfoMax As Integer, cbInfoOut As Integer) As Integer

Declare Function oSQLGetStmtOption Lib "odbc32.dll" Alias "SQLGetStmtOption" (ByVal hstmt As Long, ByVal fOption As Integer, pvparam As Any) As Integer Declare Function oSQLNumResultCols Lib "odbc32.dll"

Alias "SQLNumResultCols" (ByVal hstmt As Long, pccol As Integer) As Integer Declare Function oSQLSetCursorName Lib "odbc32.dll" Alias "SQLSetCursorName" (ByVal hstmt As Long,

ByVal szCursor As String, ByVal cbCursor As Integer) As Integer

Declare Function oSQLSetPos Lib "odbc32.dll" Alias "SQLSetPos" (ByVal hstmt As Long, ByVal irow As Integer, ByVal fOption As Integer, ByVal fLock As Integer) As Integer

Declare Function oSQLSetStmtOption Lib "odbc32.dll"

Alias "SQLSetStmtOption" (ByVal hstmt As Long,

ByVal fOption As Integer, ByVal bparam As Long) As Integer

8.5. Remote Data Objects

Технология Remote Data Objects (RDO) - объекты для доступа к внешним данным - доступна, если на компьютере установлена версия Visual Basic 4.0 Entreprise. Очень мало, а в некоторых случаях и совсем не уступающая по скорости доступа к данным, по отношению к прямому использованию ODBC API, данная технология значительно проще в использовании. Особенно тем, кто знаком с DAO - набором объектов для доступа к данным.

В этом параграфе мы рассмотрим практические вопросы использования технологии RDO в приложении клиент-сервер.

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

Есть определенные различия при визуальной работе с RDO в Visual Basic и Access. В Visual Basic у вас есть возможность воспользоваться элементом управления ActiveX - RemoteControl, который еще в большей степени скрывает сложность работы с внешними данными. Вам достаточно установить лишь несколько свойств этого объекта, и вы получаете доступ к необходимой информации.

Используя RDO или объект RemoteControl, вы обходите процессор данных. При этом вы можете иметь доступ к внешним данным любого формата, хотя лучше использовать метод для доступа к данным на сервере таких баз данных, как MS SQL Server или Oracle. При работе с RDO вы можете использовать как синхронный, так и асинхронные процессы, поэтому при большой выборке данных с сервера ваше приложение не будет блокировано на период получения данных.

В табл. 8.7 приводятся эквиваленты объектов DAO для объектов RDO.

RDO оперирует понятиями "строка", а не "запись" и "колонка", а не "поле". Так же как DAO, все объекты в RDO содержатся в коллекциях, исключение составляет только rdoEngine. Иерархия объектов RDO приведена на рис. 8.13. Когда RDO инициализируется в первый раз, то создается экземпляр объекта rdoEngine и коллекция rdoEnvirinments, состоящая из одного объекта rdoEnvironments(0).



itlolInr,in;rirnenl

idoCcnrection

I- idoTabIc

-\ rdQPncpar::dEtalv:rrcrit Ц rdoRcsultsct

H r(,HgCi;>lurnn

Ч rdtCQl

Ч rdoPa-Ei meter

Рис. 8.13.

Для установки связи с источником данных ODBC и необходимой базой данных необходимо создать объект rdoConnection. Если у вас нет необходимого источника данных, то вы можете создать его с помощью метода rdoRegisterDataSource или с помощью диалоговых средств Администратора ODBC.

Таблица 8.7. Соответствие объектов RDO объектам DAO

Объект RDO

rdoEngine Отсутствует rdoEnvironment rdoConnection

rdoTable Отсутствует rdoResultset Forward-only - type

rdoColumn rdoPreparedStatement

Эквивалентный объект DAO

DBEngine User, Group Workspace

Database

TableDef

Index

Recordset

Похоже на Forward-Only Snapshot

Field

QueryDef

Существует два подхода к выполнению запросов и созданию результирующего набора данных:

• Использование запроса, который будет применяться только один раз. В этом случае воспользуйтесь методами OpenResulset или Execute, выполняющими SQL запрос для существующего объекта rdoConnection и создающими объект rdoResultset или выполняющими запрос действия.

• Использование запроса, который будет применяться неоднократно и дополнительно может иметь параметры. Воспользуйтесь методом CreatePreparedStatement для создания объекта rdoPreparedStatement, который может использоваться в любое время, когда он снова понадобится и для которого можно изменять значения параметров перед каждым повторным использованием. После того как объект rdoPreparedStatement будет создан, используйте методы OpenResultset и Execute с объектом rdoPreparedStatement, для того чтобы создать объект rdoResulset или выполнить запрос действия. Для того чтобы изменить параметры, используйте установки объекта rdoParameter.

Используя аргументы метода OpenResultset или свойства объекта rdoPreparedStatement, вы можете установить тип курсора и другие атрибуты объекта rdoResultset.

Перед тем как начать работать с RDO, необходимо, используя команду References меню Tools, подключить объекты RDO к вашему проекту. В списке доступных объектов они так и будут называться - Microsoft Remote Data Object. Если вы работаете в Access, то достаточно наличия этих объектов на компьютере, но, как указывалось выше, для этого необходимо установить Visual Basic Entreprise Edition. После того как эти условия выполнены, вы можете свободно обращаться ко всем методам и свойствам этих объектов.

Самым верхним в иерархии объектов является rdoEngine. Вспомните об объекте dbEngine из DAO. С помощью следующей строчки вы уже обращаетесь к RDO:



rdoEngine.rdoDefaultCursorDriver = rdUseOdbc Объект rdoEngine имеет следующие свойства:

- rdoDefaultCursorDriver - может принимать три значения, которые являются предопределенными константами:

Константа Значение Описание

rdUseIfNeeded 0 ODBC драйвер будет использовать

соответствующий тип курсора. Курсоры сервера будут использоваться, если они доступны.

rdUseODBC 1 В данном случае RDO использует

библиотеку курсоров ODBC. Наиболее подходящий путь при работе с выборками небольшого объема.

RdUseServer 2 Драйвер ODBC использует курсоры

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

Курсором является логический набор данных, управляемый источником данных или Диспетчером ODBC.

- rdoDefaultErrorTreshold - данное свойство устанавливает или возвращает установку по умолчанию для свойства ErrorTreshold объекта rdoPreparedStatement. Суть использования данного свойства заключается в том, что каждая ошибка имеет свойство Number. Если свойство Number больше значения свойства ErrorTreshold, то ошибка не генерируется, в противном случае генерируется перехватываемая ошибка, которая либо заканчивает работу приложения, либо обрабатывается, если это предусмотрено в коде или системе. Если установить это свойство равным -1, то, соответственно, никакого объекта для отсечения перехватываемых ошибок не будет.

- rdoDefaultLoginTimeout - возвращает или устанавливает количество секунд, в течение которых ODBC драйвер прекратит попытку установить соединение с источником данных и возвратит перехватываемую ошибку. Значение по умолчанию - 15 с. Если это значение равно 0, то попытка установить соединение с источником данных, используя текущую процедуру регистрации, будут продолжаться неопределенное время.

Свойства rdoDefaultPassword и rdoDefaultUser устанавливают пароль и пользователя по умолчанию для всякого вновь создающегося объекта rdoEnvironment.

Объект rdoEngine имеет два метода. Метод rdoRegisterDataSource служит для занесения в Регистр Windows информации о вновь создаваемом источнике данных ODBC. Таким образом вы можете создавать источники данных, минуя диалоговое окно Администратора ODBC. Это очень удобно при распространении вашего приложения. Хотя есть и другие способы внести информацию о новом источнике данных в Регистр Windows.

Приведем синтаксис этого метода:

rdoRegisterDataSource cDataSourceName, cDriverName, ISilent, cAttributes где

• cDataSourceName - имя, которое вы хотите присвоить источнику данных. В дальнейшем остальные методы, которым необходимо связаться с базой данных, для которой вы создаете источник данных, будут использовать это имя. Например, метод OpenConnection.

• cDriverName - строковое выражение, являющееся именем драйвера, зарегистрированным в Регистре Windows. При этом обращаем внимание, что драйвер уже должен быть установлен.

• ISilent - логическое выражение, которое указывает, будет ли появляться диалог ODBC, в котором вы укажете специфичную для данного драйвера информацию. Если вы укажете это значение равным True, то вам надо будет указать всю необходимую информацию в аргументе cAttributes.

• cAttributes - строковое выражение, в котором вы указываете дополнительную информацию для драйвера. Для каждого драйвера эта информация специфична. Параметры, которые необходимо описать, вы можете посмотреть в Регистре Windows, найдя описание источника данных, которые устанавливает связь с базой данных подобного формата. Например так, как это показано на рис. 8.14.



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