Метод 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)
выражение: переменная, представляющая объект
Параметры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. Вы укажете связанную таблицу или запрос, |
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 с помощью метода 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)
Щелкните здесь, чтобы увидеть, как создается код с помощью всего нескольких пунктов меню
На скринкасте вы видите, что происходят два действия:
- Вставьте метод OpenRecordset из объекта базы данных DAO
- Вставить имя таблицы
Примечание. Код VBA автоматически понимает, что DAO OpenRecordset использует CurrentDb в качестве базы данных.
Примечание. Когда вы используете OpenRecordset
в запросе или присоединенной таблице, Access по умолчанию устанавливает для свойства Type значение dbOpenDynaset.Когда вы используете OpenRecordset для локальной таблицы, он по умолчанию использует dbOpenTable.
Тип Table имеет разные методы (например, Seek вместо FindFirst), но его нельзя использовать с присоединенными таблицами.
Следовательно, если вы позже, в качестве хорошей практики, разделите свою базу данных, таблицы станут присоединенными таблицами, и код, скорее всего, выйдет из строя.
По этой причине безопаснее просто придерживаться dbOpenDynaset.
Для добавления новой записи должен быть доступен набор записей. Для добавления записи требуется:
-
AddNew
: начать вставку записи - Установить значения полей создаваемой записи
-
Обновление
: завершите добавление
Dim rstCategories As Recordset
Установите rstCategories = CurrentDb.OpenRecordset (Имя: = "Категории", Тип: = RecordsetTypeEnum.dbOpenDynaset)
С помощью rstCategories
.Добавить новое
! [Category Name] = "Лучшее программное обеспечение"
! Description = "Оценка 5 звезд"
.Обновлять
Конец с
Банкноты
- Если имя поля содержит пробел, вы должны заключить его в квадратные скобки.
- Если вы добавляете запись в набор записей типа dynaset, новая запись появится в конце набора записей, независимо от того, как этот набор записей сортируется.Чтобы заставить новую запись отображаться в ее правильно отсортированной позиции, вы можете использовать метод
Requery
.
Чтобы прочитать значения полей из записи, сначала нужно сделать ее текущей.
Впоследствии значение поля может быть получено с помощью метода .Fields
или более коротких эквивалентов
С rstCategories
lng =! CategoryID
str1 =! [Название категории]
str2 = .Fields ("Описание")
Конец с
Чтобы отредактировать запись в наборе записей, ее сначала нужно сделать текущей записью.После этого для изменения значений полей записи требуется:
-
Изменить
: указать, что текущая запись должна быть отредактирована - Установить значения полей создаваемой записи
-
Обновление
: завершите добавление
С 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
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, которая возвращает записи
Чтобы переместить курсор, используйте один из следующих методов перемещения объекта 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 Конец с
«Через двадцать лет вы будете больше разочарованы тем, чего не делали, а не тем, что сделали.