Access объект recordset не является обновляемым: Элементы Recordset (DAO) | Microsoft Learn
Элементы Recordset (DAO) | Microsoft Learn
Twitter
LinkedIn
Facebook
Адрес электронной почты
-
Статья -
-
Область применения: Access 2013, Office 2013
Объект Recordset представляет записи в базовой таблице или записи, получаемые в результате выполнения запросов.
Методы
AddNew | Создает новую запись для обновляемого объекта Recordset. |
Cancel | ПРИМЕЧАНИЕ: Рабочие области ODBCDirect не поддерживаются в Microsoft Access 2013. Используйте ADO, если вы хотите получить доступ к внешним источникам данных без использования ядра СУБД Microsoft Access. Отменяет выполнение ожидающего вызова асинхронного метода (только для рабочих областей ODBCDirect). |
CancelUpdate | Отменяет любые незавершенные обновления для объекта Recordset. |
Clone | Создает дубликат объекта Recordset, который ссылается на оригинальный объект Recordset. |
Close | Закрывает открытый объект Recordset. |
CopyQueryDef | Возвращает объект QueryDef, который является копией QueryDef и используется для создания объекта Recordset, представленного заполнителем recordset (только для рабочие области Microsoft Access). . |
Delete | Не поддерживается для объекта. |
Edit | Копирует текущую запись с обновляемым объектом Recordset в буфер обмена для последующего редактирования. |
FillCache | Заполняет полностью или частично локальный кэш для объекта Recordset, который содержит данные из источника ODBC, подключенного к ядру СУБД Microsoft Access (только для баз данных ODBC, подключенных к Microsoft Access). |
FindFirst | Определяет положение первой записи в объекте Recordset типа dynaset или мгновенный снимок, которая отвечает заданным условиям и превращает запись в текущую запись (только для рабочих областей Microsoft Access). |
FindLast | Определяет положение последней записи в объекте Recordset типа dynaset или мгновенный снимок, которая отвечает заданным условиям и превращает запись в текущую запись (только для рабочих областей Microsoft Access). |
FindNext | Определяет положение следующей записи в объекте Recordset типа dynaset или мгновенный снимок, которая отвечает заданным условиям и превращает запись в текущую запись (только для рабочих областей Microsoft Access). . |
FindPrevious | Определяет положение предыдущей записи в объекте Recordset типа dynaset или мгновенный снимок, которая отвечает заданным условиям и превращает запись в текущую запись (только для рабочих областей Microsoft Access). . |
GetRows | Извлекает несколько строк из объекта Recordset. |
Move | Перемещает положение текущей записью в объекте Recordset. |
MoveFirst | Выполняет перемещение к первой записи в указанном объекте Recordset и делает запись текущей. |
MoveLast | Выполняет перемещение к последней записи в указанном объекте Recordset и делает запись текущей. |
MoveNext | Выполняет перемещение к последней записи в указанном объекте Recordset и делает запись текущей записью. |
MovePrevious | Выполняет перемещение к предыдущей записи в указанном объекте Recordset и делает запись текущей. |
NextRecordset | ПРИМЕЧАНИЕ: Рабочие области ODBCDirect не поддерживаются в Microsoft Access 2013. Получает следующий набор записей, при наличии, возвращаемый состоящим из нескольких частей запросом на выборку в вызове OpenRecordset и возвращает логическое значение, определяющее, находится ли одна или несколько дополнительных записей в состоянии ожидания (только для рабочих областей ODBCDirect). |
OpenRecordset | Создает новый объект Recordset и добавляет его в коллекцию Recordsets. |
Requery | Обновляет данные в объекте Recordset с помощью повторного выполнения запроса, на котором основан объект. |
Seek | Определяет положение записи в индексированном объектеRecordset табличного типа, которое отвечает заданным условиям для текущего индекса и превращает данную запись в текущую запись (только для рабочих областей Microsoft Access). |
Update | ПРИМЕЧАНИЕ: Рабочие области ODBCDirect не поддерживаются в Microsoft Access 2013. Используйте ADO, если вы хотите получить доступ к внешним источникам данных без использования ядра СУБД Microsoft Access. Сохраняет содержимое буфера обмена в обновляемый объект Recordset. |
Свойства
AbsolutePosition | Задает или возвращает относительный номер записи для текущей записи объекта Recordset. |
BatchCollisionCount | ПРИМЕЧАНИЕ: Рабочие области ODBCDirect не поддерживаются в Microsoft Access 2013. Используйте ADO, если вы хотите получить доступ к внешним источникам данных без использования ядра СУБД Microsoft Access. Возвращает количество записей, для которых не удалось выполнить последний пакет обновления (только для рабочих областей ODBCDirect). |
BatchCollisions | ПРИМЕЧАНИЕ: Рабочие области ODBCDirect не поддерживаются в Microsoft Access 2013. Используйте ADO, если вы хотите получить доступ к внешним источникам данных без использования ядра СУБД Microsoft Access. Возвращает массив закладок, указывающих на строки, которые вызывают конфликты при выполнении последнего пакета обновления (только для рабочих областей ODBCDirect). |
BatchSize | ПРИМЕЧАНИЕ: Рабочие области ODBCDirect не поддерживаются в Microsoft Access 2013. Используйте ADO, если вы хотите получить доступ к внешним источникам данных без использования ядра СУБД Microsoft Access. Задает или возвращает количество операторов, отправляемых на сервер в каждом пакете (только для рабочих областей ODBCDirect). |
BOF | Возвращает значение, которое показывает, находится ли текущее положение записи курсора перед первой записью объекта Recordset. |
Bookmark | Задает или возвращает закладку, которая уникально определяет текущую запись в объекте Recordset. |
Bookmarkable | Возвращает значение, которое указывает, поддерживает ли объект Recordset закладки, которые можно задать с помощью свойства Bookmark. |
CacheSize | Задает или возвращает число записей, полученных из источника данных ODBC, который будет кэшироваться локально. Для чтения и записи, Long. |
CacheStart | Задает или возвращает значение, которое определяет закладку первой записи в объекте Recordset типа dynaset, содержащих данные, локально кэшируемые из источника данных ODBC (только для рабочих областей Microsoft Access). |
Connection | Возвращает объект Connection, который соответствует базе данных. |
DateCreated | Возвращает дату и время создания базовой таблицы (только для рабочих областей Microsoft Access). Только для чтения, Variant. |
EditMode | Возвращает значение, которое указывает состояние редактирования для текущей записи. |
EOF | Возвращает значение, которое показывает, находится текущая запись после последней записи объекта Recordset. Только для чтения, Boolean. |
Fields | Возвращает коллекцию Fields, которая представляет все объекты Field для указанного объекта. Только для чтения. |
Filter | Задает или возвращает значение, определяющее записи, включаемые в открытом впоследствии объект Recordset (только для рабочих областей Microsoft Access). |
Index | Задает или возвращает значение, которое указывает имя текущего объекта Index в объекте Recordset табличного типа (только для рабочих областей Microsoft Access). |
LastModified | Возвращает закладку, определяющую самую последнюю из добавленных или измененных записей. |
LastUpdated | Возвращает дату и время последнего изменения в базовой таблице. Только для чтения, Variant. |
LockEdits | Задает или возвращает значение, определяющее тип блокировки, которая действует во время редактирования. |
Name | Возвращает имя указанного объекта. Только для чтения, String. |
NoMatch | Указывает, была ли найдена конкретная запись с помощью метода Seek или одного из методов Find (только для рабочих областей Microsoft Access). |
PercentPosition | Задает или возвращает значение, определяющее приблизительное место текущей записи в объекте Recordset на основе процента записей в Recordset. |
Properties | Возвращает коллекцию Properties для указанного объекта. Только для чтения. |
RecordCount | Возвращает число записей, доступных в объекте Recordset, или общее количество записей в Recordset табличного типа. или объекте TableDef. Только для чтения, Long. |
RecordStatus | ПРИМЕЧАНИЕ: Рабочие области ODBCDirect не поддерживаются в Microsoft Access 2013. Используйте ADO, если вы хотите получить доступ к внешним источникам данных без использования ядра СУБД Microsoft Access. Возвращает значение, определяющее состояние обновления текущей записи, если она входит в пакет обновления (только для рабочих областей ODBCDirect). Только для чтения, RecordStatusEnum. |
Restartable | Возвращает значение, которое указывает на то, поддерживает ли объект Recordset метод Requery, который повторно выполняет запрос, на котором основан объект Recordset. |
Sort | Задает или возвращает порядок сортировки для записей в объекте Recordset (только для рабочих областей Microsoft Access). |
StillExecuting | ПРИМЕЧАНИЕ: Рабочие области ODBCDirect не поддерживаются в Microsoft Access 2013. Используйте ADO, если вы хотите получить доступ к внешним источникам данных без использования ядра СУБД Microsoft Access. Указывает на то, завершена или нет асинхронной операции (т. |
Transactions | Возвращает значение, которое указывает на то, поддерживает ли объект транзакций. Только для чтения, Boolean. |
Type | Описание для этого элемента появится в итоговом выпуске Office 14. |
Updatable | Возвращает значение, которое указывает на то, можно ли изменить DAO объект. Только для чтения, Boolean. |
UpdateOptions | ПРИМЕЧАНИЕ: Рабочие области ODBCDirect не поддерживаются в Microsoft Access 2013. Используйте ADO, если вы хотите получить доступ к внешним источникам данных без использования ядра СУБД Microsoft Access. Задает или возвращает значение, которое указывает на то, как предложение WHERE создается для каждой записи во время обновления пакета, а также будет ли пакет обновления использовать оператор UPDATE или DELETE, за которым следует INSERT (только для рабочих областей ODBCDirect). |
ValidationRule | Задает или возвращает значение, которое проверяет данные в поле после его добавление или изменения в таблице (только для рабочих областей Microsoft Access). Чтение и запись, String. |
ValidationText | Задает или возвращает значение, определяющее текст сообщения, которое отображает ваше приложение, если значение объекта Field не удовлетворяют правилу проверки, задаваемому настройкой параметра ValidationRule (только для рабочих областей Microsoft Access). Только для чтения, String. |
Метод Recordset.AddNew (DAO) | Microsoft Learn
Twitter
LinkedIn
Facebook
Адрес электронной почты
-
Статья -
-
Область применения: Access 2013, Office 2013
Создает новую запись для обновляемого объекта Recordset.
Синтаксис
expression .AddNew
expression — переменная, которая представляет объект Recordset.
Метод AddNew используется для создания и добавления новой записи в объекте Recordset с именем набора записей. Этот метод задает значения по умолчанию для полей, а если значения по умолчанию не указаны, он задает для полей значение Null (значения по умолчанию, указанные для Recordset табличного типа).
Изменив новую запись, используйте метод Update, чтобы сохранить изменения и добавить запись в объект Recordset. В базу данных не будут внесены никакие изменения, пока вы не вызовете метод Update.
Примечание.
Если вызвать метод AddNew, а затем выполнить какую-либо операцию, переходящую к другой записи, но без использования метода Update, то изменения будут потеряны без предупреждения. Кроме того, если закрыть объект Recordset или завершить процедуру, которая объявляет объект Recordset или его объект Database, то новая запись удаляется без предупреждения.
Примечание.
Если вы используете метод AddNew в рабочей области Microsoft Access, а ядру СУБД нужно создать новую страницу для хранения текущей записи, то используется пессимистическая блокировка страницы. Если новую запись можно разместить на имеющейся странице, то используется оптимистическая блокировка.
Если вы не перешли к последней записи в объекте Recordset, то записи, добавленные к базовым таблицам другими процессами, могут быть включены, если они находятся за пределами текущей записи. Однако если добавить запись к собственному объекту Recordset, то запись будет видна в объекте Recordset и включена в базовую таблицу, где она становится видна всем новым объектам Recordset.
Расположение новой записи зависит от типа объекта Recordset:
Если объект Recordset является динамическим подмножеством данных, то записи вставляются в конце объекта Recordset независимо от правил сортировки и упорядочения, которые действовали во время открытия объекта Recordset.
В табличном объекте Recordset, для которого задано свойство Index, записи возвращаются в надлежащем месте в порядке сортировки. Если свойство Index не задано, новые записи возвращаются в конце объекта Recordset.
Запись, которая была текущей до использования метода AddNew, остается текущей. Если вам нужно сделать новую запись текущей, вы можете указать в свойстве Bookmark закладку, определяемую значением свойства LastModified.
Примечание.
Чтобы запись можно было добавить, изменить или удалить, в базовом источнике данных должен быть указан ее уникальный индекс. Если это не так, при вызове метода AddNew, Delete или Edit возникнет ошибка «Отказано в разрешении» в рабочей области Microsoft Access.
Пример
В этом примере используется метод AddNew, чтобы создать запись с указанным именем. Функция AddName необходима для запуска этой процедуры.
Sub AddNewX() Dim dbsNorthwind As Database Dim rstEmployees As Recordset Dim strFirstName As String Dim strLastName As String Set dbsNorthwind = OpenDatabase("Northwind.mdb") Set rstEmployees = _ dbsNorthwind.OpenRecordset("Employees", dbOpenDynaset) ' Get data from the user. strFirstName = Trim(InputBox( _ "Enter first name:")) strLastName = Trim(InputBox( _ "Enter last name:")) ' Proceed only if the user actually entered something ' for both the first and last names. If strFirstName <> "" and strLastName <> "" Then ' Call the function that adds the record. AddName rstEmployees, strFirstName, strLastName ' Show the newly added data. With rstEmployees Debug.Print "New record: " & !FirstName & _ " " & !LastName ' Delete new record because this is a demonstration..Delete End With Else Debug.Print _ "You must input a string for first and last name!" End If rstEmployees.Close dbsNorthwind.Close End Sub Function AddName(rstTemp As Recordset, _ strFirst As String, strLast As String) ' Adds a new record to a Recordset using the data passed ' by the calling procedure. The new record is then made ' the current record. With rstTemp .AddNew !FirstName = strFirst !LastName = strLast .Update .Bookmark = .LastModified End With End Function
Работа с необновляемыми запросами в Microsoft Access
Запросы в Microsoft Access просто фантастические. Они позволяют вам
выполнять широкий спектр очень мощных анализов и действий. Они могут
быть объединены в цепочку (один запрос использует другой запрос) и используются
в формах и отчетах MS Access. Существует множество типов запросов.
Большинство пользователей знакомы с запросами, которые генерируют результаты: выберите
запросы, выбор запросов с итоговыми значениями и кросс-таблицы (которые пользователи Excel ценят больше всего).
По умолчанию запросы Access Select можно обновлять (редактировать). Когда ты
просмотреть таблицу данных запроса Select, вы можете редактировать результаты и свои
изменения сохраняются в базовой таблице. Это работает даже тогда, когда
запрос возвращает записи из более чем одной таблицы. К сожалению, есть
ситуации, когда результаты запроса не подлежат обновлению.
Сообщение об ошибке: этот набор записей не подлежит обновлению
При попытке изменить запрос это сообщение появляется в статусе
bar: «Этот набор записей не подлежит обновлению». и данные не могут быть изменены:
Сообщение об ошибке: операция должна использовать обновляемый запрос
Запрос на обновление:
Операция должна использовать обновляемый запрос
Причины, по которым запрос или набор записей не могут быть обновлены
Существует множество причин, по которым ваши данные могут быть недоступны для обновления. Некоторые
довольно очевидно:
- Запрос представляет собой запрос Totals (использует GROUP BY) или запрос Crosstab (использует TRANSFORM), поэтому записи не являются отдельными записями
- Поле является вычисляемым, поэтому его нельзя редактировать
- У вас нет разрешений/прав на редактирование таблицы или базы данных
- Запрос использует функции VBA или пользовательские функции, а база данных не включена (доверена) для выполнения кода
Некоторые причины менее очевидны, но их нельзя избежать:
- Изменяемая таблица является связанной таблицей без первичного ключа.
- Для некоторых серверных баз данных (например, Microsoft SQL Server) Access/Jet требует ввода ключа для внесения любых изменений в таблицу. Это имеет смысл, поскольку Access
хочет выполнить запрос SQL для модификаций, но не может однозначно идентифицировать запись.
- Для некоторых серверных баз данных (например, Microsoft SQL Server) Access/Jet требует ввода ключа для внесения любых изменений в таблицу. Это имеет смысл, поскольку Access
Менее очевидны следующие ситуации:
- Запросы с некоторыми полями сводки, связанными с отдельными записями, и отдельные записи все еще не могут быть отредактированы
- Запросы с многотабличными соединениями, которые не указаны в ключевых полях
- Объединение запросов
Наиболее очевидными и раздражающими ситуациями являются запросы к одной таблице с итоговыми значениями (Группировать по, Сумма, Количество, Среднее и т. д.), которые объединяют несколько записей. Вы бы не
ожидать редактирования, поскольку вы не просматриваете отдельные записи. Однако, если какая-либо часть вашего запроса содержит поле сводки (GROUP BY), все поля
возвращенные записи недоступны для редактирования (не только поля сводки). В этой статье обсуждаются некоторые способы обойти это ограничение.
Невозможно редактировать данные в форме MS Access, пишет «Набор записей не подлежит обновлению»
спросил
Изменено
2 месяца назад
Просмотрено
38 тысяч раз
У меня есть форма, содержащая подчиненную форму, которая отображает данные из простого запроса на основе содержимого поля ввода.
Я установил следующие свойства обеих форм, но по-прежнему получаю сообщение «Набор записей не подлежит обновлению».
Тип набора записей: Dynaset
Разрешить добавления: Да
Разрешить удаление: Да
Разрешить редактирование: Да
Разрешить фильтры: Да
Блокировка записи: Нет блокировки
Что изменить?
- формы
- мс-доступ
- мс-доступ-2010
8
Возможно, одна из таблиц или запросов, на которые ссылается ваш запрос, не имеет первичных ключей.
ИЛИ (и это была моя проблема)
В построителе запросов убедитесь, что строка Group By
не включена. Когда вы отключите это, запрос станет редактируемым.
Группировать по включенным
Щелкните правой кнопкой мыши строку и отключите Итоги
Группировать по отключенным устранение неполадок.
Сделать Text0 несвязанным (удалить Navn как источник управления). У вас есть то, что составляет циклическую ссылку.
Вы указываете форме не показывать никаких данных, кроме тех, которые ограничены запросом, но у вас есть запрос не показывает никаких данных, кроме тех, которые находятся в вашей форме.
2
Я столкнулся с этой проблемой из-за отношений между таблицами. Некоторые из них были установлены как неопределенные, и я считаю, что это вызывало проблему. Как только я изменил отношения между таблицами, чтобы все они были «один ко многим», я смог редактировать поля в запросе/форме.
-Обратите внимание, что для связи «один ко многим» одно поле в связи должно быть ключом или иметь значение Уникально.
Я столкнулся с этой ошибкой в форме Access 2016, созданной с помощью мастера форм.
Для некоторых переменных, таких как ввод данных, установлено значение «Нет».
Но что заблокировало форму от правок, так это фильтр и сортировка.
Мне пришлось сказать и фильтру, и сортировке «Нет».
Когда я снова открыл форму, ничего не отображалось.
Я отфильтровал что-то, а затем очистил фильтры.
Теперь форма работает.
0
В моем случае я создал таблицу, в которой я соединил возможные сочетания миксов из различных других таблиц с рядом соответствующих отношений «многие к одному». В последующем запросе, использующем только эту одну таблицу комбинаций, она перестала обновляться, если я проверил «Уникальные значения» в листе свойств запроса. Он работает нормально, проверяя «Уникальные записи».
Недостатком является то, что при фильтрации по одному из полей комбинации в запросе я теперь получаю все те строки (записи) из таблицы комбинаций, где это конкретное поле имеет значение фильтра. Я бы не понял этого, если бы я проверил «Уникальные значения».
Я думаю, решение состоит в том, чтобы сделать два отдельных запроса: один необновляемый для простого запроса, а затем запрос на копирование (за исключением снятия отметки «Уникальные значения», когда требуется обновление).
По крайней мере, у тебя правильные отношения.
поврежденные таблицы могут иногда терять свои первичные ключи, что может быть причиной сообщения «Набор записей не подлежит обновлению».
Я обнаружил ту же проблему с набором записей, который не обновлялся, но это казалось прерывистым. Набор записей подчиненной формы был обновляемым, а затем нет. Когда ее нельзя было обновить, мне пришлось вернуться к ранней копии базы данных. В более ранней копии набор записей был обновляемым. Я обнаружил, что если я отсортировал данные подчиненной формы и закрыл форму, доступ сохранил предложение «Заказать по» в свойствах подчиненной формы — я никогда не запускал какую-либо команду для сохранения подчиненной формы. С этим набором «Упорядочить по» набор записей подчиненной формы нельзя было обновить. Исправление: я добавил процедуру инициализации для всех подчиненных форм, чтобы удалить порядок до открытия основной формы. Вала! Набор записей подчиненной формы теперь обновляется каждый раз.
1
У меня возникла та же проблема. Я должен добавить поле первичного ключа в таблицу на моем конце, и он начал работать.
Итак, щелкните правой кнопкой мыши таблицу и добавьте первичный ключ или сделайте существующий уникальный столбец первичным ключом.
Перейдите в свой MSACCESS -> Щелкните правой кнопкой мыши приложение и обновите ссылку
Выше Разрешить добавления: Да
у вас должно быть что-то вроде
Разрешить ввод данных
. Убедитесь, что в этом поле установлено значение false
. Если вы прочитаете комментарий в строке состояния, когда у вас выбрано это поле, вы поймете, почему ваша таблица вдруг стала нередактируемой из формуляра 🙂
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя адрес электронной почты и пароль
Опубликовать как гость
Электронная почта
Требуется, но никогда не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.