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](images/sfw_copyright.gif) |
|