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.