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

действий. Visual Basic также создает перехватываемую ошибку во время возникновения ошибочных ситуаций. Поэтому имеет смысл использовать конструкцию

On Error Goto << метка >>

для обработки информации, содержащейся в объектах коллекции rdoError и для принятия последующих решений. Два свойства - rdoDefaultErrorTreshold и ErrorTreshold - позволяют понизить или повысить ограничения на ситуации, которые могут вызвать фатальные ошибки.

Добавим в предыдущий пример строчки, которые будут заниматься обработкой ошибок:

Function rdfInitialize() As Boolean

Const rServerDSN = "ToAutostore"

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

Dim errX As rdo.rdoError

Dim grdfEnv As rdo.rdoEnvironment

Dim 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

rdfInitializeExit:

DoCmd.Hourglass False

Exit Function rdfInitializeErr:

For Each errX In rdoEngine.Errors

MsgBox "Ошибка " & errX.Number & " вызвана " & errX.Source & ": " & errX.Description, vbCritical, "rdfInitialize()" Next errX

rdfInitialize = False Resume rdfInitializeExit End Function

Коллекция rdoErrors имеет два метода. Метод Clear служит для удаления всех объектов rdoError из коллекции. Метод Item предназначен для доступа к объектам rdoError по их индексу. Впрочем, следующие строчки эквивалентны:

myRdoError=rdoEngine.rdoErrors.Item(1) myRdoError=rdoEngine.rdoErrors(1)

Свойство Count возвращает количество объектов rdoError в коллекции. Следующая таблица описывает свойства объекта rdoError.

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

Description Возвращает строковое выражение, содержащее описание ошибки.

HelpContext Если в свойстве HelpFile указан файл помощи Microsoft Windows, свойство HelpContext используется для того, чтобы автоматически выводить раздел помощи, который он идентифицирует.



Set myrdEnv =rdoEngine.rdoEnvironment(0) Set myrdConn=myrdEnv.OpenConnection("Toautostore", Set myrdTable = myrdConn.rdoTables("account")

Последнюю строчку можно переписать следующим образом: Set myrdTable = myrdConn.rdoTableslaccount

rdDriverNoPrompt, False)

Если вы знаете порядковый номер объекта rdoTable такое обращение:

в коллекции rdoTables, то возможно и

Help-File Указывает полный путь к файлу помощи.

Source Возвращает строковое выражение. При возникновении ошибки во время операций ODBC объект rdoError добавляется в коллекцию rdoErrors. Если ошибка возникла внутри RDO, возвращаемое значение начинается с выражения "MSRDO32". Объектный класс, который явился инициатором ошибки, также может быть добавлен к значению свойства Source.

SQLRet- Возвращает код ошибки последней Code операции RDO. Значение имеет тип Long и может равняться одной из следующих констант:

rdSQLSuccess - операция завершилась успешно;

rdSQLSuccessWithInfo - операция завершилась успешно и доступна дополнительная информация; rdSQLNoDataFound - нет никаких доступных дополнительных данных; rdSQLError - ошибка, случившаяся во время выполнения операции; rdSQLInvalidHandle - предоставленный указатель указан неверно.

SQL-State Символьная строка, возвращаемая свойством SQLState, состоит из двухсимвольного значения класса, за которым следует трехсимвольное значение подкласса. Значение класса "01" указывает на предупреждение и сопровождается кодом, возвращаемым rdSQLSuccessWithInfo.

Следующим объектом в иерархии RDO является rdoConnection, который представляет собой физическое соединение с сервером. Объект rdoConnection имеет методы для работы с транзакциями, но в данном случае налицо явный пример полиморфизма, так как здесь диапазон действия этих методов ограничивается ODBC процессами, использующими указатель текущего соединения. То есть, если вы применяете параллельные транзакции, каждая их которых использует свое соединение или объект rdoConnection, то можете завершить каждую транзакцию отдельно, применяя методы CommitTrans каждого объекта по очереди. Если необходимо завершить все транзакции в текущем окружении, то используйте метод CommitTrans (или RollbackTrans) объекта rdoEnvironment.

С помощью объекта rdoConnection мы имеем доступ к трем объектам, находящимся на последних уровнях иерархии RDO. Объект rdoTable предоставляет таблицы и представления (View), хранящиеся в базе данных. Объект rdoTable позволяет нам узнать много полезной информации о таблице или представлении на сервере. С его помощью можно получить сведения о типе таблицы, количестве записей и возможности модификацииь ее данных, что является достаточно важным свойством, так как представления на сервере очень часто не позволяют изменять содержимое строк и колонок, которые они порождают. В то же время для объекта rdoTable нет методов для перемещения по записям, поэтому достаточно затруднительно вывести информацию о записи, которая не является первой. Объекты rdoTable входят в коллекцию rdoTables. При этом мы можем обращаться к любому ее объекту по его имени, то есть следующим образом:



Set myrdEnv =rdoEngine.rdoEnvironment(0)

Set myrdConn=myrdEnv.OpenConnection("Toautostore", rdDriverNoPrompt, False) Set myrdTable = myrdConn.rdoTables(2)

Вторым объектом на этом уровне иерархии, который мы рассмотрим, будет объект rdoResults. При разработке интерфейса конечного пользователя именно этот объект является самым главным. Следующий код показывает простейший пример получения и использования этого объекта.

Создайте в Visual Basic 4.0 Entreprise Edition форму, в которой разместите текстовое поле с названием text1.

Private Sub Form Load()

Создается переменная объекта окружения -

соответствует Workspace

Dim RDE As rdo.rdoEnvironment

Создается переменная соединения - объекта,

служащего для скрытия

сложной работы функций ODBC API,

и который позволяет нам подсоединятся

к данным любого формата при наличии,

естественно, соответствующего

драйвера

Dim rdConn As rdo.rdoConnection Ниже создаются объекты таблицы, колонки, набора данных, ошибки Dim rdoTab As rdo.rdoTable Dim rdoCol As rdo.rdoColumn Dim rdoRst As rdo.rdoResultset Dim errX As rdoError

Свойство rdoDefaultCursorDriver определяет, какой курсор будет

использоваться для перемещения по данным -

курсор ODBC или сервера

в нашем случае мы выбрали курсор

сервера, так как при работе с данными

большого набора это лучший выбор

rdoEngine.rdoDefaultCursorDriver = rdUseServer

Инициализация переменной окружения

Set RDE = rdoEngine.rdoCreateEnvironment("", "", "")

Инициализация переменной соединения

Set rdConn = RDE.OpenConnection("myteach", rdDriverNoPrompt, False)

Инициализация обработчика ошибок

On Error GoTo rdfInitializeErr

Данная строчка помещена из методических

соображений,

потому что вы вполне можете

ее опустить и написать следующую строчку как Set rdorst=

rdConn.OpenResultset("MyTable",rdOpenDynamic,rdConcurValues).

Мы просто хотим указать, что при обращении

в методе OpenResultset к

объекту rdoTable требуется его имя.

Впрочем, об этом сказано в Справке.

Set rdoTab = rdConn.rdoTables("MyTable")

Инициализация переменной набора данных

Set rdoRst = rdConn.OpenResultset(rdoTab.Name,

rdOpenDynamic, rdConcurValues)

Инициализация переменной колонки

Set rdoCol = rdoRst.rdoColumns(1)

rdoRst. Edit

rdoCol.Value = 27

rdoRst.Update

Me!text1 = rdoCol.Value

Exit Sub

rdfInitializeErr:

If Err.Number = rdoEngine.rdoErrors(0).Number And rdoEngine.rdoErrors.Count >> 1 Then



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