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), которые содержатся в нем.





Тип
набора записей


Данные SQL


Данные Access


ADO

Чтение и запись

Чтение и запись


DAO

Н/Д

Чтение и запись

В следующем примере выполняется открытие формы, открытие набора записей и привязка формы к набору записей путем указания для свойства 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 Узнайте

Редактировать

Твиттер

LinkedIn

Фейсбук

Эл. адрес

  • Статья
  • 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)
 

Нажмите здесь, чтобы увидеть, как создается код с помощью всего нескольких пунктов меню

В скринкасте происходят два действия:

  1. Вставьте метод OpenRecordset из объекта базы данных DAO
  2. Вставьте имя таблицы

Примечание. Код VBA автоматически понимает, что DAO OpenRecordset использует CurrentDb в качестве базы данных.

Примечание. При использовании OpenRecordset в запросе или прикрепленной таблице Access по умолчанию устанавливает для свойства Type значение dbOpenDynaset.
Когда вы используете OpenRecordset для локальной таблицы, по умолчанию используется dbOpenTable.
Тип Table имеет другие методы (например, Seek вместо FindFirst), но его нельзя использовать с прикрепленными таблицами.
Следовательно, если вы позже, в качестве хорошей практики, разделите свою базу данных, таблицы станут присоединенными таблицами, и код, скорее всего, даст сбой.
По этой причине безопаснее просто придерживаться dbOpenDynaset.

Для добавления новой записи должен быть доступен набор записей. Для добавления записи требуется:

  1. AddNew : Начать вставку записи
  2. Установить значения полей создаваемой записи
  3. Обновление : завершение добавления
 Dim rstCategories As Recordset
Установите rstCategories = CurrentDb. OpenRecordset(Name:="Categories", Type:=RecordsetTypeEnum.dbOpenDynaset)
С rstCategories
    .Добавить новое
    ![Имя категории] = "Лучшее программное обеспечение"
    !Описание = "5 звезд"
    .Обновлять
Конец с 

Примечания

  1. Если имя поля содержит пробел, его необходимо поместить в квадратные скобки.
  2. Если вы добавите запись в набор записей типа dynaset, новая запись появится в конце набора записей, независимо от того, как набор записей отсортирован. Чтобы заставить новую запись появиться в ее правильно отсортированном положении, вы можете использовать метод Requery .

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

 С rstCategories
    lng = !CategoryID
    str1 = ![Имя категории]
    str2 = .Поля("Описание")
Конец с 

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

  1. Редактировать : Указывает, что текущая запись должна быть отредактирована
  2. Установить значения полей создаваемой записи
  3. Обновление : завершение добавления
 С 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 немедленно удаляет текущую запись без каких-либо предупреждений или подсказок.

Imacros | Все права защищены © 2021