Kategorie: Datenbankzugriffe
Frage: Wie erhalte ich eine Auflistung aller Tabellen in einer Datenbank?
Die einfachste Variante ist die Abfrage der Systemtabellen der Datenbank. Unter Access muss der
User "Administrator" Lesezugriff auf die Tabelle "MSysObjects" haben. Dies können Sie in Access 2000
unter "Extras -> Sicherheit -> Benutzer- und Gruppenberechtigungen" einstellen.

[listtables.asp]
<%
' --- SQL-String für Access
ListSQL = "SELECT name AS tablename FROM MSysObjects WHERE [type] = 1 AND [flags] = 0"

' --- SQL-String für Microsoft SQL Server 7.0
' --- ListSQL = "SELECT name AS tablename FROM SysObjects WHERE [type] = 'U'"

' --- SQL-String für Oracle 7.x oder höher (alle Tabellen, auf die der User Zugriff hat)
' --- ListSQL = "SELECT table_name AS tablename FROM all_tables"

' --- SQL-String für Oracle 7.x oder höher (alle Tabellen, die dem User gehören)
' --- ListSQL = "SELECT table_name AS tablename FROM user_tables"

Set ListRS = Server.CreateObject("ADODB.Recordset")
    ListRS.Open ListSQL, objConn, 3, 3

        ' --- Ausgabe der Überschrift
        Response.Write "<b><u>Tabellen in DB</u></b><br>" & vbCrLf

        Do While Not ListRS.EOF

            ' --- Ausgabe des Tabellennamens
            Response.Write ListRS.Fields("tablename") & "<br>" & vbCrLf
            ListRS.MoveNext

        Loop

    ListRS.Close
Set ListRS = Nothing
%>

Alternativ kann man auch auf eine relativ unbekannte Methode des Connection-Objekts zurückgreifen.
Die OpenSchema-Methode. Mit Hilfe dieser Methode können Sie sehr viel über Ihre Datenbank erfahren.
So zum Beispiel auch, welche Tabellen in der Datenbank enthalten sind.

[listtables.asp]
<%
' --- Öffnen der Datenbankverbindung
Set objConn = Server.CreateObject("ADODB.Connection")
    objConn.Open "<DSN>", "<UID>", "<PWD>"

' --- Instantiieren des Recordsets für das Auslesen der Tabellen
' --- adSchemaTables = 20 (Konstante definiert in adovbs.inc)
Set objRS = objConn.OpenSchema(adSchemaTables)

    Response.Write "<b>Tabellenname</b><br>"
    Do Until objRS.EOF

        ' --- Da auch die Systemtabelle (objRS.Fields("TABLE_TYPE") = "SYSTEM_TABLE")
        ' --- zurückgegeben werden, wird eine Eingrenzung auf die Usertabellen implementiert
        If objRS.Fields("TABLE_TYPE") = "TABLE" THEN
            Response.Write objRS.Fields("TABLE_NAME") & "<br>" & vbCrLf
        End if

        objRS.MoveNext

    Loop

' --- Schliessen und terminieren des Recordets
    objRS.Close
Set objRS = Nothing

' --- Schliessen und terminieren der Datenbankverbindung
    objConn.Close
Set objConn = Nothing
%>
Copyright 2000 - 2024 by Stefan Falz Webconsulting