Шаг 119 - Метод Edit

Описание
Копирует текущую запись из обновляемого объекта Recordset в буфер копирования для последующего изменения.

наборЗаписей.Edit

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

Замечания
После вызова метода Edit все изменения, внесенные в поля текущей записи, помещаются в буфер копирования. После того как все необходимые изменения будут внесены, следует вызвать метод Update для сохранения изменений.
После вызова метода Edit текущая запись остается текущей.
Если после изменения записи перейти к следующей записи без вызова метода Update, то все внесенные изменения будут отменены без предупреждения. Кроме того, все изменения записи будут потеряны без предупреждения, если закрыть наборЗаписей или завершить процедуру, в которой описан объект Recordset, а также родительский объект Database или Connection.
Вызов метода Edit приводит к возникновению ошибки в следующих случаях:

  1. Отсутствует текущая запись.
  2. Объект Connection, Database или Recordset был открыт только для чтения.
  3. Ни одно из полей записи не является обновляемым.
  4. Объект Database или Recordset был открыт другим пользователем для монопольного доступа (в рабочей области ядра Microsoft Jet).
  5. Страница, содержащая текущую запись, блокирована другим пользователем (в рабочей области ядра Microsoft Jet).
Если при работе в сети в рабочей области ядра Microsoft Jet для свойства LockEdits объекта Recordset задано значение True (жесткая блокировка), запись блокируется с момента вызова метода Edit до завершения обновления. При значении False свойства LockEdits (нежесткая блокировка), запись блокируется и сравнивается с исходным содержимым записи непосредственно перед обновлением записи в базе данных. В ситуации, когда запись была изменена другим пользователем после вызова метода Edit, вызов метода Update приводит к ошибке выполнения, если метод OpenRecordset был вызван без указания константы dbSeeChanges. По умолчанию, при подключении к ядру Microsoft Jet базы данных ODBC и устанавливаемых драйверов ISAM всегда используют нежесткую блокировку.
В рабочей области ODBCDirect после изменения (и вызова метода Update для обновления) ключевого поля записи пользователь не имеет возможности дальнейшего изменения полей этой записи до закрытия объекта Recordset и последующей загрузки записи с помощью запроса.
Для добавления, изменения или удаления записи необходимо существование уникального индекса для этой записи в базовом источнике данных. В противном случае возникнет ошибка "Разрешение отсутствует" при вызове метода AddNew, Delete или Edit в рабочей области ядра Microsoft Jet или ошибка "Недопустимый аргумент" при вызове метода Update в рабочей области ODBCDirect.

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

Sub EditX()

	Dim dbsNorthwind As Database
	Dim rstEmployees As Recordset
	Dim strOldFirst As String
	Dim strOldLast As String
	Dim strFirstName As String
	Dim strLastName As String

	Set dbsNorthwind = OpenDatabase("Борей.mdb")
	Set rstEmployees = dbsNorthwind.OpenRecordset("Сотрудники", 	dbOpenDynaset)
	' Сохраняет исходные данные.
	strOldFirst = rstEmployees!Имя
	strOldLast = rstEmployees!Фамилия

	' Принимает новые данные для записи.
	strFirstName = Trim(InputBox( 	"Введите имя:"))
	strLastName = Trim(InputBox( "Введите фамилию:"))

	' Продолжает выполнение, если данные введены в оба поля.
	If strFirstName <> "" and strLastName <> "" Then
		' Обновляет запись новыми данными.
		EditName rstEmployees, strFirstName, strLastName
		With rstEmployees
			' Отображает новые и старые данные.
			Debug.Print "Старые данные: " & strOldFirst & 		" " & strOldLast
			Debug.Print "Новые данные: " & !Имя & 		" " & !Фамилия
			' Восстанавливает исходные данные, измененные
			' только для демонстрации.
			.Edit
			!Имя = strOldFirst
			!Фамилия = strOldLast
			.Update
		End With

	Else
		Debug.Print "Необходимо ввести строковое значение для имени и фамилии!"
	End If

	rstEmployees.Close
	dbsNorthwind.Close

End Sub

Sub EditName(rstTemp As Recordset, strFirst As String, strLast As String)

	' Вносит изменения в запись и устанавливает закладку, 
	' чтобы оставить запись текущей.
	With rstTemp
		.Edit
		!Имя = strFirst
		!Фамилия = strLast
		.Update
		.Bookmark = .LastModified
	End With

End Sub

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 23.03.2002