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

Для работы с внешними данными RDO использует объект окружения (rdoEnvironment). При этом одно окружение в коллекции создается автоматически. Этого окружения вполне достаточно для работы с данными, так как с помощью него вы можете создать сколько угодно соединений и одновременно редактировать таблицы из нескольких баз данных, даже разного формата. Но иногда необходимо обрабатывать более сложные ситуации, в которых надо вести несколько транзакций одновременно. Тогда имеет смысл создавать дополнительные объекты rdoEnvironment. Здесь необходимо отметить, что ODBC не поддерживает возможности вложенных транзакций. Выход из положения можно найти, если приложение, с данными которого вы работаете, поддерживает вложенные транзакции. Тогда вы можете использовать SQL выражения, которые будут передаваться на сервер и создавать сложные вложенные и пересекающиеся транзакции.

Объект rdoEnvironment создается с помощью метода rdoCreateEnvironment и имеет следующий синтаксис:

set Variable = rdoCreateEnvironment(Wame, User, Password)

• Variable - объектная переменная, которая ссылается на объект rdoEnvironment.

• Name - строковая переменная, которая становится уникальным именем объекта Environment.

• User - имя пользователя объекта rdoEnvironment.

• Password - пароль пользователя.

Приведенная ниже программа демонстрирует установку и чтение некоторых из вышеприведенных свойств и использование методов rdoRegisterDataSource и rdoCreateEnvironment.

Const rServerDSN = "ToAutostore"

Const rServerUser = "UID=sa;DATABASE=autostore"

Dim grdfEnv As rdo.rdoEnvironment

Dom grdfConn As rdo.rdoConnection

Dim sqlAttr As String

strAttr = "Description=Connect to autostore" & Chr$(13) & "OemToAnsi = No" &

Chr$(13) & "Address=\\MAINSERVER\AUTOSTORE\" & Chr$(13) &

"Database=Autostore" rdoEngine.rdoRegisterDatasource rServerDSN, "SQL Server", True, sqlAttr If grdfEnv Is Nothing Then

rdoEngine.rdoDefaultCursorDriver = rdUseOdbc

Set grdfEnv = rdoEngine.rdoCreateEnvironment

("", "", "")

Set grdfConn = grdfEnv.OpenConnection (rServerDSN, rdDriverNoPrompt, False, rServerUser)

grdfConn.QueryTimeout = 0

End If

Коллекция rdoEnvironments содержит в себе все объекты rdoEnvironment объекта rdoEngine. Она имеет всего один метод Item, который устанавливает доступ к конкретному объекту в зависимости от его порядкового номера в коллекции. То есть вы можете обращаться к первому объекту в коллекции с помощью метода Item, например:

Set grdfConn = rdoEnvironments.Item(0).grdfEnv.OpenConnection

(rServerDSN, rdDriverNoPrompt, False,

rServerUser)

В то же время следующий пример эквивалентен предыдущему: Set grdfConn = rdoEnvironments(0).grdfEnv.OpenConnection (rServerDSN, rdDriverNoPrompt, False, rServerUser)

Коллекция rdoEnvironments имеет свойство Count, которое используется только для чтения и возвращает количество объектов в коллекции.

Объект rdoEnvironment содержит три метода для работы с транзакциями. Это методы BeginTrans, CommitTrans и RollBackTrans. Эти методы очень похожи на соответствующие методы



объекта Workspace из DAO. Но имеет смысл напомнить еще раз, что нельзя использовать вложенные транзакции. В то же время вы можете управлять транзакциями на сервере с помощью SQL команд BEGIN TRANSACTION, COMMIT TRANSACTION, ROLLBACK TRANSACTION, передавая их на сервер с помощью запросов действия. BEGINTRANS начинает транзакцию.

COMMITTRANS прекращает текущую транзакцию и сохраняет все изменения.

ROLLBACKTRANS заканчивает текущую транзакцию и восстанавливает базы данных в текущем объекте rdoEnvironment в то состояние, в котором они находились до начала транзакции.

Объект rdoEnvironment имеет метод Close. При работе с этим методом необходимо помнить, что вы не можете закрыть окружение по умолчанию, то есть объект rdoEnvironments(0). Если текущий объект rdoEnvironment содержит открытые соединения, которые используются объектами rdoResulset, то после закрытия объекта rdoEnvironment все текущие транзакции прекращаются и базы данных возвращаются в первоначальное состояние.

Метод OpenConnection служит для создания и открытия соединений, которые являются единственной коллекцией, содержащейся в объекте rdoEnvironment и объекты которой используются для доступа к данным в базе данных, указанной в источнике данных. Этот метод имеет следующий синтаксис:

Set Connection = Env/ronment.OpenConnection(DataSourceName[, Prompt[, Readonly[, Connect]]])

Connection - объектная переменная, которая ссылается на объект rdoConnection.

Environment - выражение, которое обозначает существующее окружение.

DataSourceName - строковое выражение, обозначающее имя источника данных, так как оно зарегистрировано в Реестре Windows. При этом если не указать его, то есть ввести пустую строку или указать несуществующий источник данных, то будет выведено диалоговое окно ODBC для выбора источника данных из списка существующих. Тем не менее, если аргумент Prompt имеет значение rdDriverNoPrompt, будет сгенерирована перехватываемая ошибка и никакого диалогового окна выведено не будет. В то же время можно ввести имя источника данных в аргументе Connect в параметре DataSourceName.

Prompt может принимать одно из четырех значений предопределенных констант. В зависимости от этого значения диспетчер ODBC драйверов требует от пользователя ввода DataSourceName (имени источника данных), имени пользователя и пароля.

Значение аргумента Описание

rdDriverNoPrompt Диспетчер драйверов

использует информацию из аргументов

DataSourceName и Connect для построения строки соединения. Если необходимая информация не будет обеспечена, то метод OpenConnection возвратит ошибку.

RdDriverPrompt Диспетчер драйверов выводит диалог ODBC и строит строку соединения по информации, введенной пользователем в этом диалоге.

rdDriverComplete Диспетчер драйверов выводит диалог ODBC только в случае недостатка информации в аргументах DataSourceName и Connect.

rdDriverCompleteRequired Диспетчер драйверов ведет

себя так же, как в случае, когда данный аргумент равен rdDriverComplete, за исключением того, что в диалоге ODBC отключены элементы,



предоставляющие информацию, которая больше не нужна.

• Readonly - определяет, будет ли соединение открыто для доступа только для чтения или для чтения и записи.

• Connect - строковое выражение, используемое для открытия баз данных. Эта строка составляет ODBC аргументы соединения и зависит от конкретного используемого драйвера.

Иногда могут возникнуть причины, по которым вы не сможете установить соединение, среди них такие, как отсутствие прав доступа к источнику данных, неправильное соединение сети, отсутствие или отключение источника данных. Некоторые серверы баз данных имеют ограничение на количество соединений по разным причинам, в том числе и ограничение по ресурсам.

Создав объект rdoConnection, вы можете использовать его для

• Создания объектов rdoResultset или rdoPreparedStatement, используя методы OpenResultset или CreatePreparedStatement, в зависимости от решаемых задач.

• Доступа к таблицам базы данных и колонкам каждой таблицы, используя объекты rdoTable и rdoColumn в коллекциях rdoConnections(0).rdoTables и rdoTables(n).rdoColumns.

• Начала, завершения или отката транзакции, используя методы Begin-Trans, CommitTrans и RollbackTrans.

• Отсоединения от источника данных и освобождения ресурсов, используя метод Close. Объект rdoEnvironment имеет несколько свойств, которые перечислены в следующей таблице.

Свойство Описание

CursorDriver Служит для установки и чтения значения, устанавливающего тип курсора, который будет создан. Может иметь три значения: rdUsedIfNeeded, rdUseODBC, rdUseServer.

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

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

Name Имя объекта.

Password Возвращает пароль, используемый во время создания объекта rdoEnvironment.

UserName Возвращает или устанавливает имя

пользователя объекта rdoEnvironment.

Следующая коллекция объектов, которая входит в объект rdoEngine, называется rdoErrors и служит для обработки ошибок при работе с RDO.

Всякий раз, когда диспетчер ODBC пытается выполнить запрос RDO, может возникнуть ошибка. Подобные ошибки могут иметь различные причины и вызывать различные последствия для вашей программы, вплоть до полного прекращения процесса выполнения запроса или даже вашей процедуры или функции. Как только ошибки возникли, информация о них помещается в коллекцию rdoErrors. Далее появляется возможность исследовать каждый объект rdoError коллекции rdoErrors на предмет причины возникновения ошибки и выполнения дальнейших



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