Makrothek
MS Access 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