Freigeben über


Ausführen von Massenänderungen an einem DAO-Recordset

Nachdem Sie ein Recordset-Objekt vom Tabellen- oder Dynaset-Typ erstellt haben, können Sie datensätze ändern, löschen oder hinzufügen. Es ist nicht möglich, Datensätze für ein Recordset-Objekt zu ändern, löschen oder hinzuzufügen, wenn das Objekt ein Momentaufnahme- oder Vorwärtsrecordset ist.

Viele der Änderungen, die Sie andernfalls in einer Schleife ausführen können, können mit einer Aktualisierungs- oder Löschabfrage mithilfe von SQL effizienter ausgeführt werden. Im folgenden Beispiel wird ein QueryDef-Objekt erstellt, um die Employees-Tabelle zu aktualisieren, und führt dann die Abfrage aus.

Dim dbsNorthwind As DAO.Database 
Dim qdfChangeTitles As DAO.QueryDef 
 
   Set dbsNorthwind = CurrentDb 
   Set qdfChangeTitles = dbsNorthwind.CreateQueryDef("") 
 
   qdfChangeTitles.SQL = "UPDATE Employees SET Title = " & _ 
                         "'Account Executive' WHERE Title = " & _ 
                         "'Sales Representative'" 
 
   ' Invoke query. 
   qdfChangeTitles.Execute dbFailOnError 

Sie können die gesamte SQL-Zeichenfolge in diesem Beispiel durch eine gespeicherte Parameterabfrage ersetzen. In diesem Fall würde die Prozedur den Benutzer zur Eingabe von Parameterwerten auffordern. Das folgende Beispiel zeigt, wie das vorherige Beispiel als gespeicherte Parameterabfrage umgeschrieben werden kann.

Dim dbsNorthwind As DAO.Database 
Dim qdfChangeTitles As DAO.QueryDef 
Dim strSQLUpdate As String 
Dim strOld As String 
Dim strNew As String 
 
   Set dbsNorthwind = CurrentDb 
 
   strSQLUpdate = "PARAMETERS [Old Title] Text, [New Title] Text; " & _ 
                  "UPDATE Employees SET Title = [New Title] WHERE " & _ 
                  "Title = [Old Title]" 
 
   ' Create the unstored QueryDef object. 
   Set qdfChangeTitles = dbsNorthwind.CreateQueryDef("", strSQLUpdate) 
 
   ' Prompt for old title. 
   strOld = InputBox("Enter old job title:") 
 
   ' Prompt for new title. 
   strNew = InputBox("Enter new job title:") 
 
   ' Set parameters. 
   qdfChangeTitles.Parameters("Old Title") = strOld 
   qdfChangeTitles.Parameters("New Title") = strNew 
 
   ' Invoke query. 
   qdfChangeTitles.Execute 

Hinweis

Eine Löschabfrage ist wesentlich effizienter als Code, der ein Recordset-Objekt durchläuft und jeweils nur einen Datensatz ändert oder löscht.

Support und Feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.