Свойство Form.Recordset (Access)

Возвращает или задает объект ADO Recordset или DAO Recordset , представляющий источник записи для указанного объекта. Чтение и запись объекта.

Синтаксис

expression. Набора записей

выражение: переменная, представляющая объект Form.

Замечания

Свойство Recordset возвращает объект Recordset , который предоставляет данные, просматриваемые в форме, отчете, элементе управления "Список" или элементе управления со списком. Например, если форма основана на запросе, ссылка на свойство Recordset эквивалентна клонирования объекта Recordset с помощью того же запроса. Однако, в отличие от использования свойства RecordsetClone , изменение текущей записи в наборе записей, возвращаемом свойством Recordset формы, также задает текущую запись формы.

Поведение чтения и записи свойства Recordset определяется типом набора записей (ADO или DAO) и типом данных (Access или SQL), содержащихся в наборе записей, определяемом свойством .

Тип набора записей На основе данных 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 . Кроме того, некоторые связанные с данными свойства могут быть переопределены, например свойства FilterOn, OrderBy и OrderByOn.

    Вызов метода Requery для набора записей формы (например, ) может привести к тому, Forms(0).Recordset.Requeryчто форма станет неограниченной. Чтобы обновить данные в форме, привязанной к набору записей, задайте для свойства RecordSource формы значение : Forms(0).RecordSource = Forms(0).RecordSource.

  • Привязка нескольких форм к общему набору данных. Это позволяет синхронизировать несколько форм. Например:

      Set Me.Recordset = Forms!Form1.Recordset
    

Примечание.

Если форма привязана к набору записей, при использовании команды Фильтровать по форме возникает ошибка.

Пример

В следующем примере свойство 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

Поддержка и обратная связь

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