Método Recordset.Update (DAO)
Aplica-se ao: Access 2013, Office 2013
Sintaxe
expressão . Update(UpdateType, Force)
expressão Uma variável que representa um objeto Conjunto de registros.
Parâmetros
Nome |
Necessária/opcional |
Tipo de dados |
Descrição |
---|---|---|---|
UpdateType |
Opcional |
Long |
Uma constante UpdateTypeEnum indicando o tipo de atualização, como especificado em Configurações (somente espaços de trabalho ODBCDirect). |
Força |
Opcional |
Boolean |
Um valor Boolean indicando se é preciso impor ou não as alterações ao banco de dados, independentemente de os dados subjacentes terem sido alterados por outro usuário desde a chamada AddNew, Delete ou Edit. Se for True, as alterações serão impostas e as alterações feitas por outros usuários serão simplesmente substituídas. Se for False (padrão), as alterações feitas por outro usuário enquanto a atualização estiver pendente causarão uma falha na atualização para as alterações que estiverem em conflito. Nenhum erro ocorrerá, mas as propriedades BatchCollisionCount e BatchCollisions indicarão o número de conflitos e as linhas afetadas por conflitos, respectivamente (somente espaços de trabalho ODBCDirect). |
Comentários
Use Update para salvar o registro atual e todas as alterações feitas nele.
Importante
As alterações do registro atual serão perdidas se:
- Você utilizar os métodos Edit ou AddNew e mover para outro registro sem primeiro usar Update.
- Você utilizar Edit ou AddNew e, em seguida, usar Edit ou AddNew novamente sem primeiro usar Update.
- Você definir a propriedade Bookmark para outro registro.
- Você fechar o Recordset sem usar primeiro Update.
- Você cancelar a operação Edit utilizando CancelUpdate.
Para editar um registro, use o método Edit para copiar o conteúdo do registro atual para um buffer de cópia. Se você não usar Edit primeiro, ocorrerá um erro ao usar Update ou tentar alterar um valor de campo.
Em um espaço de trabalho ODBCDirect, você pode fazer atualizações em lote, desde que a biblioteca de cursores aceite atualizações em lote, e o Recordset tenha sido aberto com a opção de bloqueio de lote otimista.
Em um espaço de trabalho do Microsoft Access, quando a configuração da propriedade LockEdits do objeto Recordset é True (bloqueado de forma pessimista) em um ambiente de vários usuários, o registro permanece bloqueado desde o momento em que Edit é usado até que o método Update seja executado ou a edição seja cancelada. Se a configuração da propriedade LockEdits é False (bloqueado de forma otimista), o registro é bloqueado e comparado ao registro pré-editado antes de ser atualizado no banco de dados.
Se o registro foi alterado desde o uso do método Edit, a operação Update falhará. Os bancos de dados ODBC e ISAM instalável conectados ao mecanismo de banco de dados do Microsoft Access sempre utilizam bloqueio otimista. Para continuar a operação Update com suas alterações, use o método Update novamente. Para reverter para o registro de acordo com o que outro usuário tenha alterado, atualize o registro atual usando Mover 0.
Observação
[!OBSERVAçãO] Para adicionar, editar ou excluir um registro, deve haver um índice exclusivo no registro, na fonte de dados de base. Caso contrário, ocorrerá um erro de "Permissão negada" na chamada ao método AddNew, Delete ou Edit em um espaço de trabalho do Microsoft Access ou um erro de "Argumento inválido" ocorrerá na chamada a Update em um espaço de trabalho ODBCDirect.
Exemplo
Este exemplo demonstra o método Update em conjunto com o método 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("Northwind.mdb")
Set rstEmployees = _
dbsNorthwind.OpenRecordset("Employees")
With rstEmployees
.Edit
' Store original data.
strOldFirst = !FirstName
strOldLast = !LastName
' Change data in edit buffer.
!FirstName = "Linda"
!LastName = "Kobara"
' Show contents of buffer and get user input.
strMessage = "Edit in progress:" & vbCr & _
" Original data = " & strOldFirst & " " & _
strOldLast & vbCr & " Data in buffer = " & _
!FirstName & " " & !LastName & vbCr & vbCr & _
"Use Update to replace the original data with " & _
"the buffered data in the Recordset?"
If MsgBox(strMessage, vbYesNo) = vbYes Then
.Update
Else
.CancelUpdate
End If
' Show the resulting data.
MsgBox "Data in recordset = " & !FirstName & " " & _
!LastName
' Restore original data because this is a demonstration.
If Not (strOldFirst = !FirstName And _
strOldLast = !LastName) Then
.Edit
!FirstName = strOldFirst
!LastName = strOldLast
.Update
End If
.Close
End With
dbsNorthwind.Close
End Sub
Este exemplo demonstra o método Update em conjunto com o método AddNew.
Sub UpdateX2()
Dim dbsNorthwind As Database
Dim rstEmployees As Recordset
Dim strOldFirst As String
Dim strOldLast As String
Dim strMessage As String
Set dbsNorthwind = OpenDatabase("Northwind.mdb")
Set rstEmployees = _
dbsNorthwind.OpenRecordset("Employees")
With rstEmployees
.AddNew
!FirstName = "Bill"
!LastName = "Sornsin"
' Show contents of buffer and get user input.
strMessage = "AddNew in progress:" & vbCr & _
" Data in buffer = " & !FirstName & " " & _
!LastName & vbCr & vbCr & _
"Use Update to save buffer to recordset?"
If MsgBox(strMessage, vbYesNoCancel) = vbYes Then
.Update
' Go to the new record and show the resulting data.
.Bookmark = .LastModified
MsgBox "Data in recordset = " & !FirstName & _
" " & !LastName
' Delete new data because this is a demonstration.
.Delete
Else
.CancelUpdate
MsgBox "No new record added."
End If
.Close
End With
dbsNorthwind.Close
End Sub
Este exemplo usa a propriedade BatchCollisionCount e o método Update para demonstrar a atualização em lote onde todas as colisões são resolvidas pela imposição da atualização em lote.
Sub BatchX()
Dim wrkMain As Workspace
Dim conMain As Connection
Dim rstTemp As Recordset
Dim intLoop As Integer
Dim strPrompt As String
Set wrkMain = CreateWorkspace("ODBCWorkspace", _
"admin", "", dbUseODBC)
' This DefaultCursorDriver setting is required for
' batch updating.
wrkMain.DefaultCursorDriver = dbUseClientBatchCursor
' Note: The DSN referenced below must be configured to
' use Microsoft Windows NT Authentication Mode to
' authorize user access to the Microsoft SQL Server.
Set conMain = wrkMain.OpenConnection("Publishers", _
dbDriverNoPrompt, False, _
"ODBC;DATABASE=pubs;DSN=Publishers")
' The following locking argument is required for
' batch updating. It is also required that a table
' with a primary key is used.
Set rstTemp = conMain.OpenRecordset( _
"SELECT * FROM roysched", dbOpenDynaset, 0, _
dbOptimisticBatch)
With rstTemp
' Modify data in local recordset.
Do While Not .EOF
.Edit
If !royalty <= 20 Then
!royalty = !royalty - 4
Else
!royalty = !royalty + 2
End If
.Update
.MoveNext
Loop
' Attempt a batch update.
.Update dbUpdateBatch
' If there are collisions, give the user the option
' of forcing the changes or resolving them
' individually.
If .BatchCollisionCount > 0 Then
strPrompt = "There are collisions. " & vbCr & _
"Do you want the program to force " & _
vbCr & "an update using the local data?"
If MsgBox(strPrompt, vbYesNo) = vbYes Then _
.Update dbUpdateBatch, True
End If
.Close
End With
conMain.Close
wrkMain.Close
End Sub
Este exemplo usa o método AddNew para criar um novo registro com o nome especificado. A função AddName é necessária para executar esse procedimento.
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