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

For Each errX In rdoEngine.rdoErrors

MsgBox "Error " & errX.Number & " вызвана " & errX.Source & ": " & errX.Description,

vbCritical, "rdfInitialize()"

Next errX

Else

MsgBox "Error " & Err.Number & " вызвана " & Err.Source & ": " & Err.Description,

vbCritical, "rdfInitialize()" End If End Sub

Объект rdoResultset можно создать с помощью метода OpenResulset, который применяется к объектам rdoConnection, rdoTable и rdoPreparedStatement (о последнем объекте речь впереди). В силу этого метод OpenResultset имеет два вида синтаксиса, один из которых относится к объекту rdoConnection

Set Variable = Connection.OpenResultset(Source[, Type[, Locktype[, Options]]])

другой к объектам rdoTable и rdoPrepraredStatement Set Variable = Ob7ect.OpenResultset([ Type[, Locktype [, Options]]])

Пример первого варианта синтаксиса можно найти в предыдущей процедуре Set rdoRst = rdConn.OpenResultset(rdoTab.Name, rdOpenDynamic, rdConcurValues)

Первым аргументом является источник данных, которым может быть объект rdoTable, как показано в предыдущем примере, объект rdoPreparedStatement или SQL выражение.

Таким образом, мы можем создать совершенно одинаковый набор данных, используя различные варианты синтаксиса и объекты в качестве аргументов. Например, используем SQL выражение:

Set rdoRst=rdConn.OpenResulset("SELECT * FROM MYTABLE", rdOpenDynamic, rdConcurValues)

При использовании второго варианта синтаксиса аргумент Source (источник данных) отсутствует, так как объект, к которому вы применяете метод, сам по себе является источником данных.

Set rdoTab = rdConn.rdoTables("MyTable")

Set rdorst=rdoTab.OpenResultset(rdOpenDynamic,rdConcurValues)

Если сравнить два последних фрагмента, становится видно, что первый вариант более гибок, так как, добавив условие с помощью ключевого слова WHERE, мы можем значительно сократить выборку и соответственно значительно уменьшить нагрузку на ресурсы, выиграв при этом в скорости выполнения.

Теперь самое время поговорить об объекте rdoPreparedStatement, после чего мы продолжим разговор о методе OpenResulset.

Объект rdoPreparedStatement создается с помощью метода объекта rdoConnection CreatePreparedStatement, который имеет следующий синтаксис:

Set Prepstmt = Connection.CreatePreparedStatement(Name, Sqlstring)

Аргумент Name - это имя вновь создаваемого объекта rdoPreparedStatement. Следующий аргумент - Sqlstring - является правильным выражением SQL. Оба аргумента обязательны, но их можно заменить пустой строкой (""). Объект, созданный с помощью этого метода, автоматически добавляется к коллекции rdoPreparedStatements. При этом если вы не снабдили его именем, то есть использовали пустую строку, то обращаться к нему можно с помощью переменной объекта prepstmt или по порядковому номеру в коллекции - rdoPreparedStatements(2).

У вновь созданного объекта rdoPreparedStatement имеется коллекция rdoParameters, с помощью которой вы можете передавать параметры в аргумент Source метода OpenResultset. Например:



SQLStr="SELECT * FROM Account WHERE account = ? AND summa >> ?" Set myprepst=myrdConn. CreatePreparedStatement("FromAccount",SQLStr) Далее мы можем подставить значения параметров myprepst.rdoParameters(0)=104 myprepst.rdoParameters(1)=25000

Set myrdRst=myprepst. OpenResulset(rdOpenDynamic,rdConcurValues)

Вернемся к методу OpenResultset, четырех значений типа Integer.

а точнее к его аргументу Type, который может иметь одно из

Значение Получаемый тип набора данных

rdOpen- Объект rdoResultset, в котором поиск ForwardOnly записей может производиться только сверху вниз (от первой к последней записи). Указатель записи нельзя вернуть назад к первой записи, одновременно доступна только одна запись. Наборы данных такого типа используются для быстрого выбора и обработки данных

rdOpenStatic Порядок и значения в наборе данных статического курсора фиксируются при его открытии. Изменения, добавления и удаления, произведенные другими пользователями, не будут появляться до закрытия и последующего открытия курсора.

RdOpen- Результат запроса может иметь Keyset изменяемые строки. Допускается

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

RdOpen- Результат запроса может иметь

Dynamic изменяемые строки. Допускается

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

Выбирайте значение аргумента в зависимости от требуемой функциональности. Если вам не нужно редактировать данные на сервере, то имеет смысл выбирать значение rdOpenForwardOnly. То есть если вы строите отчет за какой-то период, то вам нет смысла отслеживать изменения, которые произойдут в течение следующего промежутка времени. Если же программа помогает продавать железнодорожные билеты, то ей постоянно нужны свежие данные о количестве свободных мест. Наиболее надежным в этом плане является динамический тип набора данных, но с ним и тяжелее всего работать.

Следующий аргумент LockType служит для контроля за блокировками страниц, которые содержат редактируемую или записываемую на диск запись. Может принимать значение типа Integer, равное одной из следующих констант:

Значение Тип разрешения проблем

одновременного доступа

rdConcurLock Пессимистический тип, то есть

страница блокируется, как только вы выполнили метод Edit. В это время другие пользователи редактировать данные на этой странице не могут.

RdConcur- Курсор открывается только для



DMO - Distributed Management Object - это распределенные объекты управления. Главное назначение данной технологии - управление сервером с любой рабочей станции в сети.

DMO может использоваться и для выполнения запросов. Правда, при этом вы не можете получить для использования в своем приложении курсоры и, соответственно, у вас нет средств навигации по таблицам. Запросы могут быть запросами выборки и запросами действия, или, иначе, запросами определения данных.

Несмотря на то, что мы не можем получить удобный курсор с методами для навигации и отображения данных, которые бы хранились в нем, использовать SQL-DMO для доступа к конкретным данным можно. Для этого необходимо использовать объект QueryResults, который отображает данные запроса выборки и имеет методы для работы с колонками и строками.

На рис. 8.15 приведена иерархия объектов SQL-DMO и их коллекций, а в табл. 8.8 содержится краткое описание этих объетов.

ReadOnly чтения, следовательно, никакие блокировки не требуются

rdConcur- Оптимистическая блокировка, то есть Rowver запись блокируется только во время выполнения метода Update. При этом поиск записи в исходном наборе происходит по идентификатору записи.

rdConcurValues Оптимистическая блокировка, то есть запись блокируется только во время выполнения метода Update. При этом поиск записи в исходном наборе происходит по значениям строки.

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

Последними объектами в иерархии RDO является коллекция колонок - rdoColumns. С помощью объекта rdoColumn вы получаете доступ непосредственно к значениям таблиц в конкретных строках. При этом для перемещения по записям кроме оговоренных выше методов используются методы MoveFirst, MoveLast, MoveNext и MovePrevious, очень похожие на те, которыми вы пользовались при программировании с помощью DAO.

8.6. Внешнее управление сервером с помощью SQL-DMO

Данный параграф относится только к Microsoft SQL Server. В нем мы опишем методы управления сервером с помощью пользовательского приложения.

В клиентской части настольной базой данных может использоваться приложение, которое способно выступать в качестве OLE контроллера. Тем, кто прочитает десятую главу данной книги или хорошо знает Visual Basic, будет очень легко освоиться с набором объектов, который предоставляет DMO. Для того чтобы использовать данную технологию с рабочей станции, необходимо установить на рабочей станции клиентскую версию Microsoft SQL Server. Установить ее очень легко. Например, при установке SQL Server на рабочей станции, которая работает под управлением Windows 95, программа установки сама определит тип операционной системы и, соответственно, предложит для использования на данном компьютере клиентскую часть сервера. При этом вам будут доступны многие компоненты SQL Server, например Entreprise Manager или Books On-line.

В любом случае для работы с SQL-DMO на ПЭВМ, работающей под управлением Windows 95 или Windows NT, должны быть установлены следующие файлы:

• SQLOLE.HLP - файл контекстной помощи для работы с SQL-DMO;

• SQLOLE.REG - файл регистра;

• SQLOLE65.DLL - in-process сервер SQL-DMO и программные компоненты;

• SQLOLE65.TLB - библиотека объектов, используемая программой контроллером OLE Automation;

• SQLOLE65.SQL - файл поддержки языка transact-SQL для создания хранимых процедур.



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