Haben Sie sich auch schon öfters gefragt: "Wie lassen sich schnell und einfach Datenfelder bestimmter oder aller Datensätze einer Access-Datenbank automatisiert aktualisieren?" Wenn man es anders nicht weiss, dann durchläuft man die Datenbank vom ersten bis zum letzten Datensatz, prüft, ob der aktuelle Datensatz für die Aktualisierung herangezogen werden muss - und wenn ja, dann führt man die Datensatz-Änderung durch. Das ganze sieht dann so aus: Dim Db As Database Dim Rs As Recordset ' Datenbank öffnen Set Db = OpenDatabase("KUNDEN.MDB", False, False) ' Datenbank-Tabelle öffnen Set Rs = Db.OpenRecordset("Kunden") ' alle Datensätze druchlaufen With Rs If .RecordCount > 0 Then .MoveFirst Do Until .Eof ' Prüfen, ob der Datensatz aktualisiert ' werden muss If Rs("EMail_Info") = False Then If Not IsNull(Rs("EMail")) Then If Rs("EMail") <> "" Then Rs.Edit Rs("EMail_Info") = True Rs.Update End If End If End If .MoveNext Loop End If End With ' Datenbank schliessen Rs.Close Db.Close Set Db = Nothing Welche Aktion wird hier nun ausgeführt? "Ah... Bedingungen" - die lassen sich doch auch bestimmt duch eine SQL-Anweisung ausdrücken. Genau!. Also setzen wir die Bedingung zunächst in eine korrekte SQL-Syntax um: SELECT EMail_Info FROM Kunden WHERE _ (EMail_Info = False) AND _ NOT (EMail Is Null) AND (EMail <> "") Demnach öffnen wir die Kundentabelle (das Recordset) unter Einbeziehung obiger SQL-Abfrage. Somit fällt wenigstens erst einmal die aufwendige manuelle Prüfung der einzelnen Datensätze weg: Dim Db As Database Dim Rs As Recordset Dim SQL As String ' Datenbank öffnen Set Db = OpenDatabase("KUNDEN.MDB", False, False) ' Datenbank-Tabelle öffnen SQL = "SELECT EMail_Info FROM Kunden WHERE " & _ "(EMail_Info = False) AND " & _ "NOT (EMail Is Null) AND (EMail <> "")" Set Rs = Db.OpenRecordset(SQL) ' Datensätze druchlaufen und aktualisieren With Rs If .RecordCount > 0 Then .MoveFirst Do Until .Eof Rs.Edit Rs("EMail_Info") = True Rs.Update .MoveNext Loop End If End With ' Datenbank schliessen Rs.Close Db.Close Set Db = Nothing Das ganze sieht ja jetzt schon viel besser aus - und vor allen Dingen ist der Code auch viel kürzer geworden. Das Durchführen der Datensatz-Aktualisierungen erfolgt auch wesentlich schneller! Lässt sich dieser Code aber vielleicht nicht noch weiter optimieren? JA - und jetzt kommt das QUERY-Objekt ins Spiel
Unter Einsatz des QUERY-Objekts sieht der Code dann so aus: Dim Db As Database Dim QUERY As QueryDef Dim SQL As String ' Datenbank öffnen Set Db = OpenDatabase("KUNDEN.MDB", False, False) ' QUERY-Abfrage und Aktion definieren SQL = "UPDATE Kunden SET EMail_Info = True WHERE " & _ "(EMail_Info = False) AND " & _ "NOT (EMail Is Null) AND (EMail <> "")" Set QUERY = Db.CreateQueryDef("", SQL) QUERY.Execute QUERY.Close Set QUERY = Nothing ' Datenbank schliessen Db.Close Set Db = Nothing Wenn man den aktuellen Aktualisierungs-Code mit der ersten hier gezeigten Variante vergleicht, muss man doch feststellen, dass sich der Einsatz eines QUERY-Objekts wirklich sehr oft lohnt! Dieser Tipp wurde bereits 31.776 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevZIP40 Pro DLL Zippen und Unzippen wie die Profis! Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 Access-Tools Vol.1 Über 400 MByte Inhalt Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |