Kapitel 6: DAO-Programmierung
Test
Beide Varianten erlauben eine komfortable Suche. Allerdings bietet Variante 2 wesentlich mehr Möglich-
keiten, denn alle Varianten, die in Kapitel 8 (SQL) vorgestellt werden, können Sie hier ausprobieren.
Eine Datenbank analysieren
TreeView-ActiveX-Steuerelement; Fields-, TableDefs-, QueryDefs-, Documents-, Containers-Auflistung;
Document-Objekt; Select Case-Anweisung;
Im Wesentlichen genügen für die Analyse unbekannter Access-Datenbanken die folgenden Objekte bzw.
Auflistungen (Collections):
■ TableDefs-Auflistung
■ QueryDefs-Auflistung
■ Documents-Auflistung
Während die ersten beiden für spezielle Datenbank-Objekte (Tabellen, Abfragen) zuständig sind, können
Sie über die Documents-Auflistung die Verwaltungsstruktur der gesamten Datenbank untersuchen (Be-
sitzer von Objekten, Formularen, Modulen etc.).
Oberfläche
Wie die folgende Laufzeitabbildung zeigt, brauchen Sie im Wesentlichen nur ein Microsoft TreeView
Control, welches Sie durch Klick auf das Symbol »ActiveX-Steuerelement einfügen« erreichen.
Abbildung 6.20 Laufzeitansicht
348
Quelltext 1 (Tabellendefinitionen)
Der komplette Code wird in das
Load
-Ereignis des Formulars eingebaut:
Private Sub Form_Load()
Dim db As Database
Dim nodX As Node
Dim A As Long, B As Long, C As Long, D As Long
Dim zw As String, i As Long, i1 As Integer, s As String
Dim conTest As Container
Dim docTest As Document
TreeView1.Nodes.Clear
In unserem Beispiel analysieren wir die aktuelle Datenbank, man kann durch Ersetzen der folgenden Anwei-
sung natürlich auch eine externe Datenbank analysieren (siehe Bemerkungen).
Set db = CurrentDb
Die nachfolgende Sequenz erzeugt die Baumstruktur:
Set nodX = TreeView1.Nodes.Add(, , , db.Name) ' Root festlegen
Set nodX = TreeView1.Nodes.Add(1, tvwChild, , "TABELLEN")
A = nodX.Index
For i = 0 To db.TableDefs.Count – 1 ' Schleife für alle vorhandenen Tabellen
zw = db.TableDefs(i).Name ' Tabellenname bestimmen
If (db.TableDefs(i).Attributes And &H80000002) = 0 Then ' Systemtabellen werden herausgefiltert
Set nodX = TreeView1.Nodes.Add(A, tvwChild, , zw)
B = nodX.Index
If db.TableDefs(zw).Indexes.Count > 0 Then ' Indizes
Set nodX = TreeView1.Nodes.Add(B, tvwChild, , "INDIZES")
C = nodX.Index
For i1 = 0 To db.TableDefs(zw).Indexes.Count - 1
If db.TableDefs(zw).Indexes(i1).Name = "PrimaryKey" Then
Set nodX = TreeView1.Nodes.Add(C, tvwChild, , _
db.TableDefs(zw).Indexes(i1).Name & " (" & _
db.TableDefs(zw).Indexes(i1).Fields & ")")
Else
Set nodX = TreeView1.Nodes.Add(C, tvwChild, , _
db.TableDefs(zw).Indexes(i1).Name & " (" & _
db.TableDefs(zw).Indexes(i1).Fields & ")")
End If
Next i1
End If
If db.TableDefs(zw).Fields.Count > 0 Then ' Tabellenfelder anzeigen
Set nodX = TreeView1.Nodes.Add(B, tvwChild, , "FELDER")
C = nodX.Index
For i1 = 0 To db.TableDefs(zw).Fields.Count - 1
s = Choose(db.TableDefs(zw).Fields(i1).Type, "Boolean", _
"Byte", "Integer", "Long", "Currency", "Single", _
"Double", "Date", "", "Text", "Binär", "Memo", "", "", "")
Set nodX = TreeView1.Nodes.Add(C, tvwChild, ,db.TableDefs(zw).Fields(i1).Name & _
" (" & s & ")")
Next i1
349
Praxisbeispiele
Kapitel 6: DAO-Programmierung
End If
End If
Next i
Wie schon erwähnt, könnten wir über die Eigenschaft
Attributes
auch zwischen lokalen und eingebundenen
Tabellen unterscheiden. Weiterhin lassen sich auf diesem Weg die Systemtabellen ein- bzw. ausblenden.
Quelltext 2 (Abfragen)
Set nodX = TreeView1.Nodes.Add(1, tvwChild, , "ABFRAGEN")
A = nodX.Index
For i = 0 To db.QueryDefs.Count - 1
' Queryname bestimmen:
zw = db.QueryDefs(i).Name
Set nodX = TreeView1.Nodes.Add(A, tvwChild, , zw)
Next i
Für Informationen über die Verwaltung der Datenbank bietet sich die
Containers
-Auflistung an:
Set nodX = TreeView1.Nodes.Add(1, tvwChild, , "CONTAINER")
A = nodX.Index
For i = 0 To db.Containers.Count - 1
Set conTest = db.Containers(i)
zw = conTest.Name
Set nodX = TreeView1.Nodes.Add(A, tvwChild, , zw)
B = nodX.Index
For i1 = 0 To conTest.Documents.Count - 1
Set nodX = TreeView1.Nodes.Add(B, tvwChild, , conTest.Documents(i1).Name)
C = nodX.Index
Set nodX = TreeView1.Nodes.Add(C, tvwChild, , conTest.Documents(i1).Owner)
Set nodX = TreeView1.Nodes.Add(C, tvwChild, , CStr(conTest.Documents(i1).DateCreated))
Next i1
Next i
End Sub
Test
Nach dem Programmstart doppelklicken Sie zunächst auf die Pfadangabe, die oben im TreeView-Steuer-
element erscheint. Anschließend können Sie sich durch die angezeigte Baumstruktur bewegen und den
Aufbau der Datenbank erkunden (siehe obige Laufzeitabbildung).
Bemerkungen
■ Soll eine externe Datenbank ausgewählt und analysiert werden, so können Sie dazu einen Dateidialog
einfügen, siehe Kapitel 11.
■ Die Analyse größerer Datenbanken kann durchaus etwas Zeit in Anspruch nehmen!
350
Get Microsoft Office Access 2007-Programmierung - Das Handbuch now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.