Шаг 128 - Метод Update

Описание
Сохраняет содержимое буфера копирования в обновляемом объекте Recordset.

наборЗаписей.Update (тип, режим )

Параметры
наборЗаписей
Объектная переменная, представляющая открытый обновляемый объект Recordset.
тип
Необязательный. Константа, задающая тип обновления (только в рабочей области ODBCDirect).

режим
Необязательный. Значение типа Boolean, указывающее, следует ли принудительно обновлять базу данных, вне зависимости от изменения другим пользователем данных в базовых источниках после вызова методов AddNew, Delete или Edit>. При значении True изменения заносятся, и все изменения, внесенные другим пользователем, переписываются. При значении False (по умолчанию) изменения, внесенные другим пользователем за время ожидания обновления, приведут к невозможности занесения изменений, конфликтующих с уже внесенными изменениями. Ошибка при этом не возникает, а в свойствах BatchCollisionCount и BatchCollisions будут записаны число конфликтующих записей и сами записи, соответственно (только в рабочей области ODBCDirect).

Замечания
Метод Update применяется для сохранения текущей записи и всех внесенных в нее изменений.
Внесенные в текущую запись изменения теряются в следующих случаях:

  1. Вызван метод Edit или AddNew, а затем осуществлен переход к другой записи без вызова метода Update.
  2. Вызван метод Edit или AddNew, после чего метод Edit или AddNew вызывается снова без вызова метода Update.
  3. В значении свойства Bookmark указывается другая запись.
  4. Набор записей, указанный в аргументе наборЗаписей, закрывается без вызова метода Update.
  5. Пользователь отменяет сеанс редактирования, заданный в методе Edit, вызвав метод CancelUpdate.

Для внесения изменений в запись следует сначала скопировать содержимое текущей записи в буфер копирования с помощью метода Edit. Если метод Edit не будет вызван первым, то попытка изменить значение поля или вызвать метод Update приведет к ошибке.
В рабочей области ODBCDirect можно выполнить пакетные обновления, если библиотека указателей набора записей поддерживает пакетные обновления, а объект Recordset был открыт с параметром пакетного обновления с нежесткой блокировкой.
В рабочей области ядра Microsoft Jet, когда в многопользовательской среде свойство LockEdits объекта Recordset имеет значение True(жесткая блокировка), запись остается заблокированной с момента вызова метода Edit до отмены изменения или до обновления записи с помощью метода Update. Если свойство LockEdits имеет значение False(нежесткая блокировка), запись блокируется и сравнивается с исходной версией записи только непосредственно перед ее обновлением в базе данных. Если запись была изменена после вызова метода Edit, выполнить операцию Update невозможно. При подключении ядра Microsoft Jet к базе данных ODBC или базе данных ISAM всегда используется нежесткая блокировка. Для продолжения операции обновления следует снова вызвать метод Update. Для возвращения к записи, измененной другим пользователем, следует выполнить инструкцию Move 0.
Для добавления, изменения или удаления записи необходимо, чтобы запись имела уникальный индекс в базовом источнике данных. В противном случае возникает ошибка «Отсутствие разрешения» при вызове метода AddNew, Delete или Edit в рабочей области Microsoft Jet или ошибка «Недопустимый аргумент» при вызове метода Update в рабочей области ODBCDirect.

Пример
Следующая программа демонстрирует совместное применение методов Update и Edit.

Sub UpdateX()

	Dim dbsNorthwind As Database
	Dim rstEmployees As Recordset
	Dim strOldFirst As String
	Dim strOldLast As String
	Dim strMessage As String

	Set dbsNorthwind = OpenDatabase("Борей.mdb")
	Set rstEmployees = dbsNorthwind.OpenRecordset("Сотрудники")

	With rstEmployees
		.Edit
		' Сохраняет исходные данные.
		strOldFirst = !Имя
		strOldLast = !Фамилия
		' Изменяет данные в буфере редактирования.
		!Имя = "Вова"
		!Фамилия = "Сидоров"

		' Отображает содержимое буфера и принимает введенные данные.
		strMessage = "Режим редактирования:" & vbCr & 	"    Исходные данные = " & strOldFirst & " " & _
		strOldLast & vbCr & "    Данные в буфере = " &  	!Имя & " " & !Фамилия & vbCr & vbCr & _
		"Вызвать Update для замены в объекте Recordset " & 	"исходных данных на данные из буфера?"

		If MsgBox(strMessage, vbYesNo) = vbYes Then
			.Update
		Else
			.CancelUpdate

		End If
	
		' Отображает результаты.
		MsgBox "Содержимое набора записей = " & !Имя & " " & 	!Фамилия

		' Восстанавливает исходные данные, так как изменения 
		' внесены только для демонстрации.
		If Not (strOldFirst = !Имя And 	strOldLast = !Фамилия) Then
			.Edit
			!Имя = strOldFirst
			!Фамилия = strOldLast
			.Update
		End If
		.Close
	End With
	dbsNorthwind.Close
End Sub

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