PDA

Vollständige Version anzeigen : Tabellennamen Auflistung


computercomponents.at
04.07.2001, 10:47
Wer kann mir mitteilen, wie ich eine Auflistung aller Tabellen der aktuellen Datenbank in ein Kombinationsfeld bringe!

Benötige dies um ein Abfrage-Tool zu erstellen.

hermi
04.07.2001, 11:49
Hallo,

die Tabellen der aktuellen mdb kannst du dir mit folgendem Code anzeigen lassen:

Public Sub ZeigeAccessTab(ByVal dbFile As String)

'dbFile: vollständiger Dateiname inkl.
' Pfadangabe zur MDB-Datei

Dim Db As Database
Dim TabDef As TableDef

Set Db = OpenDatabase(dbFile)
With Db
For Each TabDef In .TableDefs
If UCase$(Left$(TabDef.Name, 4)) <> "MSYS" Then
List1.AddItem TabDef.Name
End If
Next
End With
Db.Close
Set Db = Nothing
End Sub

A.S.
04.07.2001, 12:03
Setzte die RowSource (Datensatzherkunft) des Kombinationsfeldes auf

SELECT MSysObjects.Name, MSysObjects.Type FROM MSysObjects WHERE (((MSysObjects.Type)=1 Or (MSysObjects.Type)=6) AND ((Left([Name],4))<>"MSys"));

Die Select-Abfrage liefert Dir zwei Spalten der System-Tabelle MSysObjects von Access zurück. Erste Spalte -> Name, zweite Spalte -> Typ. Die Bedingung selektiert alle Einträge der Tabelle die den Typen 1 oder 6 haben und deren Namen nicht mit "MSys" beginnen (Systemobjekte). Typ 1 sind direkte Tabellen der DB, Typ 6 sind mit der DB verknüpfte Tabellen.

------------------
HTH

Arno

Nockenwelle
04.07.2001, 20:12
Hallo,

Schau dir das hier von Manuela mal an. Elementauflistung (http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=41232)

Sieht komplizierter aus als es ist.
Die in der zweiten Function verwendete Variable snames kannst du als recordsource verwenden.

Ich bastel selbst öfter mit der Funktion rum, da sie nicht auf Tabellen beschränkt ist.

Cu

A.S.
05.07.2001, 03:31
Hallo Nockenwelle,

mit der Select-Anweisung, welche ich oben geschrieben habe, kannst Du ebenfalls auf alle Access-Objekte zugreifen .... und mußt nicht einmal die entsprechenden Objektauflistungen und Container abklappern. Benötigst also keinerlei zusätzliches Coding.

Vergleiche einmal folgende Funktion:

Public Const tpTblNrm As Integer = 1 ' normale Tabellen
Public Const tpTblInB As Integer = 6 ' eingebundene Tabelle
Public Const tpTable As Integer = 99 ' in beiden Tabellentypen suchen
Public Const tpForm As Integer = -32768 ' Formulare
Public Const tpMacro As Integer = -32766 ' Makros
Public Const tpModul As Integer = -32761 ' Module
Public Const tpReport As Integer = -32764 ' Berichte


Public Function AccObjectExists(strName As String, intType As Integer) As Boolean
'Anhand der Systemtabelle MSysObjects prüfen ob das gesuchte Objekt unter
'Berücksichtigung des Typs vorhanden ist
AccObjectExists = IsNull(DLookup("[Name]", "MSysObjects", "[Name] = '" & Trim(strName) & _
"' AND (Type = " & IIf(intType = tpTable, tpTblNrm & " OR Type = " & _
tpTblInB, intType) & ")")) = False
End Function

Bis auf tpTable, welche nur zur internen Steuerung des DlookUps gebraucht wird, wenn sowohl interne als auch externe Tabellen gesucht werden sollen, entsprechen alle Konstanten den jeweiligen Access-Objekten. Das einzigste Objekt, welches ich mir noch nicht genauer angesehen habe, sind die Relations. Da dürfte wiederrum die Funktion von Manuela interessant werden.

------------------
HTH

Arno