Objekthierarchie
In
Visual Basic finden sich
eine Reihe von Klassen,
mit deren Hilfe man auf
Datenbanken zugreifen
kann. Zum einen wäre da
die Klasse DATABASE.
In einer Instanz eines
Datenbankobjekts
befinden sich eine Reihe
von Unterobjekte. Diese
Unterobjekte sind zum
größten Teil
Auflistungen, auf deren
Elemente man im
einzelnen zugreifen
kann. Die folgenden
Auflistungen sind für
uns relevant:
TableDefs
|
QueryDefs
|
Relations
|
Recordsets
|
Tabellen
definitionen
|
Abfrage
definitionen
|
Relationen |
Datensatz
mengen
|
Und auch alle geöffneten
Datenbanken sind in
einer Auflistung
DATABASES
enthalten, die wiederum
in einer Auflistung
WORKSPACES
(Arbeitsbereiche)
enthalten ist. Wir
werden im Folgenden aber
vorerst nur eine
Datebank und einen
Arbeitsbereich
verwenden.
Wir werden zum einfachen
Zugriff auf Tabellen
oder Abfragen Recordsets
verwenden. Mit Hilfe
einer solchen
Datensatzmenge kann man
durch die Tabelle oder
Abfrage navigieren,
Datensätze hinzufügen,
Datensätze verändern,
etc.
Ein solches Recordset
besitzt dann eine
Auflistung FIELDS.
Wie kann man nun auf
Auflistungen zugreifen?
Verwendung von
Auflistungen
Hat man eine Auflistung
C (im Englischen wird
auch der Begriff
Container benutzt), so
gibt es die Eigenschaft
COUNT, welche
die Anzahl der Objekte
in dieser Aufistung
enthält. Sie ist vom Typ
LONG INTEGER.
Man kann nun indiziert
auf die einzelnen
Objekte mit C(i)
zugreifen, wobei i bei
Null anfängt, also
zwischen Null Und
COUNT - 1 liegt.
Hat ein einzelnes Objekt
einen Namen, so kann man
auch über C("name")
darauf zugreifen.
Beispiel: Indizierter
Zugriff auf eine
Auflistung
Dieses Beispiel gibt
alle Tabellennamen in
der Datenbank "test.mdb"
mit Hilfe einer
MessageBox aus.
DIM db AS DATABASE
DIM i AS LONG
SET db = OPENDATABASE("test.mdb")
FOR i = 0 TO db.TABLEDEFS.COUNT - 1
MsgBox db.TABLEDEFS(i).Name
NEXT i
db.Close
Mit der SET-Anweisung
wird das Datenbankobjekt
zugewiesen, in unserem
Beispiel öffnen wir eine
bestehende Datenbank.
(Hier könnte man mit
Hilfe von
CREATEDATABASE auch
eine neue Datenbank
erstellen.) Dann gehen
wir schrittweise die
Tabellendefinitionen
durch und geben für jede
Tabelle den Namen aus.
Beispiel: Zugriff
über Namen auf eine
Auflistung
Dieses Beispiel gibt die
Anzahl der Felder in der
Tabelle "tabelle1"
zurück.
DIM db AS DATABASE
SET db = OPENDATABASE("test.mdb")
MsgBox Str$(db.TABLEDEFS("tabelle1").FIELDS.COUNT)
db.Close
Zugriff auf bestehende
Tabellen
Zuerst müssen wir die
Datenbank öffnen. Dies
geschieht wie im vorigen
Beispiel mit
OPENDATABASE.
SET Datenbankobjekt = workspace.OpenDatabase
(dbname[, exclusive[, read-only[, source]]])
Für uns ist erst nur der
Datenbankname dbname
relevant. Das Objekt
workspace kann
weggelassen werden, dann
wird die Datenbank im
aktuellen Arbeitsbereich
und nicht etwa in einem
anderen geöffnet.
Dann öffnen wir ein
Recordset-Objekt mit dem
Befehl OPENRECORDSET.
SET variable = Datenbank.OpenRecordset(quelle[, typ[, optionen]])
Auch hier ist vorerst
nur der Parameter quelle
relevant, der den
Tabellen- oder
Abfragenname angibt.
Nun kann man mit dem
Recordset-Objekt
beispielsweise durch die
Tabelle navigieren. Dies
geschieht mit den
folgenden Methoden:
MoveFirst
|
Gehe zu erstem
Datensatz
|
MoveNext
|
Gehe zu nächsten
Datensatz
|
MovePrevious
|
Gehe zu
vorherigen
Datensatz
|
MoveLast
|
Gehe zu letztem
Datensatz
|
BOF |
Begin of File
(ist bereits der
erste Datensatz
erreicht?)
|
EOF |
End of File (ist
bereits der
letzte Datensatz
erreicht?)
|
Der Zugriff auf einzelne
Felder kann durch die
Auflistung FIELDS
geschehen, aber auch
schnell durch die
folgende Abkürzung,
wobei bei Feldnamen mit
Sonderzeichen(z.B.
Leerzeichen) eckige
Klammern [] um den
Feldnamen angegeben
werden müssen:
Recordset!Feldname
bzw. Recordset![Feldname]
Beispiel: Navigieren
in einem Recordset
Das nun folgende
Beispiel gibt für jeden
Datensatz in der Tabelle
"tabelle1" der Datenbank
"test.mdb" die Felder
"Feld1" und "Feld mit
Blanks" in jeweils einer
MessageBox aus.
Zuerst wird eine
Datenbank und einen
Recordset geöffnet, dann
zum ersten Datensatz
gegangen. Solange nun
nicht das Dateiende
erreicht ist, werden die
Informationen ausgegeben
und zum nächsten
gegangen.
DIM db AS DATABASE, rs AS RECORDSET
DIM i AS LONG
SET db = OPENDATABASE("test.mdb")
SET rs = db.OpenRecordset("tabelle1")
rs.MoveFirst
WHILE NOT rs.EOF
MsgBox rs!Feld1
MsgBox rs![Feld mit Blanks]
rs.MOVENEXT
WEND
db.CLOSE
Das Hinzufügen von neuen
Datensätzen geschieht
durch ein ADDNEW,
das verändern der
Feldinhalte und einen
nachfolgenden UPDATE.
Beispiel: Anfügen von
Datensätzen
DIM db AS DATABASE, rs AS RECORDSET
DIM i AS LONG
SET db = OPENDATABASE("test.mdb")
SET rs = db.OpenRecordset("tabelle1")
rs.AddNew
rs!Feld1 = "TEST"
rs![Feld mit Blank] = "TEST"
rs.UPDATE
db.CLOSE
Das Ändern von
bestehenden Datensätzen
geschieht durch ein
EDIT, das verändern
der Feldinhalte und
einen nachfolgendem
UPDATE.
Beispiel: Ändern von
Datensätzen
DIM db AS DATABASE, rs AS RECORDSET
DIM i AS LONG
SET db = OPENDATABASE("test.mdb")
SET rs = db.OpenRecordset("tabelle1")
rs.MoveFirst
rs.EDIT
rs!Feld1 = "TEST"
rs![Feld mit Blank] = "TEST"
rs.UPDATE
db.CLOSE
|