betrifft MS Access |
Problembeschreibung:
Es sollen mehrere Tabellen gleichzeitig gelöscht werden, die einem bestimmten Muster in der Namensgebung entsprechen.
Lösungsidee
Eine Routine sucht nach vorgegebenen Mustern in den Tabellennamen und löscht diese Tabellen bei Übereinstimmung. Dabei wird die Vergleichsfunktionalität der Datenbank benutzt (LIKE). Diese wird auf die Systemtabelle MSysObjects angewendet, in der alle Tabellen enthalten sind,
Programmcode
'Code zum Löschen von Tabellen, deren Namen einem bestimmten Muster entsprechen
Dim SUCHMUSTER As Variant
SUCHMUSTER = Array("test_*", "*bla*") 'alles was mit test_ beginnt oder alles was bla enthält
Dim db As Database
Dim rs As DAO.Recordset
Dim SQL_Befehl As String
Dim Bedingung As String
Dim Muster As Variant
'Datenbankobjekt ermitteln
Set db = CurrentDb
'Bedingung für Abfrage zusammenstellen
Bedingung = ""
For Each Muster In SUCHMUSTER
'Jedes Suchmuster einarbeiten
If Len(Bedingung) > 0 Then Bedingung = Bedingung & " OR "
Bedingung = Bedingung & "Name LIKE '" & Muster & "'"
Next Muster
'SQL-Befehl zusammenbasteln
SQL_Befehl = "SELECT Name FROM MSysObjects WHERE Flags=0 AND Type=1 AND (" & Bedingung & ")"
'Befehl abschicken
Set rs = db.OpenRecordset(SQL_Befehl)
While Not rs.EOF
'jede Tabelle, die dem Suchmuster entspricht löschen
db.TableDefs.Delete rs.Fields("Name")
'nächste Tabelle
rs.MoveNext
Wend
rs.Close
'Tabledefs aktualisieren
db.TableDefs.Refresh
'Speicher freigeben
Set db = Nothing