Метод Database.OpenRecordset (DAO)
Область применения: Access 2013 | Office 2013
Создает новый объект Recordset и добавляет его в коллекцию Recordsets.
Синтаксис
выражение.OpenRecordset (Name, Type, Options, LockEdit)
выражение: переменная, представляющая объект Database.
Параметры
Имя |
Обязательный/необязательный |
Тип данных |
Описание |
---|---|---|---|
Name |
Обязательный |
String |
Источник записей для нового объекта Recordset. Источником может быть имя таблицы, имя запроса или оператор SQL, возвращающий записи. Для объектов Recordset табличного типа в базах данных ядра СУБД Microsoft Access источником может быть только имя таблицы. |
Type |
Необязательный |
Variant |
Константа RecordsetTypeEnum, которая указывает на то, какой тип объекта Recordset нужно открыть. ПРИМЕЧАНИЕ: при открытии Recordset в рабочей области Microsoft Access, если вы не указали тип, OpenRecordset создает табличный тип Recordset, если возможно. Вы укажете связанную таблицу или запрос, OpenRecordset создаст объект Recordset типа dynaset. |
Options |
Необязательно |
Variant |
Сочетание констант RecordsetOptionEnum, которые указывают характеристики нового объекта Recordset. ПРИМЕЧАНИЕ. Константы dbConsistent и dbInconsistent являются взаимоисключающими, и использование обеих констант вызывает ошибку. Предоставление аргумента LockEdit, когда в качестве аргумента Options используется константа dbReadOnly, также приводит к возникновению ошибки. |
LockEdit |
Необязательно |
Variant |
Константа LockTypeEnum, определяющая блокировку Recordset. ПРИМЕЧАНИЕ. Вы можете использовать dbReadOnly в аргументе Options или в аргументе LockedEdit, но не одновременно. Если вы используете его для обоих аргументов, возникает ошибка во время выполнения. |
Возвращаемое значение
Recordset
Примечания
Обычно если у пользователя возникает эта ошибка во время обновления записи, код должен обновлять содержимое полей и возвращать измененные значения. Если ошибка возникает при удалении записи, код может отобразить для пользователя данные новой записи и сообщение о недавнем изменении данных. В этот момент код может запросить у пользователя подтверждение удаления записи.
Вы также можете использовать константу dbSeeChanges при открытии Recordset в рабочей области ODBC, подключенной к ядру СУБД Microsoft Access для таблицы Microsoft SQL Server 6.0 (или более поздней версии), содержащей столбец IDENTITY, в противном случае может возникать ошибка.
Открытие нескольких объектов Recordset для источника данных ODBC может привести к завершению работы, так как подключение будет занято предыдущим вызовом OpenRecordset. Один из способов решения этой проблемы состоит в полном заполнении Recordset с помощью метода MoveLast непосредственно после открытия Recordset.
Закрытие Recordset с помощью метода Close автоматически удаляет его из коллекции Recordsets.
Примечание.
Если источник ссылается на инструкцию SQL, состоящую из строки, сцепленной с не целым числом, а системные параметры указывают не в США. десятичный символ, например запятая (например, strSQL = "PRICE > " & lngPrice и lngPrice = 125,50), ошибка возникает при попытке открыть набор записей. Это возникает по причине того, что при объединении число будет преобразовано в строку с помощью используемого по умолчанию в вашей системе десятичного символа, а SQL поддерживает только десятичные символы, используемые в США.
Ссылка, предоставляемая сообществом UtterAccess. UtterAccess — это премиальный вики-портал и форум, посвященный Microsoft Access.
Пример
В приведенном ниже примере показано, как открыть объект Recordset на основании запроса параметра.
Пример кода изсправочника программиста Microsoft Access 2010.
Dim dbs As DAO.Database
Dim qdf As DAO.QueryDef
Dim rst As DAO.Recordset
Set dbs = CurrentDb
'Get the parameter query
Set qdf = dbs.QueryDefs("qryMyParameterQuery")
'Supply the parameter value
qdf.Parameters("EnterStartDate") = Date
qdf.Parameters("EnterEndDate") = Date + 7
'Open a Recordset based on the parameter query
Set rst = qdf.OpenRecordset()
В приведенном ниже примере показано, как открыть объект Recordset на основании таблицы или запроса.
Dim dbs As DAO.Database
Dim rsTable As DAO.Recordset
Dim rsQuery As DAO.Recordset
Set dbs = CurrentDb
'Open a table-type Recordset
Set rsTable = dbs.OpenRecordset("Table1", dbOpenTable)
'Open a dynaset-type Recordset using a saved query
Set rsQuery = dbs.OpenRecordset("qryMyQuery", dbOpenDynaset)
В приведенном ниже примере показано, как открыть объект Recordset на основании оператора SQL.
Dim dbs As DAO.Database
Dim rsSQL As DAO.Recordset
Dim strSQL As String
Set dbs = CurrentDb
'Open a snapshot-type Recordset based on an SQL statement
strSQL = "SELECT * FROM Table1 WHERE Field2 = 33"
Set rsSQL = dbs.OpenRecordset(strSQL, dbOpenSnapshot)
В примере ниже показано, как использовать свойство Filter для определения записей, которые нужно включить в открываемый впоследствии объект Recordset.
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim rstFiltered As DAO.Recordset
Dim strCity As String
Set dbs = CurrentDb
'Create the first filtered Recordset, returning customer records
'for those visited between 30-60 days ago.
Set rst = dbs.OpenRecordset(_
"SELECT * FROM Customers WHERE LastVisitDate BETWEEN Date()-60 " & _
"AND Date()-30 ORDER BY LastVisitDate DESC")
'Begin row processing
Do While Not rst.EOF
'Retrieve the name of the first city in the selected rows
strCity = rst!City
'Now filter the Recordset to return only the customers from that city
rst.Filter = "City = '" & strCity & "'"
Set rstFiltered = rst.OpenRecordset
'Process the rows
Do While Not rstFiltered.EOF
rstFiltered.Edit
rstFiltered!ToBeVisited = True
rstFiltered.Update
rstFiltered.MoveNext
Loop
'We've done what was needed. Now exit
Exit Do
rst.MoveNext
Loop
'Cleanup
rstFiltered.Close
rst.Close
Set rstFiltered = Nothing
Set rst = Nothing