Access

Access openrecordset: Метод Database.OpenRecordset (DAO) | Microsoft Docs

Содержание

Метод Database.OpenRecordset (DAO) | Microsoft Docs

  • Чтение занимает 3 мин

В этой статье

Область применения: Access 2013 | Office 2013Applies to: Access 2013 | Office 2013

Создает новый объект Recordset и добавляет его в коллекцию Recordsets.Creates a new Recordset object and appends it to the Recordsets collection.

СинтаксисSyntax

выражение.OpenRecordset (Name, Type, Options, LockEdit)expression.OpenRecordset (Name, Type, Options, LockEdit)

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

Database.expression A variable that represents a Database object.

ПараметрыParameters

ИмяName

Обязательный/необязательныйRequired/optional

Тип данныхData type

ОписаниеDescription

NameName

ОбязательныйRequired

StringString

Источник записей для нового объекта Recordset.The source of the records for the new Recordset. Источником может быть имя таблицы, имя запроса или оператор SQL, возвращающий записи.The source can be a table name, a query name, or an SQL statement that returns records. Для объектов Recordset табличного типа в базах данных ядра СУБД Microsoft Access источником может быть только имя таблицы.For table-type

Recordset objects in Microsoft Access database engine databases, the source can only be a table name.

TypeType

НеобязательныйOptional

VariantVariant

Константа RecordsetTypeEnum, которая указывает на то, какой тип объекта Recordset нужно открыть.A RecordsetTypeEnum constant that indicates the type of Recordset to open.

ПРИМЕЧАНИЕ: при открытии Recordset в рабочей области Microsoft Access, если вы не указали тип, OpenRecordset создает табличный тип Recordset, если возможно.NOTE: If you open a Recordset in a Microsoft Access workspace and you don’t specify a type, OpenRecordset creates a table-type Recordset, if possible. Вы укажете связанную таблицу или запрос,

OpenRecordset создаст объект Recordset типа dynaset.If you specify a linked table or query, OpenRecordset creates a dynaset-type Recordset.

OptionsOptions

НеобязательноOptional

VariantVariant

Сочетание констант RecordsetOptionEnum, которые указывают характеристики нового объекта Recordset.A combination of RecordsetOptionEnum constants that specify characteristics of the new Recordset.

ПРИМЕЧАНИЕ. Константы dbConsistent и dbInconsistent являются взаимоисключающими, и использование обеих констант вызывает ошибку.NOTE: The constants dbConsistent and dbInconsistent are mutually exclusive, and using both causes an error. Предоставление аргумента LockEdit, когда в качестве аргумента Options используется константа

dbReadOnly, также приводит к возникновению ошибки.Supplying a LockEdit argument when Options uses the dbReadOnly constant also causes an error.

LockEditLockEdit

НеобязательноOptional

VariantVariant

Константа LockTypeEnum, определяющая блокировку Recordset.A LockTypeEnum constant that determines the locking for the Recordset.

ПРИМЕЧАНИЕ. Вы можете использовать dbReadOnly в аргументе Options или в аргументе LockedEdit, но не одновременно.NOTE: You can use dbReadOnly in either the Options argument or the LockedEdit argument, but not both. Если вы используете его для обоих аргументов, возникает ошибка во время выполнения.If you use it for both arguments, a run-time error occurs.

Возвращаемое значениеReturn value

RecordsetRecordset

ПримечанияRemarks

Обычно если у пользователя возникает эта ошибка во время обновления записи, код должен обновлять содержимое полей и возвращать измененные значения.Typically, if the user gets this error while updating a record, your code should refresh the contents of the fields and retrieve the newly modified values. Если ошибка возникает при удалении записи, код может отобразить для пользователя данные новой записи и сообщение о недавнем изменении данных.If the error occurs while deleting a record, your code could display the new record data to the user and a message indicating that the data has recently changed. В этот момент код может запросить у пользователя подтверждение удаления записи.At this point, your code can request a confirmation that the user still wants to delete the record.

Вы также можете использовать константу

dbSeeChanges при открытии Recordset в рабочей области ODBC, подключенной к ядру СУБД Microsoft Access для таблицы Microsoft SQL Server 6.0 (или более поздней версии), содержащей столбец IDENTITY, в противном случае может возникать ошибка.You should also use the dbSeeChanges constant if you open a Recordset in a Microsoft Access database engine-connected ODBC workspace against a Microsoft SQL Server 6.0 (or later) table that has an IDENTITY column, otherwise an error may result.

Открытие нескольких объектов Recordset для источника данных ODBC может привести к завершению работы, так как подключение будет занято предыдущим вызовом OpenRecordset.Opening more than one Recordset on an ODBC data source may fail because the connection is busy with a prior OpenRecordset call. Один из способов решения этой проблемы состоит в полном заполнении

Recordset с помощью метода MoveLast непосредственно после открытия Recordset.One way around this is to fully populate the Recordset by using the MoveLast method as soon as the Recordset is opened.

Закрытие Recordset с помощью метода Close автоматически удаляет его из коллекции Recordsets.Closing a Recordset with the Close method automatically deletes it from the Recordsets collection.

Примечание

Если источник ссылается на оператор SQL, состоящий из строки, объединенной с нецелочисленным значением, а параметры системы содержат десятичные символы, не используемые в США, например, запятую (пример, strSQL = «PRICE > » & lngPrice, and lngPrice = 125,50), возникает ошибка при попытке открытия Recordset.If source refers to an SQL statement composed of a string concatenated with a non-integer value, and the system parameters specify a non-U.S. decimal character such as a comma (for example, strSQL = «PRICE > » & lngPrice, and lngPrice = 125,50), an error occurs when you try to open the

Recordset. Это возникает по причине того, что при объединении число будет преобразовано в строку с помощью используемого по умолчанию в вашей системе десятичного символа, а SQL поддерживает только десятичные символы, используемые в США.This is because during concatenation, the number will be converted to a string using your system’s default decimal character, and SQL only accepts U.S. decimal characters.

Ссылка, предоставляемая сообществом UtterAccess.Link provided by the UtterAccess community. UtterAccess — это премиальный вики-портал и форум, посвященный Microsoft Access.UtterAccess is the premier Microsoft Access wiki and help forum.

ПримерExample

В приведенном ниже примере показано, как открыть объект Recordset на основании запроса параметра.The following example shows how to open a Recordset that is based on a parameter query.

Пример кода из справочника программиста Microsoft Access 2010.Sample code provided by the Microsoft Access 2010 Programmer’s Reference.

    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 на основании таблицы или запроса.The following example shows how to open a Recordset based on a table or a query.

    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.The following example shows how to open a Recordset based on a Structured Query Language (SQL) statement.

    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.The following sample shows how to use the Filter property to determine the records to be included in a subsequently opened 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

Создание набора записей DAO на основе запроса

  • Чтение занимает 2 мин

В этой статье

Вы можете создать объект Recordset на основе сохраненного запроса на выборку.You can create a Recordset object based on a stored select query. В приведенном ниже примере кода Current Product List — это существующий запрос на выборку, сохраненный в текущей базе данных.In the following code example, Current Product List is an existing select query stored in the current database.

Dim dbsNorthwind As DAO.Database 
Dim rstProducts As DAO.Recordset 
 
Set dbsNorthwind = CurrentDb 
Set rstProducts = dbsNorthwind.OpenRecordset("Current Product List") 

Если сохраненного запроса на выборку еще не существует, метод ** OpenRecordset** также принимает строку SQL вместо имени запроса.If a stored select query does not already exist, the OpenRecordset method also accepts an SQL string instead of the name of a query. Приведенный выше пример можно переписать следующим образом.The previous example can be rewritten as follows.

Dim dbsNorthwind As DAO.Database 
Dim rstProducts As DAO.Recordset 
Dim strSQL As String 
 
Set dbsNorthwind = CurrentDb 
strSQL = "SELECT * FROM Products WHERE Discontinued = No " & _ 
         "ORDER BY ProductName" 
Set rstProducts = dbsNorthwind.OpenRecordset(strSQL) 

Недостаток этого способа заключается в том, что строка запроса должна компилироваться при каждом запуске, а сохраненный запрос компилируется при первом сохранении, что обычно немного повышает производительность.The disadvantage of this approach is that the query string must be compiled each time it runs, whereas the stored query is compiled the first time it is saved, which usually results in slightly better performance.

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

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи?Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

ms-access — VBA OpenRecordset выдает ошибку 3061

databasename = "qryDataExport"
Dim grpfield As String
grpfield = "Group"

Dim keys As DAO.Recordset
groupcmd = "SELECT [" & databasename & "].[" & grpfield & "] FROM [" & databasename & "] GROUP BY [" & databasename & "].[" & grpfield & "]"
Set keys = CurrentDb.OpenRecordset(groupcmd, dbOpenSnapshot)

Приведенное выше приводит к ошибке «Ошибка 3061: слишком мало параметров. Ожидается 13». при запуске. Мое прочтение до сих пор в значительной степени подразумевало, что это, вероятно, проблема с орфографией с неправильными заголовками полей или проблема, вызванная неправильными цитатами в строке, определяющей groupcmd.

Я пробовал использовать следующие форматы для имени базы данных:

CurrentDb.Queries.qryDataExport
CurrentDb!Queries!qryDataExport

И вышеупомянутый "qryDataExport". Последние два не содержат сообщений об ошибках, а первый не компилируется. Я подтвердил, что как в основной таблице, так и в qryDataExport есть столбец с названием «Группа».

Используемый модуль взят из этой страницы кода Google.

(РЕДАКТИРОВАТЬ: полностью отредактированный модуль на этот раз: http://pastebin.com/TJip86ED)

Из того, что я видел, я ожидаю, что это невероятно очевидная ошибка форматирования в определении имени базы данных, но у меня недостаточно опыта работы с VBA, чтобы ее обнаружить, и у меня заканчиваются идеи. Любые предложения будут ценны.

EDIT2: содержимое generateKML() теперь находится в ExportToKMLButton_Click(), где ExportToKMLButton — кнопка в форме DW_Form. Пока DW_Form открыт, запрос qryDataExport можно использовать, но когда форма закрывается, запрос запрашивает 13 параметров, упомянутых в сообщении об ошибке.

3

Nathaniel Bendinsky 21 Май 2015 в 18:27

2 ответа

Лучший ответ

Похоже, ваш запрос qryDataExport ссылается на элементы управления в форме Access, возможно, похожий на этот …

SELECT *
FROM YourTable
WHERE some_field = Forms!Form1!YourTextBox

Если Form1 открыт (в представлении формы), я могу запустить этот запрос из конструктора запросов Access, и он разрешит ссылку на элемент управления формой.

Однако если я попытаюсь использовать тот же запрос с OpenRecordset, ссылка не будет разрешена, и в этом контексте Access интерпретирует ее как параметр, для которого я не указал значение.

Для вашего запроса с несколькими ссылками на элементы управления вы можете создать временный QueryDef на основе вашего оператора SELECT и пройти через его коллекцию Parameters, предоставив каждому значению параметра Eval() из параметр .Name И, наконец, вызовите метод QueryDef.OpenRecordset для загрузки набора записей:

Dim prm As DAO.Parameter
Dim qdf As DAO.QueryDef
Set qdf = CurrentDb.CreateQueryDef(vbNullString, groupcmd)
For Each prm In qdf.Parameters
    prm.Value = Eval(prm.Name)
Next
Set keys = qdf.OpenRecordset

4

HansUp 21 Май 2015 в 18:16

Вы правильно используете имя базы данных (databasename = "qryDataExport"), qryDataExport, вероятно, фильтрует данные с использованием значений из формы … поэтому, когда вы выполняете запрос независимо, запрос обнаруживает, что ему не хватает 13 параметров, которые он берет из указанного форма.

Вы можете запустить эту процедуру в событии Click () для кнопки в форме, она должна работать.

0

Manuel Castro 21 Май 2015 в 16:22

Метод Database.OpenRecordset (DAO) | Документы Microsoft

  • 4 минуты на чтение

В этой статье

Применимо к: Access 2013 | Офис 2013

Создает новый объект Recordset и добавляет его в коллекцию Recordsets .

Синтаксис

выражение . OpenRecordset ( Имя , Тип , Опции , LockEdit )

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

Параметры

Имя

Обязательно / дополнительно

Тип данных

Описание

Имя

Требуется

Строка

Источник записей для нового Recordset .Источником может быть имя таблицы, имя запроса или оператор SQL, возвращающий записи. Для объектов Recordset табличного типа в базах данных ядра СУБД Microsoft Access источником может быть только имя таблицы.

Тип

Дополнительно

Вариант

Константа RecordsetTypeEnum , которая указывает тип Recordset , который нужно открыть.

ПРИМЕЧАНИЕ : Если вы открываете набор записей в рабочей области Microsoft Access и не указываете тип, OpenRecordset создает набор записей табличного типа, если это возможно.Если вы укажете связанную таблицу или запрос, OpenRecordset создаст динамический набор Recordset .

Опции

Дополнительно

Вариант

Комбинация констант RecordsetOptionEnum , которые определяют характеристики нового набора Recordset .

ПРИМЕЧАНИЕ : Константы dbConsistent и dbInconsistent являются взаимоисключающими, и их использование вызывает ошибку.Предоставление аргумента LockEdit, когда Options использует константу dbReadOnly , также вызывает ошибку.

LockEdit

Дополнительно

Вариант

Константа LockTypeEnum , которая определяет блокировку для набора записей .

ПРИМЕЧАНИЕ : dbReadOnly можно использовать либо в аргументе Options, либо в аргументе LockedEdit, но не в обоих сразу.Если вы используете его для обоих аргументов, произойдет ошибка времени выполнения.

Возвращаемое значение

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

Замечания

Обычно, если пользователь получает эту ошибку при обновлении записи, ваш код должен обновить содержимое полей и получить вновь измененные значения. Если ошибка возникает при удалении записи, ваш код может отображать новые данные записи для пользователя и сообщение, указывающее, что данные были недавно изменены. На этом этапе ваш код может запросить подтверждение того, что пользователь все еще хочет удалить запись.

Вам также следует использовать константу dbSeeChanges , если вы открываете набор записей в рабочей области ODBC, подключенной к ядру базы данных Microsoft Access, для таблицы Microsoft SQL Server 6.0 (или более поздней версии), которая имеет столбец IDENTITY, в противном случае может возникнуть ошибка.

Открытие более одного набора записей в источнике данных ODBC может завершиться ошибкой, поскольку соединение занято предыдущим вызовом OpenRecordset . Один из способов обойти это — полностью заполнить набор записей с помощью метода MoveLast , как только откроется набор записей .

Закрытие набора записей с помощью метода Закрыть автоматически удаляет его из коллекции Наборы записей .

Примечание

Если исходный код относится к оператору SQL, состоящему из строки, объединенной с нецелым значением, а системные параметры указывают десятичный символ, отличный от американского, например запятую (например, strSQL = «PRICE>» & lngPrice, и lngPrice = 125,50) ошибка возникает при попытке открыть Recordset .Это связано с тем, что во время конкатенации число будет преобразовано в строку с использованием десятичного символа вашей системы по умолчанию, а SQL принимает только десятичные символы США.

Ссылка предоставлена ​​ сообществом UtterAccess. UtterAccess — это ведущая вики-страница и справочный форум Microsoft Access.

Пример

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

Пример кода, предоставленный Справочником программиста Microsoft Access 2010.

  Dim dbs As DAO.Database
    Dim qdf как DAO.QueryDef
    Dim rst As DAO.Recordset
    
    Установить dbs = CurrentDb
    
    'Получить запрос параметров
    Установите qdf = dbs.QueryDefs ("qryMyParameterQuery")
    
    'Укажите значение параметра
    qdf.Parameters ("EnterStartDate") = Дата
    qdf.Parameters ("EnterEndDate") = Дата + 7
    
    'Открыть набор записей на основе запроса параметров
    Установите rst = qdf.OpenRecordset ()
  

В следующем примере показано, как открыть набор записей на основе таблицы или запроса.

  Dim dbs As DAO.Database
    Dim rsTable как DAO.Recordset
    Dim rsQuery как DAO.Recordset
    
    Установить dbs = CurrentDb
    
    'Открыть набор записей табличного типа
    Установите rsTable = dbs.OpenRecordset ("Table1", dbOpenTable)
    
    'Открыть набор записей динамического набора, используя сохраненный запрос
    Установите rsQuery = dbs.OpenRecordset ("qryMyQuery", dbOpenDynaset)
  

В следующем примере показано, как открыть набор записей на основе оператора языка структурированных запросов (SQL).

  Dim dbs As DAO.База данных
    Dim rsSQL как DAO.Recordset
    Dim strSQL как строка
    
    Установить dbs = CurrentDb
    
    'Открыть набор записей типа моментального снимка на основе оператора SQL
    strSQL = "ВЫБРАТЬ * ИЗ Таблицы1, ГДЕ Поле2 = 33"
    Установите rsSQL = dbs.OpenRecordset (strSQL, dbOpenSnapshot)
  

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

  Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
    Dim rst Отфильтровано как DAO.Набор записей
    Dim strCity As String
    
    Установить dbs = CurrentDb
    
    'Создайте первый отфильтрованный набор записей, возвращая записи клиентов
    'для тех, кого посетили 30-60 дней назад.
    Установите rst = dbs.OpenRecordset (_
        "ВЫБРАТЬ * ОТ клиентов ГДЕ LastVisitDate МЕЖДУ Датой () - 60" & _
        «И Дата () - 30 ORDER BY LastVisitDate DESC»)
    
    'Начать обработку строки
    Делай, пока не сперва.
        
        'Получить название первого города в выбранных строках
        strCity = rst! Город
    
        'Теперь отфильтруйте набор записей, чтобы возвращались только клиенты из этого города
        во-первых.Filter = "City = '" & strCity & "'"
        Установите rstFiltered = rst.OpenRecordset
    
        'Обрабатываем строки
        Не делать, пока не rstFiltered.EOF
            rstFiltered.Edit
            rstFiltered! ToBeVisited = True
            rstFiltered.Update
            rstFiltered.MoveNext
        Петля
    
        «Мы сделали то, что было необходимо. Теперь выход
        Выйти Сделать
        rst.MoveNext
       
    Петля
    
    'Очистка
    rstFiltered.Close
    сначала закрыть
    
    Установите rstFiltered = Nothing
    Установить rst = ничего
  

Рекордсет.Метод OpenRecordset (DAO) | Документы Microsoft

  • 2 минуты на чтение

В этой статье

Применимо к : Access 2013, Office 2013

Создает новый объект Recordset и добавляет его в коллекцию Recordsets .

Синтаксис

выражение .OpenRecordset ( Тип , Опции )

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

Параметры

Имя

Обязательно / дополнительно

Тип данных

Описание

Имя

Требуется

Строка

Источник записей для нового Recordset .Источником может быть имя таблицы, имя запроса или оператор SQL, возвращающий записи. Для объектов Recordset табличного типа в базах данных ядра СУБД Microsoft Access источником может быть только имя таблицы.

Тип

Дополнительно

Вариант

Константа RecordsetTypeEnum , которая указывает тип Recordset , который нужно открыть.

ПРИМЕЧАНИЕ : Если вы открываете набор записей в рабочей области Microsoft Access и не указываете тип, OpenRecordset создает набор записей табличного типа, если это возможно.Если вы укажете связанную таблицу или запрос, OpenRecordset создаст динамический набор Recordset .

Опции

Дополнительно

Вариант

Комбинация констант RecordsetOptionEnum , которые определяют характеристики нового набора Recordset .

ПРИМЕЧАНИЕ : Константы dbConsistent и dbInconsistent являются взаимоисключающими, и их использование вызывает ошибку.Предоставление аргумента lockedits, когда в параметрах используется константа dbReadOnly , также вызывает ошибку.

LockEdit

Дополнительно

Вариант

Константа LockTypeEnum , которая определяет блокировку для набора записей .

ПРИМЕЧАНИЕ : dbReadOnly можно использовать либо в аргументе options, либо в аргументе lockedits, но не в обоих сразу.Если вы используете его для обоих аргументов, произойдет ошибка времени выполнения.

Возвращаемое значение

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

Замечания

Обычно, если пользователь получает эту ошибку при обновлении записи, ваш код должен обновить содержимое полей и получить вновь измененные значения. Если ошибка возникает при удалении записи, ваш код может отображать новые данные записи для пользователя и сообщение, указывающее, что данные были недавно изменены. На этом этапе ваш код может запросить подтверждение того, что пользователь все еще хочет удалить запись.

Вам также следует использовать константу dbSeeChanges , если вы открываете набор записей в рабочей области ODBC, подключенной к ядру базы данных Microsoft Access, для таблицы Microsoft SQL Server 6.0 (или более поздней версии), которая имеет столбец IDENTITY, в противном случае может возникнуть ошибка.

Открытие более одного набора записей в источнике данных ODBC может завершиться ошибкой, поскольку соединение занято предыдущим вызовом OpenRecordset . Один из способов обойти это — полностью заполнить набор записей с помощью метода MoveLast , как только откроется набор записей .

Закрытие набора записей с помощью метода Закрыть автоматически удаляет его из коллекции Наборы записей .

Примечание

Если исходный код относится к оператору SQL, состоящему из строки, объединенной с нецелым значением, а системные параметры указывают десятичный символ, отличный от американского, например запятую (например, strSQL = «PRICE>» & lngPrice, и lngPrice = 125,50) ошибка возникает при попытке открыть Recordset .Это связано с тем, что во время конкатенации число будет преобразовано в строку с использованием десятичного символа вашей системы по умолчанию, а SQL принимает только десятичные символы США.

Как работать с набором записей (Дао) в MS Access

Наборы записей — это объекты, представляющие коллекции (наборы) записей. Наборы записей имеют множество методов и свойств, облегчающих работу с записями в коллекции. На этой странице рассказывается, как создавать и использовать наборы записей DAO.

Открыть набор записей

Есть несколько способов создать или получить набор записей:

В следующих разделах показаны эти различные подходы. Будет включен небольшой скринкаст, чтобы показать, где щелкнуть, чтобы легко вставить код.

Приведенный ниже код открывает набор записей, взятый из таблицы в текущей базе данных

  Dim rst As Recordset
Установите 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 (Имя: = "Категории", Тип: = RecordsetTypeEnum.dbOpenDynaset)
С помощью rstCategories
.Добавить новое
! [Category Name] = "Лучшее программное обеспечение"
! Description = "Оценка 5 звезд"
.Обновлять
Конец с
  

Банкноты

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

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

  С rstCategories
lng =! CategoryID
str1 =! [Название категории]
str2 = .Fields ("Описание")
Конец с
  

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

  1. Изменить : указать, что текущая запись должна быть отредактирована
  2. Установить значения полей создаваемой записи
  3. Обновление : завершите добавление
  С rstCategories
.Редактировать
! [Category Name] = "Лучшее программное обеспечение"
.Обновлять
Конец с
  
набор записей

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

При перемещении по набору записей изменяется «текущая» запись.

Найти рекорд

Самый прямой способ перейти к определенной записи — использовать метод FindFirst .

  С rstCategories
.FindFirst "CategoryName =" & "'лучшее программное обеспечение'"
Если .NoMatch, то

Конец, если
Конец с  

Для наилучшей производительности критерии должны быть в форме «поле = значение», где поле — это индексированное поле в базовой таблице, или «поле LIKE с префиксом», где поле является индексированным полем в базовой базовой таблице и prefix — строка поиска префикса (например, «ART *»).

Найдя запись, вы можете прочитать или изменить значения полей записи, как описано в разделе «Редактировать запись в наборе записей DAO».

Обработка всех записей

Используйте методы Move для перехода от записи к записи без применения условия. Когда вы открываете набор записей, первая запись является текущей. Использование любого из методов Move (MoveFirst, MoveLast, MoveNext или MovePrevious) вызывает ошибку, если в наборе записей нет записей, поэтому вам следует проверить это условие перед использованием метода Move.Если, как обычно, вы используете MoveNext в цикле, как показано ниже, этот тест выполняется с .EOF .

  Делать, пока не первый.EOF

rst.MoveNext
Петля
  

Если вы хотите удалить запись, вам сначала нужно перейти к ней (см. Выше), сделав ее текущей. После этого просто

  rstКатегории.Удалить  

Когда вы используете метод Delete, ядро ​​базы данных Microsoft Access немедленно удаляет текущую запись без каких-либо предупреждений или запросов.Удаление записи не приводит к автоматическому превращению следующей записи в текущую; чтобы перейти к следующей записи, вы должны использовать метод MoveNext.

Как использовать набор записей в MS Access

Как использовать набор записей

Набор записей — это структура данных, которая состоит из группы записей базы данных и может поступать из таблицы, запроса или SQL.

Синтаксис

выражение .OpenRecordset ( Имя , Тип (необязательно) , Параметры (необязательно) , LockEdit (необязательно) )

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

# 1 Установите свои артикулы

версий Access, более ранних, чем Access 2000.
Dim rs As DAO.Recordset

новая версия Access не требует ссылки DAO
Dim rs As Recordset

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

Dynaset: — Dynaset — это временный набор данных из одной или нескольких таблиц. Dynaset может быть запросом. Как и таблица, Dynaset обновляется, если файл не заблокирован или открыт только для чтения.Данные в Dynaset — живые, то есть обновляемый .

Установить rs = db.OpenRecordset («TableName», dbOpenDynaset)

Снимок: — Набор записей снимков, как и динамический набор, может быть взят из одной или нескольких таблиц или запроса. Разница в том, что снимок похож на снимок экрана, который не обновляется .

Установить rs = db.OpenRecordset («TableName», dbOpenSnapShot)

# 3 Настройка объекта набора записей

Чтобы установить объект набора записей, мы используем метод OpenRecordset объекта базы данных.Есть несколько способов сделать это:

Отобразить как DAO.Recordset
Установить rs = CurrentDb.OpenRecordset («DataSource»)

или

Dim rs As DAO.Recordset
Dim db As Database
Set db = CurrentDb
Set rs = db.OpenRecordset («DataSource»)

Примечание: источники данных с набором записей

«Источник данных» может быть одним из трех, передаваемых как буквальная строка или переменная:

  • a Имя таблицы
  • Имя запроса
  • строка SQL, которая возвращает записи
# 4 Перемещение курсора на наборе записей

Чтобы переместить курсор, используйте один из следующих методов перемещения объекта Recordset:

   рупий.MoveFirst  
    rs.MoveLast  
    rs.MoveNext  
    rs.MoveПредыдущее значение  
    rs.Move   

# 5 BOF (начало файла) и EOF (конец файла)

Использование любого из вышеперечисленных методов перемещения (MoveFirst, MoveLast, MoveNext или MovePrevious) вызовет ошибку , если в наборе записей нет записей .

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

 Если нет (rs.BOF и rs.EOF) Тогда
     'Нет записей, если оба значения "Начало файла" и "Конец файла" верны.
Конец, если
Если rs.RecordCount <> 0 Тогда
     "Есть несколько записей
Конец, если
Если (rs.EOF = False) ИЛИ (rs.BOF = False) Тогда
    'есть набор записей
Конец, если 
# 6 RecordCount с MoveLast

Функция ниже получит ряд записей из источника данных Recordset. Курсор переместится к последней записи и будет считать запись.

 Функция FindRecordCount (strSQL как строка) до тех пор, пока
Dim db как база данных
Dim rstRecords как набор записей
Установить db = CurrentDb
Установите rstRecords = db.OpenRecordset (strSQL)
Если rstRecords.EOF Тогда
FindRecordCount = 0
Еще
RstRecords.MoveLast
FindRecordCount = rstRecords.RecordCount
Конец, если
rstRecords.Close
db.Close
Установите rstRecords = Nothing
Установить db = Nothing
Конечная функция 

Примечание. Не используйте MoveLast, если в этом нет необходимости: это будет медленный с большим набором записей или набором записей, нарисованным по сети.RecordCount всегда будет не меньше 1, если записи существуют.

# 7 MoveNext с использованием EOF и цикла

MoveNext может перейти к концу набора записей (EOF) или MovePrevious к началу набора записей (BOF). Неспособность проверить эти условия означает, что ваш код работает в большинстве случаев, но однажды выдает ошибку при доступе к последней / первой записи.

Код:

.

Используйте эту конструкцию для циклического перебора наборов записей Access:

 Делай, пока Не первый.EOF
If rst! [MyField] <> Something Then
Exit Do 'Настоящее условие выхода из цикла.
Конец, если
'Остальная часть вашего кода здесь.
rst.MoveNext
Петля

 
# 8 FindFirst / Seek с использованием NoMatch

Всегда проверяйте наличие NoMatch после использования метода поиска или поиска (FindFirst, FindLast, FindNext, FindPrevious). Если вы не протестируете NoMatch, ваш код будет работать до тех пор, пока вы не столкнетесь с ошибкой поиска.

Код:

.
 rs.FindFirst "City =" "Нью-Йорк" ""
Если не rs.NoMatch, то
«Это нормально - продолжать обработку.
Конец, если 
# 9 Ссылка на поле в наборе записей

Поля, доступные нам в наборе записей, основаны на таблице или запросе, который используется в качестве источника данных, и упорядочены в наборе записей так же, как они упорядочены в таблице или запросе.

Мы можем ссылаться на поле, чтобы прочитать или записать в него значение, вызвав коллекцию Fields объекта Recordset.Есть несколько способов сделать это:

 rs.Fields ("Имя поля")
 rs.Fields (Имя переменной)
 rs.Fields (#)
 RS (#) 
# 10 AddNew без перехода на LastModified

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

Код:

.
 первое.ДобавитьНовое
.Fields ("FieldName1") = Value1
 .Поля ("FieldName2") = Value2
первое обновление
rst.Bookmark = rst.LastModified
«Работайте с новым альбомом здесь.
 

Пример добавления новой записи с набором записей здесь.

# 11 Редактировать запись

Для редактирования существующей записи.

Установить rs = CurrentDb.OpenRecordset («Источник данных»)

 с RS
 .Редактировать
 .Fields ("Поле1") = Значение1
 .Fields ("Поле2") = Значение2
 .Обновлять
 Конец с 

или

 Установить rs = CurrentDb.OpenRecordset ("Источник данных")
 rs. Редактировать
 rs! Fields («Fields1») = Value1
 rs! Fields ("Поле2") = Значение2
 rs .Update
Пример обновления записи с Recordset здесь.   
# 12 Закрыть набор записей

Всегда закрывайте наборы записей и устанавливайте для объектов значение Nothing при исправлении ошибок вашей процедуры. Открывать что-либо без явного закрытия — это плохое программирование. Эта проблема особенно серьезна в Access 97. Если не нажимать Ctrl + Alt + Del, вы можете обнаружить, что Access не завершится, если наборы записей или другие объекты не закрыты и не разыменованы.

Код:

.
 Sub SomeName ()
При ошибке Перейти к Err_Name
Dim db как база данных
Dim rst As Recordset
Установите db = CurrentDb ()
Установите rst = db.OpenRecordset ("MyTable")
'Полезный код здесь.
rst.Close 'Закройте то, что вы открыли
Exit_Name:
Set rst = Nothing 'Отменить назначение всех объектов
Установить db = Nothing
Выйти из подводной лодки
Err_MyProc:
'Обработчик ошибок здесь.Возобновить Exit_Name
Концевой переводник 
# 13 Полный набор записей
 Sub SomeName ()
При ошибке Перейти к Err_Name
Dim db как база данных
Dim rst As Recordset
Установите db = CurrentDb ()
Установите rst = db.OpenRecordset ("MyTable")
Делай, пока не сперва.
If rst! [MyField] <> Something Then
           Exit Do 'Настоящее условие выхода из цикла
Конец, если
rs. Редактировать
 rs! Fields («Поле1») = Значение1
 rs! Fields ("Поле2") = Значение2
    rs.Обновлять
rst.MoveNext
Петля
rst.Close 'Закройте то, что вы открыли
Exit_Name:
Set rst = Nothing 'Отменить назначение всех объектов
Установить db = Nothing
Выйти из подводной лодки
Err_Name:
    'Обработчик ошибок здесь.
    Возобновить Exit_Name
Концевой переводник 

Работа с наборами записей — Учебник MS-Access

MS-Access / Начало работы

Итак, вы рассмотрели навигацию по наборам записей, установку и использование закладок, создание набора записей. клоны и поиск конкретных записей.Все это сделано для того, чтобы вы могли получить точную запись, которая вы собираетесь что-то сделать.

Итак, что вы можете делать с наборами записей? Следующие разделы отвечают на этот вопрос.

Получение значений полей

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

 Установить rst = dbs.OpenRecordset ("tblMyTable")
MsgBox rst! CustomerNo
'или же
MsgBox rst ("CustomerNo")
 

Не забывайте, что имя поля, которое вы используете, полностью зависит от таблицы или запроса, для которых задан набор записей. на основе.Например, если номер клиента содержится в поле CustomerNo, а набор записей получает данные напрямую от tblCustomers, тогда будет достаточно rs! CustomerNo. Однако если набор записей получает свои данные из запроса, в котором поле CustomerNo переименовано (с использованием ключевого слова As) в CustNo:

ВЫБЕРИТЕ CustomerID, CustomerNo As CustNo, CustName FROM tblCustomers

, тогда вы должны использовать rs! CustNo.

Вы также можете ссылаться на поле с помощью объекта Field набора записей, как в следующем примере:

 MsgBox rst.Поля!
MsgBox rst.Fields ("CustomerNo")
MsgBox: первые поля (2)
 

Добавление, редактирование и удаление строк

Не все наборы записей редактируются, то же самое можно сказать и о некоторых строках. Наборы записей моментальных снимков никогда не редактируемые, а разрешения пользователей и блокировки записей могут привести к созданию наборов записей или отдельных строк, которые вы не может редактировать. Кроме того, объединения в некоторых наборах записей, основанных на нескольких таблицах, могут сделать весь набор записей недоступным для редактирования.

Добавление строк

Процедура добавления строк в набор записей довольно проста: откройте набор записей, выполните команду набора записей. AddNew, внесите дополнения, а затем выполните метод Update.Вот пример:

 'Открыть набор записей
Установите rst = dbs.OpenRecordset ("tblCustomers", dbOpenynaset)
С первой

'Начать сеанс редактирования

.Добавить новое
'Сделайте дополнения
! CustName = "Фред Нурк"
! DOB = DateSerial (1956, 11, 5)
! LastVisited = Дата ()
'
'Внесите другие дополнения, если хотите
'
'Зафиксируйте изменения

.Обновлять
Конец с
 

Если используется поле Autonumber, указывать его не нужно, так как Access автоматически вычислит и введите это для вас. Фактически, если вы попытаетесь указать значение для поля Autonumber, Access выдаст ошибку.

Редактирование строк

Процедура редактирования данных набора записей довольно проста: перейдите к строке, которую вы хотите отредактировать, нажмите Recordset метод Edit, внесите изменения, а затем выполните метод Update. В следующем примере показано, как:

 'Открыть набор записей
Установите rst = dbs.OpenRecordset ("tblCustomers", dbOpenDynaset)
С первой

    'Найдите запись, которую хотите отредактировать
    .FindFirst "[CustomerNo] = 123"

    Если нет .NoMatch, то
'Начать сеанс редактирования
.Редактировать

'Внесите изменения
! LastVisited = Дата ()
'
'Внесите другие изменения, если хотите
'

'Зафиксируйте изменения
.Обновлять
    Еще
MsgBox «Запись не найдена».
    Конец, если
Конец с
 

Удаление строк

Удаление строк еще проще; вы просто переходите к строке, которую хотите удалить, и запускаете метод Delete.

 'Открыть набор записей
Установите rst = dbs.OpenRecordset ("tblCustomers", dbOpenynaset)
С первой

    'Найдите запись, которую хотите отредактировать
    .FindFirst "[CustomerNo] = 123"

    Если нет .NoMatch, то
'Удалить строку
.Удалить
    Еще
MsgBox «Запись не найдена».
    Конец, если
Конец с
 

Важный момент, который следует учитывать при удалении строк, заключается в том, что как только вы удаляете одну, все строки над ней сдвинуть на одну позицию вниз.Это имеет реальные последствия только в том случае, если вы продвигаетесь вверх по набору записей. (ближе к концу), удаляя строки по ходу. Например, если вы хотите удалить непрерывный набор строк, вы можете удалить каждую вторую строку. Это потому, что когда вы удаляете текущую строку, Курсор не перемещается, но строки над ним перемещаются на одну позицию вниз для компенсации.

Рекомендуемая процедура удаления смежных строк — перемещение вниз (от конца к началу) через ряды, а не вверх.

 rst.MoveLast
Делать до первого.BOF
    первый.Удалить
    rst.MovePrevious
Петля
 

Отмена редактирования

Если вы передумаете и решите не продолжать добавлять или редактировать записи, вы можете отменить обновление с помощью метода CancelUpdate. Вы можете отменить изменения только между AddNew … Update или Редактировать … Методы обновления. Например:

 С первым
    .Добавить новое
    ! OrgName = strOrgName
    ! Адрес = strAddress

    'Если некоторые критерии соблюдены, обновить запись
    Если IsFinancial (lngOrgID), то

.Возврат = curRefundAmt
.Обновлять
    Еще
'Если проверка критериев не удалась, отмените обновление
    .CancelUpdate
    Конец, если
Конец с
 
Методы объекта

— Учебное пособие по MS-Access

MS-Access / Начало работы

Если вы хотите применить действие к объекту в базе данных (например, открыть запрос как набор записей или перейти к следующей строке в наборе записей), вы применяете метод объекта или объектная переменная, которую вы назначили для указания на объект. В некоторых случаях вы будете использовать метод создания нового объекта.Многие методы принимают параметры, которые можно использовать для дополнительно уточнить, как метод действует на объект. Например, вы можете сказать DAO Open- Recordset, открываете ли вы набор записей в локальной таблице, динамический набор (основанный на запросе recordset) или снимок, доступный только для чтения.

Visual Basic поддерживает множество различных объектных методов — гораздо больше, чем есть место для правильного документ. Пожалуй, одна из самых полезных групп методов — это группа вы можете использовать для создания набора записей, а затем для чтения, обновления, вставки и удаления строк в наборе записей.

Работа с наборами записей DAO

Чтобы создать набор записей, необходимо сначала объявить объектную переменную набора записей. Затем откройте набор записей с использованием метода DAO OpenRecordset текущей базы данных (указав таблицу имя, имя запроса или оператор SQL для создания набора записей) или OpenRecordset метод DAO.QueryDef, DAO.TableDef или другого объекта DAO.Recordset.

В DAO вы можете указать параметры, чтобы указать, открываете ли вы набор записей как локальный table (что означает, что вы можете использовать метод Seek для быстрого поиска строк на основе совпадения с доступным индексом), как динамический набор или как снимок только для чтения.Для обновляемых наборов записей вы также можете указать, что хотите запретить другие обновления, запретить другие чтения, открыть набор записей только для чтения, открыть набор записей только для добавления или открыть прокрутку вперед только для чтения набор записей (который позволяет перемещаться по записям только вперед и только один раз). Синтаксис для использования метода OpenRecordset объекта базы данных следующий:

Установить RecordSetObject = DatabaseObject.OpenRecordset (источник, [тип], [параметры], [параметры блокировки])

RecordSetObject — это переменная, которую вы объявили как DAO.Recordset, а DatabaseObject — это переменная, которую вы объявили как DAO.Database. Источник — строковая переменная или литерал, содержащий имя таблицы, имя запроса или допустимый оператор SQL. Таблица-2 описывает параметры, которые вы можете указать для типа, опций и опций блокировки.

Таблица-2 Настройки параметров OpenRecordset
Настройка Описание
Тип (выберите один)
dbOpenTable Возвращает набор записей таблицы.Вы можете использовать эту опцию, только если источником является таблица, локальная для базы данных, описываемой объектом Database. Источник не может быть связанной таблицей. Вы можете установить текущий индекс в наборе записей таблицы и использовать метод Seek для поиска строк с помощью индекс. Если вы не укажете тип, OpenRecordset вернет таблицу, если источником является имя локальной таблицы.
dbOpenDynaset Возвращает набор записей динамического набора. Источник может быть локальной таблицей, связанной таблицей, запросом или оператором SQL.Вы можете использовать методы поиска для поиска строк в наборе записей динамического набора. Если вы не укажете тип, OpenRecordset вернет динамический набор, если источником является связанная таблица, запрос или оператор SQL.
dbOpenSnapshot Возвращает доступный только для чтения набор записей моментального снимка. После открытия набора записей вы не увидите никаких изменений, внесенных другими пользователями. Вы можете использовать методы Find для поиска строк в наборе записей моментального снимка.
dbOpenForwardOnly Возвращает доступный только для чтения набор записей моментального снимка, который можно пройти вперед только один раз.Вы можете использовать метод MoveNext для доступа к последовательным строкам.
Параметры (можно выбрать параметры умножения, поставить знак плюс между именами параметров, чтобы сложить их вместе)
dbAppendOnly Возвращает набор записей таблицы или динамического набора, который позволяет вставлять только новые строки. Вы можете использовать эту опцию только с типами dbOpenTable и dbOpenDynaset.
dbSeeChanges просит Access создать ошибку времени выполнения в вашем коде, если другой пользователь изменяет данные, пока вы редактируете их в наборе записей.
dbDenyWrite Запрещает другим пользователям изменять или вставлять записи, пока ваш набор записей открыт.
dbDenyRead Запрещает другим пользователям читать записи в вашем открытом наборе записей.
dbInconsistent Позволяет вносить изменения во все поля в наборе записей с несколькими таблицами (на основе запроса или оператора SQL), включая изменения, несовместимые с любым соединением, определенным в запросе.Например, вы можете изменить поле идентификатора клиента (внешний ключ) таблицы заказов так, чтобы оно больше не соответствовало первичному ключу во включенной таблице клиентов — если только ограничения ссылочной целостности в противном случае помешать вам сделать это. Вы не можете включать одновременно dbInconsistent и dbConsistent.
dbConsistent Позволяет вносить изменения в набор записей с несколькими таблицами (на основе запроса или оператора SQL) только в соответствии с определениями соединения в запросе.Например, вы не можете изменить поле идентификатора клиента (внешний ключ) таблицы заказов, чтобы его значение не совпадало со значением какой-либо строки клиента в запросе. Вы не можете включать одновременно dbInconsistent и dbConsistent.
dbPessimistic Запрашивает доступ для блокировки строки, как только вы переводите строку в редактируемое состояние, выполнив метод Edit. Это значение по умолчанию, если вы не укажете параметр блокировки.
dbOptimistic просит Access не пытаться заблокировать строку, пока вы не попытаетесь записать ее в базу данных с помощью метода обновления.Это генерирует ошибку времени выполнения, если другой пользователь изменил строку после того, как вы выполнили метод Edit.

Например, чтобы объявить набор записей для таблицы tblFacilities в разделе «Бронирование отелей». (Hotel.accdb) и откройте набор записей в виде таблицы, чтобы вы могли использовать его индексы, введите следующее:

 Dim dbHotel As DAO.Database
Dim rcdFacilities As DAO.RecordSet
Установите dbHotel = CurrentDb
Установите rcdFacilities = dbHotel.OpenRecordSet ("tblFacilities", _ dbOpenTable)
 

Чтобы открыть запрос qryContactProducts в базе данных контактов Conrad Systems (Contacts.accdb) в качестве динамического набора введите следующее:

 Dim dbКонтакты как DAO.Database
Dim rcdContactProducts как DAO.RecordSet
Установите dbContacts = CurrentDb
Установите rcdContactProducts = _
  dbContacts.OpenRecordSet ("qryContactProducts")
 

(Обратите внимание, что открытие набора записей как динамического набора по умолчанию, если источником является запрос.)

Примечание: Любой набор записей таблицы или динамический набор записей, основанный на таблице, является обновляемым. Когда ты попросить Access открыть динамический набор в таблице, Access внутренне создает запрос, который выбирает все столбцы из таблицы.Набор записей динамического набора, основанный на запросе, будет обновляемым, если запрос является обновляемым.

OpenRecordSet — Доступ — SS64.com

OpenRecordSet — Доступ — SS64.com

Откройте новый набор записей. Это позволяет вам перемещаться по набору записей (или строк) в таблице. n.b. Почти во всех случаях запрос SQL будет выполняться быстрее, чем объект RecordSet.

 Синтаксис
        выражение  .OpenRecordSet ( Имя, Тип ,  Параметры , LockEdit)

Ключ
     выражение  Переменная, представляющая объект набора записей. Имя  Источник записей для нового набора записей.
            Источником может быть имя таблицы, имя запроса,
            или оператор SQL, который возвращает записи.
            Для объектов Recordset табличного типа в базе данных Access
            базы данных движка, источником может быть только имя таблицы.

     Тип  Тип набора записей, который нужно открыть.
            dbOpenTable (1), dbOpenDynaset (2), dbOpenSnapshot (4)
            dbOpenForwardOnly (8), dbOpenDynamic (16)

            По умолчанию = dbOpenTable для таблиц доступа
            или dbOpenDynaset для связанной таблицы / запроса. Options  Комбинация констант RecordsetOptionEnum, которые
            укажите характеристики нового набора записей. 
Константы dbConsistent и dbInconsistent равны взаимоисключающие, и использование обоих вызывает ошибку. Предоставление аргумента lockedits, когда в параметрах используется Константа dbReadOnly также вызывает ошибку. Lockits Блокировка для набора записей: dbOptimistic (3), dbPessimistic (2), dbOptimisticBatch (5), dbOptimisticValue (1)

Константы dbConsistent и dbInconsistent являются взаимоисключающими, и их использование вызывает ошибку.Предоставление аргумента lockedits , когда параметры используют константу dbReadOnly, также вызывает ошибку.

Используйте константу dbSeeChanges , если вы открываете набор записей для таблицы ODBC / SQL Server.

Открытие нескольких наборов записей в источнике данных ODBC может завершиться ошибкой, если соединение занято предыдущим вызовом OpenRecordset. Один из способов избежать этой возможности — полностью заполнить набор записей с помощью метода MoveLast сразу после открытия набора записей.

Пример

 Dim db как база данных
Dim rst As Recordset

Установите dbs = OpenDatabase ("Northwind.mdb")
Установите rst = dbs  .OpenRecordset  ("Сотрудники", dbOpenDynaset)
      
С первой
   'Заполнить набор записей. 
.MoveLast
.MoveFirst Конец с

«Через двадцать лет вы будете больше разочарованы тем, чего не делали, а не тем, что сделали.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *