WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     | 1 |   ...   | 6 | 7 || 9 |

Свойство Source указывает на источник данных объекта Recordset. Если объект Recordset открыт, то свойство Source доступно только для чтения. В качестве значения свойства можно указать либо строку, содержащую имя базовой таблицы, запроса, хранимой процедуры или SQL-оператор, либо имя объекта Command. Возвращает свойство Source строковое значение, указывающее на источник данных.

Свойство State только для чтения, возвращающее значение, которое описывает текущее состояние объекта Recordset. Для этого объекта может быть возвращено одно из трех значений (констант) типа ObjectStateEnum: adStateClosed (набор данных закрыт), adStateOpen (набор данных открыт), adStateFetching (набор данных получает записи).

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

Прежде чем производить какие-либо действия с набором данных (объектом Recordset), его необходимо сначала открыть при помощи метода Open.

Метод Open служит для открытия набора данных (объекта Recordset). После его успешного применения вы сможете модифицировать записи набора, перемещаться по его записям, осуществлять поиск и т.д. Формат запуска метода Open таков:

MyRec.Open Source, ActiveConnection, Cursor-Type, LockType, Options MyRec — объявленная ранее переменная типа Recordset. Метод Open принимает пять аргументов. Все пять аргументов являются необязательными, однако первые два должны быть обязательно указаны ранее (например, при помощи свойств Source и ActiveConnection). Если аргумент пропущен и правее его есть еще хотя бы один аргумент, то ограничивающую запятую все равно нужно указывать. Например, MyRec.Open "Временная",, adOpenDynamic Этот пример будет работать только в том случае, если ранее вы задали открытое активное соединение (объект Connection) при помощи свойства ActiveConnection объекта Recordset. Первый аргумент метода Open кроме имени таблицы активного подключения, может содержать также имя запроса, хранимой процедуры, объекта Command, строку SQLоператора, имя объекта Stream или файла, содержащего ранее сохраненный объект Recordset, а также адрес URL. Второй аргумент может содержать либо имя подходящего объекта Connection, либо строку подключения (см. свойство ConnectionString объекта Connection). При помощи третьего аргумента CursorType можно указать тип открываемого набора данных: adOpenDynamic, adOpenStatic, adOpenKeyset или adOpenForwardOnly.

Аргумент LockType может содержать одну из констант типа LockTypeEnum. Аргумент Options может содержать одну или несколько констант типа CommandTypeEnum (например, adCmdTable (имя таблицы), adCmdStoredProc (имя хранимой процедуры)) или ExecuteTypeEnum (например, adAsyncExecute (первый аргумент задает асинхронно выполняемую команда), adExecuteNoRecords (в первом аргументе задано имя команды или хранимой процедуры, не возвращающей записи)).

Рассмотрим пример открытия набора записей. В этом примере не выполняются никакие действия с набором данных, набор просто сначала открывается, а затем закрывается. Все остальные манипуляции с набором данных должны проводиться между вызовами методов Open и Close объекта Recordset.

Dim MyConn As ADODB.Connection Dim MyRec As ADODB.Recordset Dim ConStr As String ConStr="Provider = Microsoft.Jet.OLEDB.4.0; Data Source = C:\db2.mdb" Set MyConn= New ADODB. Connection Set MyRec= New ADODB.Recordset MyConn.Open ConStr MyRec.Open "Временная", MyConn, adOpenDynamic, adLockOptimistic MyRec. Close MyConn.Close Если не указать тип блокировки явно, то по умолчанию будет принят тип блокировки adLockReadOnly. В результате вы не сможете добавлять, удалять или другим образом модифицировать записи.

Метод AddNew позволяет добавить запись в обновляемый набор данных.

recordset.AddNew Fields, Values Метод может принимать два необязательных аргумента: Fields и Values. Аргумент Fields может быть именем поля, массивом полей или индексом полей базовой таблицы или запроса. Аргумент Values содержит значения для полей вставляемой записи и должен выглядеть в соответствии с первым аргументом. Если аргумент Fields содержит массив имен полей, то и аргумент Values должен быть массивом того же размера. Впрочем, такой синтаксис применяется редко. Чаще используется синтаксис, используемый в приведенном ниже примере.

MyRec.AddNew MyRec![КодКлиента]=”SS55F” MyRec![СтоимостьЗаказа]=567.MyRec.Update Обратите внимание на то, что каждому методу AddNew должен соответствовать свой метод Update или UpdateBatch (если вы используете механизм отложенных обновлений).

Вызов метода CancelUpdate отменяет все изменения, сделанные в текущей или новой записи набора данных (объекта Recordset). Однако вызывать этот метод нужно до вызова соответствующего метода Update.

Вызов метода Close закрывает объект Recordset, после чего никаких действий с набором данных, кроме повторного открытия, производить нельзя.

Метод Delete удаляет записи из набора данных.

recordset.Delete AffectRecords Метод Delete может принимать один аргумент типа AffectEnum. К этому типу относится четыре константы, но с методом Delete можно использовать только две из них:

adAffectCurrent (удаляется только текущая запись; значение по умолчанию), adAffectGroup (удаляются записи, возвращаемые Установленным фильтром; фильтр должен быть установлен с одной из констант типа FilterGroupEnum (см. свойство Filter)).

Метод Find осуществляет поиск в наборе данных записи, соответствующей указанной строке критерия. Строка критерия должна содержать наименование только одного поля (например, "FName LIKE 'Jo*'"). Поиск по нескольким полям этот метод не поддерживает.

Поиск обычно начинается с текущей позиции. Кроме того, можно указать смещение начальной позиции относительно текущей, а также направление поиска. Если текущая позиция не определена, то вызов метода Find влечет за собой ошибку.

Формат запуска метода Find следующий:

MyRec.Find Criteria, SkipRows, SearchDirection, Start Строка Criteria содержит критерий поиска (оператор, содержащий имя поля, оператор сравнения и значение). Необязательный аргумент SkipRows типа Long задает смещение начальной позиции поиска от текущей записи (или от стартовой закладки, если она была задана в аргументе Start). Значение по умолчанию для этого аргумента — 0. Необязательный аргумент SearchDirection задает направление поиска. Его значением может быть одна из двух констант типа Search Direction Enum: adSearchForward (направление поиска — вперед; в случае неудачи поиск останавливается в конце набора данных, а свойство EOF приобретает значение True (Истина)), adSearchBackward (направление поиска — назад (в направлении начала набора); в случае неудачи поиск останавливается в начале набора данных, а свойство ВОF приобретает значение True (Истина)). В качестве значения последнего аргумента метода Find можно указать закладку, которая будет стартовой позицией для поиска. Не забудьте проверить перед этим, поддерживает ли набор записей применение закладок (для этого используется метод Supports с аргументом adBookmark).

Ниже приведен пример итерации по всем клиентам, код которых начинается с букв QU.

Каждый новый поиск начинается с позиции, непосредственно следующей за позицией записи, найденной предыдущим поиском.

MyRec.Find "[КодКлиента] LIKE 'QU*' " Do While MyRec.EOF<>True Debug.Print MyRec![КодКлиента] MyRec.Find "[КодКлиента] LIKE 'QO*' ", 1, adSearchForward Loop Метод Move перемещает указатель текущей записи в указанную позицию.

recordset.Move NumRecords, Start Метод Move принимает два аргумента. Первый аргумент типа Long указывает количество записей, на которые необходимо передвинуть указатель либо относительно текущей записи, либо относительно позиции, заданной вторым аргументом. Если значение первого аргумента отрицательно, то указатель текущей позиции перемещается в сторону начала набора данных. Второй аргумент является необязательным и задает стартовую позицию для перемещения. В качестве значения этот аргумент может содержать либо закладку, либо одну из констант типа BookmarkEnum: adBookmarkCurrent (текущая позиция является стартовой), adBookmarkFirst (перемещение будет осуществляться от первой записи набора), adBookmarkLast (стартовой позицией будет последняя запись набора).

Группа методов MoveFirst, MoveLast, MoveNext, MovePrevious. При помощи этих методов можно перейти соответственно к первой, последней, следующей и предыдущей записи. Первые два метода используются для быстрого перехода в начало или конец набора данных, а остальные два используются для организации итерации по всему набору данных.

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

Метод Save сохраняет набор данных объекта Recordset в файле на диске или в объекте Stream.

recordset.Save Destination, PersistFormat Метод принимает два аргумента: Destination и PersistFormat. Аргумент Destination задает имя и полный путь к файлу на диске или ссылку на объект Stream. Второй аргумент задает формат, в котором данные будут сохранены. В качестве его значения можно задать одну из двух констант типа PersistFormatEnum: adPersistADTG (данные будут сохранены в формате ADTG (Microsoft Advanced Data TableGram)) и adPersistXML (формат XML).

Пример использования объекта Recordset.

Set MyRec = New ADODB.Recordset Set MyRec1 = New ADODB.Recordset MyRec.Open "Фонд", CurrentProject.Connection, adOpenStatic, adLockOptimistic MyRec1.Open "Фонд1", CurrentProject.Connection, adOpenStatic, adLockOptimistic Set MyComm = New ADODB.Command MyComm.ActiveConnection = CurrentProject.Connection MyComm.CommandText = "Delete * from Фонд1;" MyComm.CommandType = adCmdText MyComm.Execute While MyRec.EOF <> True If (MyRec!Автор Like d + "*") Then MyRec1.AddNew MyRec1!Название = MyRec!Название MyRec1!Автор = MyRec!Автор MyRec1!Ном_номер = MyRec!Ном_номер MyRec1.Update End If MyRec.MoveNext Wend MyRec.Close MyRec1.Close Set MyComm = Nothing Set MyRec = Nothing Set MyRec1 = Nothing Объект Command Объект Command используется для того, чтобы сформировать запрос к базе данных для возвращения необходимых объекту Recordset записей (при этом возвращается ссылка на временный набор данных) или манипуляции структурой самой базы данных. Объект Command удобно использовать для запуска выполняемых запросов (на добавление, удаления записей и других), а также хранимых на стороне сервера процедур. Вы можете сами ознакомиться с тем небольшим количеством свойств и методов, имеющихся у объекта Command.

Последовательность действий, выполняемых при использовании объекта Command, во многом повторяет группу действий, которые необходимо выполнить, чтобы открыть объект Recordset. Схематично эту последовательность действий можно описать примерно так (конечно, это не единственно возможная схема):

Описать переменную типа Connection (например, MyConn) и открыть соединение (так как это описывалась ранее в этой главе).

1. Описать переменную типа Command.

Dim MyComm AS ADODB.Command 2. Явно создать экземпляр объекта:

Set MyComm = NEW ADODB.Command 3. Связать созданный объект с открытым ранее соединением:

MyCommand.ActiveConnection = MyConn 4. Указать тип и текст команды. Для этого используются свойства CommandType и CommandText. В приведенном ниже отрывке кода в качестве текста команды указывается текст SQL-оператора и соответствующий тип команды:

MyComm.CommandText = "Delete * from [Временная];" MyComm.CommandType = adCmdText 5. При необходимости задать значения других свойств, например, время ожидания завершения команды CommandTimeout.

6. Осталось только выполнить команду при помощи метода Execute: MyComm.Execute. В зависимости от типа выполняемой команды есть некоторые различия в использовании метода Execute. Эти различия поясняются в приведенных ниже примерах.

Использование объекта Command для запуска запроса на выполнение В этом примере создается объект MyComm типа Command. При помощи свойства ActiveConnection объект Command связывается с открытым соединением (объектом типа Connection). В качестве текста команды указывается строка SQL-оператора, предназначенного для удаления всех записей из таблицы Временная, а в качестве значения свойства CommandType задается константа adCmdText. В заключение примера освобождается память и ресурсы, занятые объектами.

Dim MyConn As ADODB.Connection Dim ConStr As String Dim MyComm AS ADODB.Command ConStr="Provider = Microsoft.Jet.OLEDB.4.0; Data Source = C:\db2.mdb" Set MyConn= New ADODB.Connection MyConn.Open ConStr Set MyComm = New ADODB.Command MyCommand.ActiveConnection = MyConn MyComm.CommandText = "Delete * from [Временная];" MyComm.CommandType = adCmdText MyComm. Execute MyConn.Close Set MyConn = Nothing Set MyComm = Nothing Использование объекта Command для возвращения набора записей Начало этого примера напоминает начало предыдущего примера. Отличие состоит в следующем. В дополнение к другим объектам объявляется и создается экземпляр объекта типа Recordset. В качестве текста команды для объекта MyComm указывается имя таблицы Временная, а для свойства CommandType задается соответствующая константа adCmdTable. Обратите внимание на формат использования метода Execute. Поскольку в этом случае в результате его выполнения возвращается набор записей, то применена конструкция SET, инициализирующая переменную MyRec. В результате выполнения этой строки кода набор данных будет открыт, то есть отпадает необходимость использования метода Open объекта Recordset. Для иллюстрации этого служит итерация по записям набора, организованная при помощи цикла DO UNTIL... LOOP. В заключение примера освобождается память и ресурсы, занятые объектами.

Dim MyConn As ADODB.Connection Dim MyRec As ADODB. Recordset Dim ConStr As String Dim MyComm AS ADODB.Command ConStr="Provider = Microsoft.Jet.OLEDB.4.0; Data Source = C:\db2.mdb" Set MyConn= New ADODB.Connection Set MyRec = New ADODB.Recordset MyConn.Open ConStr Set MyComm = New ADODB.Command MyCommand.ActiveConnection = MyConn MyComm.CommandText = "[Временная];" MyComm.CommandType = adCmdTable Set MyRec = MyComm. Execute Do Until MyRec.EOF Debug.Print MyRec![КодКлиента] MyRec.MoveNext Loop MyRec.Close MyConn.Close Set MyConn = Nothing Set MyComm = Nothing Set MyRec = Nothing Примеры использования объекта Command Пример Dim res As New Collection Dim conn As ADODB.Connection Dim cmd As New ADODB.Command Set conn = Access.CurrentProject.AccessConnection cmd.ActiveConnection = conn cmd.CommandText = "SELECT p.Name AS DependencyName FROM (Dependencies AS d INNER JOIN Packages AS p ON d.DependencyID=p.PackageID) INNER JOIN Packages AS pd ON pd.PackageID=d.DependentID WHERE d.DependentID = (SELECT PackageID from Packages Where Name = @Name)" cmd.Parameters("@Name").Value = packageName Dim rs As ADODB.Recordset Set rs = cmd.Execute Do While Not rs.EOF res.Add (rs("DependencyName").Value) rs.MoveNext Loop conn.Close Пример Set MyComm = New ADODB.Command MyComm.ActiveConnection = CurrentProject.Connection MyComm.CommandText = "Delete * from Фонд1;" MyComm.CommandType = adCmdText MyComm.Execute Set MyComm = Nothing Как правильно сгенерировать значения ADO RecordCount Свойство ADO RecordCount возвращает количество записей в наборе записей ADO.

Однако в некоторых случаях данное свойство возвращает значение, равное -1. Это происходит из-за того что значение, возвращаемое свойством RecordCount, зависит от типа курсора в наборе записей: -1 для курсора, перемещаемого только вперед; реальное количество записей — для статического курсора или курсора, управляемого клавишами на клавиатуре; -1 или реальное количество записей — для динамического курсора в зависимости от источника данных.

Кроме того значение RecordCount равно -1 для наборов записей, созданных с помощью метода Execute для объекта Connection или Command. Это происходит потому, что данный метод генерирует набор записей, перемещаться по которому можно только вперед. В примере -1 будет возвращено для набора записей на базе myConRst и реальное количество записей — для myKeyRst.

Pages:     | 1 |   ...   | 6 | 7 || 9 |






© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.