Freigeben über


Recordset.Update-Methode (DAO)

Gilt für: Access 2013, Office 2013

Syntax

Ausdruck . Update(UpdateType, Force)

Ausdruck Eine Variable, die ein Recordset-Objekt darstellt.

Parameter

Name

Erforderlich/optional

Datentyp

Beschreibung

UpdateType

Optional

Long

Eine UpdateTypeEnum -Konstante, die den Aktualisierungstyp so angibt, wie er in den Einstellungen angegeben ist (nur ODBCDirect-Arbeitsbereiche).

Kraft

Optional

Boolean

Ein Boolean-Wert, der angibt, ob die Änderungen in der Datenbank erzwungen werden sollen, unabhängig davon, ob die zugrunde liegenden Daten seit dem AddNew-, Delete- oder Edit-Aufruf von einem anderen Benutzer geändert wurden. Ist True festgelegt, werden die Änderungen erzwungen, und die von anderen Benutzern vorgenommenen Änderungen werden einfach überschrieben. Bei False (Standard) verursachen Änderungen, die andere Benutzer vorgenommen haben, während die Aktualisierung ausstand, ein Fehlschlagen der Aktualisierung für die Änderungen, bei denen Konflikte bestehen. Es tritt kein Fehler auf, aber die Eigenschaften BatchCollisionCount und BatchCollisions geben die Anzahl der Konflikte bzw. die von Konflikten betroffenen Zeilen an (nur ODBCDirect-Arbeitsbereiche).

Bemerkungen

Verwenden Sie Update, um den aktuellen Datensatz und alle Änderungen, die Sie daran vorgenommen haben, zu speichern.

Wichtig

Änderungen an dem aktuellen Datensatz gehen in folgenden Fällen verloren:

  • Sie verwenden die Edit- oder AddNew-Methode und wechseln dann zu einem anderen Datensatz, ohne zuvor Update zu verwenden.
  • Sie verwenden Edit oder AddNew und dann erneut Edit oder AddNew, ohne zuvor Update zu verwenden.
  • Sie legen die Bookmark -Eigenschaft auf einen anderen Datensatz fest.
  • Sie schließen das Recordset, ohne zuvor Update zu verwenden.
  • Sie brechen den Edit-Vorgang ab, indem Sie CancelUpdate verwenden.

Wenn Sie einen Datensatz bearbeiten möchten, verwenden Sie die Edit-Methode, um den Inhalt des aktuellen Datensatzes in den Kopierpuffer zu kopieren. Ohne vorheriges Anwenden von Edit tritt ein Fehler auf, sobald Sie Update verwenden oder versuchen, den Wert eines Felds zu ändern.

In einem ODBCDirect-Arbeitsbereich können Sie Batchaktualisierungen vornehmen, wenn die Cursor-Bibliothek dies unterstützt und das Recordset mit der Option der optimistischen Batchsperre geöffnet wurde.

Ist in einem Microsoft Access-Arbeitsbereich die LockEdits-Eigenschafteneinstellung eines Recordset-Objekts in einer Mehrbenutzerumgebung auf True festgelegt (pessimistisch gesperrt), bleibt der Datensatz ab dem Moment gesperrt, in dem Edit verwendet wird, bis zu dem Zeitpunkt, zu dem die Update-Methode ausgeführt oder die Bearbeitung abgebrochen wird. Wenn die LockEdits-Eigenschafteneinstellung auf False festgelegt ist (optimistisch gesperrt), wird der Datensatz gesperrt und mit dem vorab bearbeiteten Datensatz verglichen, bevor er in der Datenbank aktualisiert wird.

Wurde der Datensatz nach dem Verwenden der Edit-Methode geändert, schlägt der Update-Vorgang fehl. Die mit einem Microsoft Access-Datenbankmodul verbundenen ODBC- und installierbaren ISAM-Datenbanken verwenden immer optimistische Sperren. Verwenden Sie erneut die Update-Methode, um den Update-Vorgang mit Ihren Änderungen fortzusetzen. Um den Datensatz wiederherzustellen, wie ihn der andere Benutzer geändert hat, aktualisieren Sie den aktuellen Datensatz mithilfe von Move 0.

Hinweis

[!HINWEIS] Es muss ein eindeutiger Index für den Datensatz in der zugrunde liegenden Datenquelle vorhanden sein, damit ein Datensatz hinzugefügt, bearbeitet oder gelöscht werden kann. Andernfalls tritt ein "Berechtigung verweigert"-Fehler im AddNew-, Delete- oder Edit-Methodenaufruf in einem Microsoft Access-Arbeitsbereich auf, oder ein "Ungültiges Argument"-Fehler tritt beim Update-Aufruf in einem ODBCDirect-Arbeitsbereich auf.

Beispiel

Dieses Beispiel demonstriert die Update-Methode zusammen mit der Edit-Methode.

    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 

Dieses Beispiel demonstriert die Update -Methode zusammen mit der AddNew -Methode.

    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 

Dieses Beispiel verwendet die BatchCollisionCount -Eigenschaft und die Update -Methode, um die Batchaktualisierung zu demonstrieren, wenn Konflikte durch Erzwingen der Batchaktualisierung gelöst werden.

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 
 

Dieses Beispiel verwendet die AddNew -Methode, um einen neuen Datensatz mit dem angegebenen Namen zu erstellen. The AddName function is required for this procedure to run.

    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