Свойства объекта Recordset (продолжение)
- Property CursorLocation As CursorLocationEnum, Property CursorType As CursorTypeEnum, Property LockType As LockTypeEnum - группа свойств, связанных с курсором. Общее представление о курсоре уже дано, так что осталось сообщить лишь небольшие детали. Свойство позволяет задать положение курсора. Два его возможных значения: adUseClient и adUseServer определяют, на какой стороне идет работа с курсором - на клиентской или на серверной стороне. Свойство CursorType позволяют определить или задать тип курсора. Я уже определял четыре возможных значения, доступных при задании типа курсора. Свойство LockType позволяет управлять закрытием доступа. На серверной стороне можно задать одно из трех возможных значений этого свойства: adLockReadOnly, adLockOptimistic, adLockPessimistic. На клиентской стороне возможно только одно значение - adLockBatchOptimistic.
- Property DataSource As Unknown, Property DataMember As String. Два взаимосвязанных свойства. Первое из них задает источник данных для объекта Recordset. Данные в этом источнике могут представлять совокупность именованных разделов, называемых элементами источника данных - DataMember. Второе свойство и определяет конкретный элемент источника данных. В одной из последующих глав, посвященных компонентам OWC (Office Web Components), я расскажу подробнее и приведу примеры работы с подобными источниками данных и их элементами.
- Property EditMode As EditModeEnum. Свойство указывает статус редактирования текущей записи. Его возможные значения: adEditAdd, adEditDelete, adEditInProgress, adEditNone указывают, была ли запись добавлена, удалена, операция редактирования записи не завершена или не применялась. Анализируя значение этого свойства, можно принять правильное решение и вызвать, например, метод Update или CancelUpdate, чтобы принять или отменить результаты редактирования.
- Property Fields As Fields. Одно из немногих свойств, возвращающих объект - коллекцию полей, элементами которой являются объекты класса Field. Каждый такой объект задает одно поле в записи, а вся коллекция - совокупность всех полей. Позже я подробнее расскажу об этих объектах, о том, что можно делать с самой коллекцией, можно ли добавлять и удалять поля, о свойствах и методах, доступных при работе с отдельным полем.
- Property Filter As Variant. Это свойство позволяет наложить фильтр на набор записей и создать новый набор, состоящий из записей, удовлетворяющих условию фильтра. При задании корректного фильтра текущей записью становится первая запись нового набора, перемещение по набору идет только по отфильтрованным записям, остальные записи как бы скрываются и становятся недоступными до тех пор, пока фильтр не будет отменен. Задать фильтр можно тремя различными способами:
- Строкой критерия - представляет набор из элементарных условий, связанных логическими операциями AND и OR. Каждое элементарное условие имеет вид: <Имя поля> Operator <Значение>, где Operator является одной из операций сравнения или оператором Like, задающим сравнение с образцом. Образец может включать обычные для образцов метасимволы "?" и "*". Заметьте, на операциях AND и OR не задан приоритет, по этой причине для сложных критериев необходимо правильно задать скобочную запись критерия. Критерий должен представлять дизъюнкцию конъюнктов, это означает, что выражения в скобках должны соединяться знаком AND, а сами скобки знаком операции OR.
- Массивом закладок - каждая закладка, как я говорил выше, определяет одну запись, а их массив задает все записи, которые должны быть отобраны в результате применения фильтра.
- Стандартным фильтром - константой из перечисления FilterGroupEnum. Возможные значения в этом перечислении: adFilterAffectedRecords, adFilterConflictingRecords, adFilterFetchedRecords, adFilterPendingRecords, adFilterNone.
Приведу пример создания фильтра:
Public Sub CreateFilter() 'Работа с фильтром
'Создать соединение CreateConnection 'Создать и выполнить команду 'задание свойств объекта Command Cmd1.ActiveConnection = Con1 Cmd1.CommandText = "SElect * From [Заказы]" Cmd1.CommandType = adCmdText Cmd1.Prepared = True ' вызов команды на исполнение Set Rst1 = Cmd1.Execute
'Задать фильтр Rst1.Filter = " [Сотрудник] = 'Петрова О.' AND " _ & "[Заказчик] = 'Книжная лавка'" With Rst1 .MoveFirst Do While Not .EOF 'Обработка текущей записи Debug.Print "Стоимость заказа = ", Rst1!Стоимость .MoveNext Loop End With End Sub
По-видимому, в дополнительных комментариях текст процедуры не нуждается. Не буду приводить и отладочных результатов, замечу, что все работало правильно, и на печать была выдана стоимость всех заказов, удовлетворяющих условию фильтра. Продолжим рассмотрение свойств:
Public Sub CreateSortedSet() 'Сортировать полученный набор данных 'Создать соединение CreateConnection 'Создать и выполнить команду 'задание свойств объекта Command Cmd1.ActiveConnection = Con1 Cmd1.CommandText = "Select * From [Заказчики]" Cmd1.CommandType = adCmdText Cmd1.Prepared = True ' вызов команды на исполнение Set Rst1 = Cmd1.Execute 'Задание критерия сортировки Rst1.Sort = "Город ASC" 'Работа с отсортированным набором With Rst1 .MoveFirst Do While Not .EOF 'Обработка текущей записи Debug.Print "Организация = ", Rst1!Название, Rst1!Город .MoveNext Loop
End With End Sub
Для простоты я ограничился сортировкой по одному полю, указав ASC - возрастающий порядок следования значений по этому полю.