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 %> |