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