betrifft MS Access |
Problembeschreibung:
Manchmal muss innerhalb eines Prozessablaufs bekannt sein, ob eine Tabelle bereits existiert oder ob diese z. B. erst angelegt werden muss.
Lösungsidee
Hier bietet sich eine Funktion an, die prüft, ob die Tabelle existiert und die entsprechend der Existenz den Rückgabewert setzt.
Es gibt mehrere Alternativen. Während die erste Alternative die Systemtabelle "MSysObjects" abfragt, in der alle Access-Objekte wie Tabellen, Abfragen, Formulare, etc. aufgelistet sind, benutzt die zweite Alternative das TableDef-Objekt von Access.
Programmcode für Alternative 1
'Funktion zum Testen der Existenz einer Tabelle
Function Existiert_Tabelle(ByVal Tabelle As String) As Boolean
' Überpfüft, ob eine Tabelle existiert und gibt TRUE=existiert oder FALSE=existiert nicht zurück
' Es wird die Systemtabelle "MSysObjects"
' Es muss der Verweis auf DAO 3.6 gesetzt sein
Dim db As Database
Dim rs As DAO.Recordset
Existiert_Tabelle = False
'Datenbankobjekt ermitteln
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT Name FROM MSysObjects WHERE Flags=0 AND Type=1 AND Name='" & Tabelle & "'")
'Wenn die Abfrage ein Ergebnis liefert, existiert die Tabelle
If rs.RecordCount > 0 Then Existiert_Tabelle = True
rs.Close
'Speicher freigeben
Set db = Nothing
End Function
Programmcode für Alternative 2
'Funktion zum Testen der Existenz einer Tabelle
Function Existiert_Tabelle(ByVal Tabellename As String) As Boolean
' Überpfüft, ob eine Tabelle existiert und gibt TRUE=existiert oder FALSE=existiert nicht zurück
' Es wird das TableDef-Objekt verwendet
Dim db As Database
Dim Tabelle As TableDef
Existiert_Tabelle = False
'Datenbankobjekt ermitteln
Set db = CurrentDb
For Each Tabelle in db.TableDefs
'Jedes TableDef-Objekt prüfen, ob der Name gleich dem gesuchten Tabellennamen entspricht
If StrComp(Tabelle.Name, Tabellenname) = 0 Then
Existiert_Tabelle = True
Exit For
End If
Next Tabelle
'Speicher freigeben
Set db = Nothing
End Function