Vba access recordset: Свойство Набор записей(Recordset) — Служба поддержки Майкрософт
Содержание
Свойство Набор записей(Recordset) — Служба поддержки Майкрософт
Access для Microsoft 365 Access 2021 Access 2019 Access 2016 Access 2013 Access 2010 Access 2007 Еще…Меньше
Применение
Объект ComboBox
|
Объект Form
|
Объект ListBox
|
Объект Report
|
Возвращает или задает объект ADO Recordset или DAO Recordset, который представляет собой источник записей для указанной формы, отчета, списка или поля со списком. Значение данного свойства доступно для чтения и записи.
выражение. Recordset
выражение — обязательный аргумент. Выражение, которое возвращает один из объектов в списке «Применяется к».
Замечания
Свойство Recordset (Набор записей) возвращает объект набора записей, который является источником данных, просматриваемых в форме, отчете, списке или поле со списком. Если форма основана, например, на запросе, ссылка на свойство Recordset эквивалентна клонированию объекта Recordset с помощью того же запроса. Однако в отличие от использования свойства RecordsetClone (Копия набора записей), назначение в качестве текущей другой записи в наборе записей, возвращаемом свойством Recordset формы, также задает текущую запись этой формы.
Это свойство можно задать только с помощью кода Visual Basic для приложений (VBA).
Доступность для чтения и записи свойства Recordset определяется типом набора записей (ADO или DAO) и типом данных (Access или SQL), которые содержатся в нем.
|
|
|
|
Чтение и запись
|
Чтение и запись
|
|
Н/Д
|
Чтение и запись
|
В следующем примере выполняется открытие формы, открытие набора записей и привязка формы к набору записей путем указания для свойства Recordset только что созданного объекта Recordset.
Global rstSuppliers As ADODB.RecordsetSub MakeRW()DoCmd.OpenForm «Suppliers»Set rstSuppliers = New ADODB.RecordsetrstSuppliers.CursorLocation = adUseClientrstSuppliers.Open «Select * From Suppliers», _CurrentProject.Connection, adOpenKeyset, adLockOptimisticSet Forms(«Suppliers»).Recordset = rstSuppliersEnd Sub
Свойство Набор записей служит для следующих целей:
-
Связывание нескольких форм с общим набором данных. Это позволяет синхронизировать несколько форм. Например:
Set Me.Recordset = Forms!Form1.Recordset -
Использование методов, не имеющих непосредственной поддержки в формах, вместе с объектом Recordset.
Например, свойство Recordset можно использовать вместе с методами ADO Find или DAO Find в пользовательском диалоговом окне для поиска записи.
-
Добавление в транзакцию (для которой можно выполнить откат) набора изменений, влияющих на несколько форм.
Изменение свойства Recordset также может привести к изменению свойств RecordSource (Источник записей), RecordsetType (Тип набора записей) и RecordLocks (Блокировка записей). Кроме того, некоторые связанные с данными свойства могут быть переопределены, например свойства Filter (Фильтр), FilterOn (Фильтр включен), OrderBy (Порядок сортировки) и OrderByOn (Сортировка включена).
Вызов метода Requery набора записей формы (например, Forms(0).Recordset.Requery) может привести к превращению формы в свободную. Чтобы обновить данные в форме, привязанной к набору записей, следует задать для свойства RecordSource (Источник записей) формы само это свойство (Forms(0).RecordSource = Forms(0).RecordSource).
Если форма привязана к набору записей, при использовании команды «Фильтр по форме» возникает ошибка.
Пример
В следующем примере свойство Recordset используется для создания копии объекта Recordset из текущей формы. Затем в окне отладки печатаются имена полей.
Sub Print_Field_Names()
Dim rst As DAO.Recordset, intI As Integer
Dim fld As Field
Set rst = Me.Recordset
For Each fld in rst.Fields
' Print field names.
Debug.Print fld.Name
Next
End Sub
В следующем примере свойство Recordset и объект Recordset используются для синхронизации набора записей с текущей записью формы. При выборе в поле со списком названия организации для поиска ее записи используется метод FindFirst, вызывающий отображение найденной записи в форме.
Sub SupplierID_AfterUpdate()
Dim rst As DAO.Recordset
Dim strSearchName As String
Set rst = Me.Recordset
strSearchName = CStr(Me!SupplierID)
rst.FindFirst "SupplierID = " & strSearchName
If rst.NoMatch Then
MsgBox "Record not found"
End If
rst.Close
End Sub
Следующий код помогает определить, какой тип набора записей возвращается свойством Recordset при разных условиях.
Sub CheckRSType()
Dim rs as Object
Set rs=Forms(0).Recordset
If TypeOf rs Is DAO.Recordset Then
MsgBox "DAO Recordset"
ElseIf TypeOf rs is ADODB.Recordset Then
MsgBox "ADO Recordset"
End If
End Sub
Свойство Form.Recordset (Access) | Microsoft Learn
Twitter
LinkedIn
Facebook
Адрес электронной почты
-
Статья -
- Чтение занимает 2 мин
-
Возвращает или задает объект ADO Recordset или DAO Recordset , который представляет источник записи для указанного объекта. Объект Read /write.
Синтаксис
выражения. Recordset
выражение: переменная, представляющая объект Form.
Свойство Recordset возвращает объект Recordset , который предоставляет данные, просматриваемые в форме, отчете, окне управления списком или комбо-окне управления. Если форма основана на запросе, например, ссылка на свойство Recordset эквивалентна клонированию объекта Recordset с помощью того же запроса. Однако, в отличие от использования свойства RecordsetClone , изменение текущей записи в наборе записей, возвращаемом свойством Recordset формы, также задает текущую запись формы.
Поведение чтения и записи свойства Recordset определяется типом наборов записей (ADO или DAO) и типами данных (Access или SQL), содержащихся в наборе записей, идентифицированных свойством.
Тип recordset | На основе SQL данных | На основе данных, хранимой в движке базы данных Access |
---|---|---|
ADO | Чтение и запись | Чтение и запись |
DAO | Недоступно | Чтение и запись |
В следующем примере открывается форма, открывается набор записей, а затем привязывает форму к набору записей, установив свойство Recordset формы к вновь созданному объекту Recordset .
Global rstSuppliers As ADODB.Recordset Sub MakeRW() DoCmd.OpenForm "Suppliers" Set rstSuppliers = New ADODB.Recordset rstSuppliers.CursorLocation = adUseClient rstSuppliers.Open "Select * From Suppliers", _ CurrentProject.Connection, adOpenKeyset, adLockOptimistic Set Forms("Suppliers").Recordset = rstSuppliers End Sub
Используйте свойство Recordset для:
-
Используйте методы с объектом Recordset , который не поддерживается напрямую в формах. Например, свойство Recordset можно использовать с помощью методов ADO Find или DAO Find в настраиваемом диалоговом окте для поиска записи.
-
Оберните транзакцию (которую можно откатать) вокруг набора изменений, влияющих на несколько форм.
Изменение свойства Recordset формы также может изменить свойства RecordSource, RecordsetType и RecordLocks .
Кроме того, некоторые свойства, связанные с данными, могут быть переопределены, например свойства Filter, FilterOn, OrderBy и OrderByOn .
Вызов метода Requery в наборе записей формы (например, ) может привести к тому,
Forms(0).Recordset.Requery
что форма станет неограничаемой. Чтобы обновить данные в форме, привязанной к набору записей, установите свойство RecordSource формы для себя:Forms(0).RecordSource = Forms(0).RecordSource
. -
Привязать несколько форм к общему набору данных. Это позволяет синхронизировать несколько форм. Например:
Set Me.Recordset = Forms!Form1.Recordset
Примечание
Если форма привязана к набору записей, при использовании команды Filter by Form возникает ошибка.
Пример
В следующем примере свойство Recordset создает новую копию объекта Recordset из текущей формы, а затем печатает имена полей в окне Debug.
Sub Print_Field_Names() Dim rst As DAO.Recordset, intI As Integer Dim fld As Field Set rst = Me.Recordset For Each fld in rst.Fields ' Print field names. Debug.Print fld.Name Next End Sub
В следующем примере свойство Recordset и объект Recordset используются для синхронизации наборов записей с текущей записью формы. Когда имя компании выбирается из комбо-окна, метод FindFirst используется для поиска записи для этой компании, в результате чего форма отображает найденную запись.
Sub SupplierID_AfterUpdate() Dim rst As DAO.Recordset Dim strSearchName As String Set rst = Me.Recordset strSearchName = CStr(Me!SupplierID) rst.FindFirst "SupplierID = " & strSearchName If rst.NoMatch Then MsgBox "Record not found" End If rst.Close End Sub
Следующий код помогает определить, какой тип наборов записей возвращается свойством Recordset в различных условиях.
Sub CheckRSType() Dim rs as Object Set rs=Forms(0).Recordset If TypeOf rs Is DAO.Recordset Then MsgBox "DAO Recordset" ElseIf TypeOf rs is ADODB.Recordset Then MsgBox "ADO Recordset" End If End Sub
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Свойство Form.Recordset (Доступ) | Microsoft Узнайте
Редактировать
Твиттер
Фейсбук
Эл. адрес
- Статья
- 3 минуты на чтение
Возвращает или задает объект ADO Recordset или DAO Recordset , представляющий источник записи для указанного объекта. Чтение/запись Объект .
Синтаксис
выражение . Набор записей
выражение Переменная, представляющая объект формы .
Свойство Recordset возвращает объект Recordset , предоставляющий просматриваемые данные в форме, отчете, элементе управления списком или полем со списком. Например, если форма основана на запросе, ссылка на свойство Recordset эквивалентна клонированию Объект Recordset с использованием того же запроса. Однако, в отличие от использования свойства RecordsetClone , изменение текущей записи в наборе записей, возвращаемом свойством Recordset формы, также устанавливает текущую запись формы.
Поведение чтения/записи свойства Recordset определяется типом набора записей (ADO или DAO) и типом данных (Access или SQL), содержащихся в наборе записей, определяемом свойством.
Тип набора записей | На основе данных SQL | На основе данных, хранящихся в ядре базы данных Access |
---|---|---|
АДО | Чтение/запись | Чтение/запись |
ДАО | Н/Д | Чтение/запись |
В следующем примере открывается форма, открывается набор записей, а затем привязывается форма к набору записей путем установки набора записей 9 формы .0020 для вновь созданного объекта Recordset .
Global rstSuppliers As ADODB.Recordset Подпрограмма MakeRW() DoCmd.OpenForm "Поставщики" Установить rstSuppliers = новый ADODB.Recordset rstSuppliers.CursorLocation = адусеклиент rstSuppliers.Open "Выбрать * из поставщиков", _ CurrentProject.Connection, adOpenKeyset, adLockOptimistic Установить формы ("Поставщики").Recordset = rstSuppliers Конец сабвуфера
Используйте свойство Recordset для:
-
Используйте методы с объектом Recordset , которые напрямую не поддерживаются в формах. Например, можно использовать свойство Recordset с методами ADO Find или DAO Find в пользовательском диалоговом окне для поиска записи.
-
Оберните транзакцию (которая может быть отменена) вокруг набора правок, влияющих на несколько форм.
Изменение свойства Recordset формы также может изменить Свойства RecordSource , RecordsetType и RecordLocks . Кроме того, некоторые свойства, связанные с данными, могут быть переопределены, например свойства Filter , FilterOn , OrderBy и OrderByOn .
Вызов метода Requery набора записей формы (например,
Forms(0).Recordset.Requery
) может привести к тому, что форма станет несвязанной. Чтобы обновить данные в форме, привязанной к набору записей, установите параметр RecordSource свойство формы на себя:Forms(0).RecordSource = Forms(0).RecordSource
. -
Привязка нескольких форм к общему набору данных. Это позволяет синхронизировать несколько форм. Например:
Установить Me.Recordset = Forms!Form1.Recordset
Примечание
Когда форма привязана к набору записей, возникает ошибка при использовании команды Фильтр по форме .
Пример
В следующем примере используется Recordset , чтобы создать новую копию объекта Recordset из текущей формы, а затем распечатать имена полей в окне отладки.
Sub Print_Field_Names() Dim сначала как DAO.Recordset, intI как целое число Dim fld As Field Установите сначала = Me.Recordset Для каждого этажа в rst.Fields ' Напечатать имена полей. Debug.Print fld.Name Следующий Конец сабвуфера
В следующем примере используется свойство Recordset и свойство Набор записей объект для синхронизации набора записей с текущей записью формы. Когда название компании выбирается из поля со списком, метод FindFirst используется для поиска записи для этой компании, в результате чего форма отображает найденную запись.
Sub SupplierID_AfterUpdate() Dim сначала как DAO.Recordset Dim strSearchName как строка Установите сначала = Me.Recordset strSearchName = CStr(Me!SupplierID) rst.FindFirst "SupplierID = " & strSearchName Если сначала.НеСоответствие Тогда MsgBox "Запись не найдена" Конец, если рст.Закрыть Конец сабвуфера
Следующий код помогает определить, какой тип набора записей возвращается свойством Recordset при различных условиях.
Sub CheckRSType() Dim rs как объект Установить rs=Forms(0).Recordset Если TypeOf rs Является DAO.Recordset Тогда MsgBox "Набор записей DAO" ElseIf TypeOf rs — это ADODB.Recordset Тогда MsgBox "Набор записей ADO" Конец, если Конец сабвуфера
Поддержка и отзывы
У вас есть вопросы или отзывы об Office VBA или этой документации? См. раздел Поддержка и отзывы Office VBA, чтобы узнать, как вы можете получить поддержку и оставить отзыв.
Как работать с набором записей (Dao) в MS Access
Наборы записей — это объекты, представляющие коллекции (наборы) записей.
Наборы записей имеют множество методов и свойств, упрощающих работу с записями в коллекции.
На этой странице кратко описано, как создавать и использовать наборы записей DAO.
Посетите страницу Recordset Builder, чтобы узнать, как этот инструмент включен в
Надстройка Code VBA вставляет полные блоки кода для чтения и записи записей в базу данных MS Access.
Открыть набор записей
Существует несколько способов создания или получения набора записей:
- Создать новый набор записей из таблицы или запроса в базе данных
- Использовать свойство Recordset объекта Access, например связанной формы
- Клонирование существующего набора записей
- Создайте новый набор записей, применив фильтр к существующему набору записей
В следующих разделах показаны эти различные подходы.
Будет включен небольшой скринкаст, чтобы показать, где щелкнуть, чтобы легко вставить код.
Приведенный ниже код открывает набор записей, взятый из таблицы в текущей базе данных
Dim сначала как набор записей Set rst = CurrentDb.OpenRecordset(Name:="Categories", Type:=RecordsetTypeEnum.dbOpenDynaset)
Нажмите здесь, чтобы увидеть, как создается код с помощью всего нескольких пунктов меню
В скринкасте происходят два действия:
- Вставьте метод OpenRecordset из объекта базы данных DAO
- Вставьте имя таблицы
Примечание. Код VBA автоматически понимает, что DAO OpenRecordset использует CurrentDb в качестве базы данных.
Примечание. При использовании OpenRecordset
в запросе или прикрепленной таблице Access по умолчанию устанавливает для свойства Type значение dbOpenDynaset.
Когда вы используете OpenRecordset для локальной таблицы, по умолчанию используется dbOpenTable.
Тип Table имеет другие методы (например, Seek вместо FindFirst), но его нельзя использовать с прикрепленными таблицами.
Следовательно, если вы позже, в качестве хорошей практики, разделите свою базу данных, таблицы станут присоединенными таблицами, и код, скорее всего, даст сбой.
По этой причине безопаснее просто придерживаться dbOpenDynaset.
Для добавления новой записи должен быть доступен набор записей. Для добавления записи требуется:
-
AddNew
: Начать вставку записи - Установить значения полей создаваемой записи
-
Обновление
: завершение добавления
Dim rstCategories As Recordset Установите rstCategories = CurrentDb.OpenRecordset(Name:="Categories", Type:=RecordsetTypeEnum.dbOpenDynaset) С rstCategories .Добавить новое ![Имя категории] = "Лучшее программное обеспечение" !Описание = "5 звезд" .Обновлять Конец с
Примечания
- Если имя поля содержит пробел, его необходимо поместить в квадратные скобки.
- Если вы добавите запись в набор записей типа dynaset, новая запись появится в конце набора записей, независимо от того, как набор записей отсортирован. Чтобы заставить новую запись появиться в ее правильно отсортированном положении, вы можете использовать метод
Requery
.
Чтобы прочитать значения полей из записи, сначала нужно сделать ее текущей.
Впоследствии значение поля может быть получено с помощью .Поля
метод или более короткие эквиваленты
С rstCategories lng = !CategoryID str1 = ![Имя категории] str2 = .Поля("Описание") Конец с
Чтобы изменить запись в наборе записей, ее сначала нужно сделать текущей записью. После этого для изменения значений полей записи требуется:
-
Редактировать
: Указывает, что текущая запись должна быть отредактирована - Установить значения полей создаваемой записи
-
Обновление
: завершение добавления
С rstCategories .Редактировать ![Имя категории] = "Лучшее программное обеспечение" .Обновлять Конец с
Ознакомьтесь с этим, чтобы увидеть, как код создается с помощью всего нескольких пунктов меню
Перемещение по набору записей изменяет то, что является «текущей» записью.
Найти запись
Самый прямой способ перейти к определенной записи — использовать метод FindFirst
.
С rstCategories .FindFirst "CategoryName = " & "'лучшее программное обеспечение'" Если .NoMatch Тогда Конец, если Конец с
Для наилучшей производительности критерии должны быть в форме «поле = значение», где поле — это индексированное поле в базовой таблице, или «поле LIKE
префикс», где поле — это индексированное поле в базовой таблице и префикс — строка поиска префикса (например, «ART*»).
Найдя запись, вы можете прочитать или изменить значения полей записи, как описано в разделе «Редактирование записи в наборе записей DAO».
Обработка всех записей
Используйте методы Move для перехода от записи к записи без применения условия. Когда вы открываете набор записей, первая запись является текущей.
Использование любого из методов Move (MoveFirst, MoveLast, MoveNext или MovePrevious) вызывает ошибку, если в наборе записей нет записей.
поэтому вы должны проверить это условие, прежде чем использовать метод Move. Если, как это обычно бывает, вы используете MoveNext в цикле, как показано ниже, этот тест выполняется с .EOF
.
Делайте, пока не rst.EOF rst.MoveNext Петля
Если вы хотите удалить запись, вам сначала нужно перейти к ней (см. выше), сделав ее текущей. После этого просто
рстКатегориес.Удалить
При использовании метода Delete ядро базы данных Microsoft Access немедленно удаляет текущую запись без каких-либо предупреждений или подсказок.