Bestimmte Tabellen löschen @ Access / VBA

Blaubmania

Erfahrenes Mitglied
Hiho,

also folgende Problematik:

Ich möchte gerne eine Funktion schreiben die nur bestimmt Tabellen löscht aus der Access DB. Es sollen nur die tabellen gelöscht werden die mit dem Wort "Fehler" beginnen.

Hab schon gefunden wie ich den "DROP TABLE" Befehl ausführen kann aber wie lässt es sich umsetzten das ich nicht konkret einen Namen sondern nur halt die bestimmten Tabellen löschen lasse. Bin für jede Idee, Hinweis, Tipp dankbar.
 
Hi!

Ich denke mal das müsste so etwa hinhauen:

Code:
Dim Datenbank as Database
Set Datenbank=Currentdb 'oder Open-Methode

for i=0 to Datenbank.TableDefs.Count-1
  if(Left(Datenbank.TableDefs(i).name,6)="Fehler") then

    Datenbank.TableDefs.Delete Datenbank.TableDefs(i).name

  end if
next i

bin mir aber nicht sicher ob i bei 0 oder 1 starten und dem nach bis..count oder ..count-1 laufen muss....
 
Zuletzt bearbeitet:
Hm also das mit dem Count haut irgendwie nicht hin hab mal, damit ich weis wie ich den Zähler machen muss die TableDefs.Count im Debug.Print ausgegeben und da zeigt er mir 34 an obwohl ich nur 26 Tabellen habe. Jemand ne Idee woran das liegen kann?!

hier noch bischen der Code steht nicht viel drinne ^^


Visual Basic:
Function DelTabFehler()

Dim db As Database
Set db = CurrentDb

Debug.Print db.TableDefs.count

End Function
 
Okey hab mir via Debug Print die Tabellennamen ausgeben lassen und da tauchen diese Tabellen mit auf wahrscheinlich vom Access selba welche die nicht sichtbar aufgeführt werden.

MSysAccessObjects
MSysAccessXML
MSysACEs
MSysIMEXColumns
MSysIMEXSpecs
MSysObjects
MSysQueries
MSysRelationships

Also danke für die Hilfe somit sollte der Rest eigentlich Problemlos klappen ach und übrigens i = 0 und count - 1 ;)

Eine kleine Verbesserung hab ich allerdings noch da er die Tabellen während der ausführung der Schleife löscht und somit die Anzahl der Tabellen nicht mehr stimmt, bzw. eine übersprungen wird da z.B. wenn Tabelle 7 gelöscht wird die 8 auf die 7 rückt und die 9 auf die 8 und der zähler einfach 1 hochzählt also auf die 8 und dann die vorgerückte überspringt.
Hab es dann so gelöst zum Ende

Visual Basic:
Function DelTabFehler()

Dim db As Database
Set db = CurrentDb
Dim j As Integer

j = 0

For i = 0 To db.TableDefs.count - 1
    If (Left(db.TableDefs(i - j).Name, 6) = "Fehler") Then
        db.TableDefs.Delete db.TableDefs(i - j).Name
        j = j + 1
    End If
Next i

End Function
 
Zuletzt bearbeitet:
Der Thread ist zwar schon alt. Bei vielen Tabellen sind die oben aufgezeigten Lösungen einfach "Lahm" und der direkte zugriff auf die versteckten Tabellen ist auch nicht Optimal, da auch diese Veränderungen unterliegen.

Mein Vorschlag, anstatt For i eine For Each

Da erspart man Access die permanenten "Neupostionierungen"

Visual Basic:
Dim TableD As DAO.TableDef

For Each TableD In CurrentDb.TableDefs
    'Debug.Print TableD.Name

    If Left(TableD.Name, 8) = "Admin - " Then
  
            Debug.Print TableD.Name
            CurrentDb.TableDefs.Delete TableD.Name
          
    End If
  

Next
 
Zuletzt bearbeitet von einem Moderator:
Zurück