16 DAO und andere Objekte

Transcription

16 DAO und andere Objekte
16 DAO und andere Objekte
»A buon intenditore poche parole bastano. –
Dem Kenner reichen wenige Worte.« Wenn Sie
sich mit Objekten auskennen, kommen Sie im
Umgang mit Access schneller zum Ziel. Darum
jetzt dies Kapitel zum Thema.
16.1 Was ist ein Objekt?
VBA ist eine teilweise objektorientierte Programmiersprache. Ich
möchte Ihnen eine kurze Einführung in diese Programmiertechnik
geben und zunächst einmal klären, was hier unter Objekten verstanden wird. Bei der Arbeit mit Access haben Sie immer mit Objekten zu tun. Beispielsweise ist Ihr Programm selbst, jedes Formular und jedes Steuerelement ein Objekt.
16.1.1
Objekthierarchien
Man kann hier eine so genannte Objekthierarchie bilden. Das
oberste Objekt, welches alle anderen beinhaltet, ist das Programm
selbst. Im Programm können Formularobjekte enthalten sein. Und
jedes der Formulare, also der Formularobjekte, kann Steuerelemente enthalten, die selbst Objekte sind.
Ein Haus als Objekt vorstellen
Zum besseren Verständnis sollten Sie sich einmal ein Objekt aus
dem täglichen Leben vorstellen – nehmen wir das Objekt »Haus«.
In dem Haus gibt es drei Ferienappartements, die ihrerseits auch
wieder als Objekte betrachtet werden können. Diese Ferienappartement-Objekte enthalten weitere Objekte wie Zimmer, Fenster,
Lichtschalter usw. Viele Objekte eines Hauses, wie beispielsweise
Türen, gibt es an mehreren Stellen. Um vor lauter Objekten nicht
den Überblick zu verlieren, bietet es sich an, eine Liste aller Türen
zu führen. In der Programmierung werden solche Listen als Auflistung (engl. collection) bezeichnet.
228
Kapitel 16: DAO und andere Objekte
Über die Objekthierarchie ist es also möglich, gezielt ein einzelnes
Objekt auszuwählen – also z.B. die Tür zwischen Wohnzimmer
und Esszimmer im Appartement im Obergeschoss. Diese Tür hat
bestimmte Eigenschaften: Sie ist geöffnet oder geschlossen und
hat eine bestimmte Farbe und Größe. Nun gibt es Methoden, diese
Eigenschaften zu verändern: Sie können die Tür schließen oder
mit einer anderen Farbe anstreichen. Übertragen auf Access funktioniert das genauso.
16.1.2
Objekte in Access
Auch in Access gibt es Objekte, Eigenschaften und Methoden:
Steuerelemente und Formulare sind Objekte, die von verschiedenen Eigenschaften beschrieben werden und die mit Methoden
verändert werden können.
Im Laufe dieses Buches haben Sie schon viele Erfahrungen gesammelt im Aufrufen von Objekten und im Einsatz von Methoden
zum Ändern von Objekteigenschaften. Sie haben beispielsweise die
Titelzeile des Formulars frmAppartements mithilfe der Eigenschaft
Caption bestimmt, indem Sie
frmAdressen.Caption = gstrMotto
programmiert haben (wobei gstrMotto das Motto des Tages als
String enthält). Wie Sie hier sehen, werden die Eigenschaften und
Methoden eines Objekts durch einen Punkt mit dem Objektnamen
verbunden.
Bei der Arbeit mit Objekten werden Sie in der Form unterstützt,
dass sobald Sie einen Punkt hinter einen Objektnamen setzen,
sofort in einer Auswahlliste die zur Verfügung stehenden Eigenschaften und Methoden des Objekts gezeigt werden (vorausgesetzt,
die Option ELEMENTE AUTOMATISCH AUFLISTEN ist unter EXTRAS OPTIONEN auf dem Registerblatt EDITOR ausgewählt).
16.1.3
Der Objektkatalog
Im Visual Basic-Editor steht Ihnen ein Objektkatalog zur Verfügung. Hier finden Sie eine Übersicht über alle Objekte mit ihren
Eigenschaften und Methoden.
16.1 Was ist ein Objekt?
229
Den Objektkatalog können Sie über die gleichnamige Schaltfläche,
über ANSICHT OBJEKTKATALOG oder 因 aufrufen.
Bild 16.1:
Der Objektkatalog
Die in Access zur Verfügung stehenden Objekte sind in Bibliotheken aufgeteilt. Normalerweise sind <ALLE BIBLIOTHEKEN> angewählt.
Sie können die Liste aufklappen und gezielt einzelne Bibliotheken
anschauen. ACCESS ist die allgemeine Access-Programmbibliothek,
CASA MARIA steht für die aktuell geladene Datenbank und VBA ist
die allgemeine VBA-Bibliothek.
Im unteren Teil des Bildes ist hier als Beispiel im mittleren Fenster
das Objekt APPLICATION selektiert, rechts die Eigenschaft FORMS, die
selbst wieder ein Objekt oder genauer: eine Auflistung ist, in der
sich alle geöffneten Formulare als Objekt ansprechen lassen. Damit Ihnen nicht vor lauter Objekten in Objekten in Objekten der
Kopf schwirrt, noch einmal eine kurze Orientierung.
16.2 Wozu sind Objekte gut?
Sie können sich nicht vorstellen, wozu die ganzen Objekte gut sein
sollen? Dann betrachten Sie das Ganze doch einmal von der praktischen Seite her:
230
Kapitel 16: DAO und andere Objekte
Sie möchten das Textfeld TXTTEXT im Formular frmFormular
ändern? Mit Forms!frmFromular!txtText.value="Neuer Eintrag" greifen Sie darauf zu, d.h., Sie nutzen das FORMS-Objekt!
Sie möchten den Bericht rptBericht ausdrucken? Dazu geben
Sie die Zeile DoCmd.OpenReport "rptBericht" in Ihr Programm
ein. Damit nutzen Sie das DoCmd-Objekt!
16.3 Der With-Befehl
Ich möchte Ihnen nun das Befehlswort With beschreiben, das die
Arbeit mit Objekten vereinfachen, zumindest aber etwas Schreibarbeit ersparen kann.
Für das Formular frmObjektTest habe ich folgendes Programm
geschrieben, das beim Klick auf die Schaltfläche CMDTEXTFELDERÄNDERN ausgelöst wird:
Private Sub cmdTextfelderÄndern_Click()
txtEintrag1.BackColor = 65535
txtEintrag1.ForeColor = 8421440
txtEintrag1.FontBold = True
txtEintrag1.Value = "Casa Maria"
txtEintrag1.TextAlign = 2 ' Zentriert
End Sub
In jeder Zeile muss wieder der Name des Textfeldes erwähnt werden. Mit With geht es kürzer:
Private Sub cmdTextfelderÄndern_Click()
With txtEintrag1
.BackColor = 65535
.ForeColor = 8421440
.FontBold = True
.Value = "Casa Maria"
.TextAlign = 2 ' Zentriert
End With
End Sub
Wichtig ist, dass jede der Eigenschaften mit einem Punkt eingeleitet wird. So ist eindeutig, dass es sich um eine Objekteigenschaft
oder -methode handelt.
16.3 Der With-Befehl
231
16.4 Auflistungen
Eine Auflistung ist ein Spezialfall eines Feldes mit Objekten. Am
einfachsten kann ich das an einem Beispiel erläutern: Alle Steuerelemente eines Formulars gehören automatisch zu der Auflistung
Controls, die wiederum eine Eigenschaft des Formulars ist. Mit
MsgBox frmForm.Controls(0).Name
würde der Name des ersten Steuerelements des geöffneten Formulars frmForm in einer MessageBox ausgegeben werden. Sie
könnten aber auch durch
frmForm.Controls("txtEintrag1").Value = "Dies ist ein Text"
den Text des Textfelds mit dem Namen Eintrag1 setzen. Das geht
ebenso, nur kürzer, mit
frmForm.Controls!txtEintrag1.Value = "Dies ist ein Text"
Oder Sie schreiben für das gerade aktive Formular
Me.Controls("txtEintrag1").Value = "Dies ist ein Text"
Mehrere Textfelder unsichtbar machen
Hier ein kleiner Zaubertrick, wie Sie mehrere Textfelder eines
Formulars unsichtbar machen können. Zum Ausprobieren binden
Sie folgende For...Next-Schleife in die oben für das Formular
frmObjektTest erstellte Prozedur.
Dim strSpeicher As String
Dim intZähler As Integer
For intZähler = 1 To 3
' Feldname aus Text und Ziffer bilden
strSpeicher = "txtEintrag" & intZähler
Forms("frmObjektTest").Controls(strSpeicher).Visible _
= False
Next
Die Textfelder des Formulars frmObjektTest haben die Namen TXTTXTEINTRAG2 und TXTEINTRAG3. Deshalb lassen sie sich mit
der obigen For...Next-Schleife nacheinander unsichtbar machen.
EINTRAG1,
232
Kapitel 16: DAO und andere Objekte
16.5 Makroaktionen über DoCmd-Objekt
nutzen
Mithilfe des DoCmd-Objekts können Sie bis auf wenige Ausnahmen
alle Access-Aktionen ausführen, die sich mit Makros auslösen lassen. Um den Bericht rptAppartements in der Seitenansicht zu öffnen, schreiben Sie:
DoCmd.OpenReport "rptAppartements", acViewPreview
Wie gewohnt werden Sie im Visual Basic-Editor durch die Eingabehilfen unterstützt. Neben der Seitenansicht erhalten Sie zur Auswahl angeboten: ACVIEWNORMAL (Ausdruck), ACVIEWDESIGN (Entwurf). Außerdem stehen die Pivot-Ansichten zur Verfügung.
Bild 16.2:
Konstanten anzeigen
als Eingabeunterstützung
Eine Auflistung aller DoCmd-Methoden finden Sie im Objektkatalog.
Tippen Sie einfach DoCmd in das Suchfeld des Objektkatalogs und
starten Sie die Suche mit Klick auf das SUCHEN-Symbol.
Bild 16.3:
Elemente des DoCmdObjekts anzeigen
lassen
16.5 Makroaktionen über DoCmd-Objekt nutzen
233
Wenn Sie ein Element der Liste markieren, können Sie mit Klick
auf das Fragezeichen einen Hilfetext zur jeweiligen DoCmd-Methode
anzeigen lassen.
Manchmal gibt es Alternativen zu DoCmd
Zu einer Reihe von DoCmd-Methoden gibt es VBA-Befehle, die Sie
als Alternative einsetzen können. Achten Sie in den Hilfetexten auf
entsprechende Hinweise. So nutzen Sie z.B. statt DoCmd.GoToControl "txtAnreise" besser txtAnreise.SetFocus.
16.6 Datenbankzugriff mit DAO
Manchmal kann es praktisch sein, die Daten einer Datenbank
direkt zu ändern oder zu ergänzen.
16.6.1
Unterschiedliche Wege zu den Daten
Microsoft hat für den Zugriff auf die Daten einer Datenbank im
Laufe der Zeit mehrere Zugriffsprogrammmodule entwickelt. Die
beiden wichtigsten sind DAO und ADO.
DAO
DAO, Data Access Objects, ist eine Sammlung von Objekten, die
Methoden und Eigenschaften bereitstellen, um auf Access- und
andere Datenbanken zuzugreifen. DAO wurde für Access entwickelt, beim Zugriff auf andere Datenbanken kann es zu Einschränkungen kommen. Mit DAO können alle Möglichkeiten des
Access-Datenbankkerns, der so genannten Jet-Engine, genutzt
werden.
ADO
Seit Access 2000 liefert Microsoft die Datenbankzugriffsschnittstelle ADO, Active Data Objects. Ebenso wie DAO stellt ADO Ob-
234
Kapitel 16: DAO und andere Objekte
jekte, Methoden und Eigenschaften zum Zugriff auf Datenbanken
bereit, allerdings nicht mehr auf Access spezialisiert. ADO ist die
neuere und leistungsfähigere Zugriffsvariante, deren Verwendung
von Microsoft empfohlen wird.
DAO oder ADO?
Nun stellt sich die Frage: DAO oder ADO? Formulieren wir es einmal so: die Zukunft gehört (zumindest bis Microsoft etwas Neues
einfällt) ADO, aber wenn Sie nicht komplexe Programmsysteme
erstellen möchten, ist DAO für den Einstieg besser geeignet.
Einsatz von DAO ermöglichen
Sie können DAO nur verwenden, wenn Sie einen Verweis auf die
entsprechende Objektbibliothek aktiviert haben. Rufen Sie über
EXTRAS VERWEISE das Dialogfeld VERWEISE im VISUAL BASIC-EDITOR
auf und wählen Sie den Eintrag MICROSOFT DAO 3.6 OBJECT LIBRARY.
16.6.2
Recordset-Objekte
Bei dem Einsatz von DAO wird mit so genannten Recordsets gearbeitet.
Was ist ein Recordset? In einem Recordset-Objekt wird die Ergebnismenge eines Zugriffs auf Daten der Datenbank zurückgegeben.
Mithilfe der Methoden des Objekts kann die Sortierung der Daten
geändert werden, es kann nach bestimmten Werten gesucht und
Daten können geändert werden.
Ein Recordset kann man sich als eine Tabelle von Daten vorstellen, die mithilfe eines SQL-Befehls zusammengestellt wurden. Der
SQL-Befehl bestimmt die Spalten der Tabelle.
Ein Datensatzzeiger zeigt intern auf den aktuellen Datensatz. Sollen die Inhalte eines Datensatzes bearbeitet werden, muss der Datensatzzeiger mithilfe der Move-Methoden des Recordsets zum entsprechenden Datensatz verschoben werden.
16.6 Datenbankzugriff mit DAO
235
Die Eigenschaften BOF und EOF ermöglichen die Kontrolle des Datensatzzeigers. Hat BOF den Wert True, steht der Datensatzzeiger
vor dem ersten Datensatz. Ist die Position des Datensatzzeigers
hinter dem letzten Datensatz des Recordsets, ist EOF wahr.
Die Methode AddNew fügt dem Recordset einen neuen, leeren Datensatz hinzu. Mit Edit bearbeiten Sie den aktuellen Datensatz.
Die Methode Delete löscht den aktuellen Datensatz. Voraussetzung dafür ist allerdings, dass die Ergebnismenge bearbeitbar ist,
d.h. die Eigenschaft Updatable wahr ist.
Tabelle 16.1:
Eigenschaften
eines Recordsets
Tabelle 16.2:
Methoden eines
Recordsets
236
Eigenschaften
Bemerkung
BOF
(Begin Of File) ist dann wahr, wenn der Datensatzzeiger vor
dem ersten Datensatz steht.
EOF
(End Of File) ist dann wahr, wenn der Datensatzzeiger hinter
dem letzten Datensatz steht.
NoMatch
ist wahr, wenn eine Suche mit den Find-Methoden ohne Ergebnis war.
RecordCount
gibt die Anzahl der Datensätze im Recordset zurück; bei Recordsets vom Dynaset ist der Wert erst aktuell, wenn zuvor
die Methode MoveLast ausgeführt wurde.
Updatable
Die Daten des Recordsets können geändert werden bzw.
Datensätze können gelöscht und hinzugefügt werden, wenn
die Eigenschaft Updatable wahr ist.
Methode
Bemerkung
MoveNext
bewegt den Datensatzzeiger zum nächsten Datensatz.
MovePrevious
bewegt den Datensatzzeiger zum vorhergehenden Datensatz.
MoveFirst
bewegt den Datensatzzeiger zum ersten Datensatz.
MoveLast
bewegt den Datensatzzeiger zum letzten Datensatz.
FindFirst
Kriterien
sucht den ersten Datensatz, der den Kriterien entspricht.
FindNext
Kriterien
sucht den nächsten Datensatz, der den Kriterien entspricht.
FindLast
Kriterien
sucht den letzten Datensatz, der den Kriterien entspricht.
Kapitel 16: DAO und andere Objekte
Tabelle 16.2 (Forts.):
Methoden eines
Recordsets
Methode
Bemerkung
FindPrevious
Kriterien
sucht den vorhergehenden Datensatz, der den Kriterien
entspricht.
Edit
schaltet einen Datensatz in den Bearbeitungsmodus.
AddNew
hängt einen neuen, leeren Datensatz an das Recordset.
Update
schreibt einen neuen oder aktualisierten Datensatz in die
Datenbank.
Um auf die Werte in den Tabellenspalten des Recordsets zuzugreifen, verwenden Sie die Feldnamen in der Form
DAO.Recordset("Feldname")
oder besser
DAO.Recordset!Feldname.
Mit Recordsets arbeiten
Jetzt möchte ich Ihnen zeigen, wie Sie mit Recordsets in Ihrer Datenbank Daten verändern, hinzufügen oder löschen können. Wenn
Sie auf die Tabelle tblAdressenDeutschland zugreifen möchten,
schreiben Sie am Anfang Ihrer Prozedur:
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("tblAdressenDeutschland")
Damit deklarieren Sie die Variable rst als Recordset, das Sie dann
mit Set öffnen, wobei CurrentDb für die aktuelle Datenbank steht.
Um auf die Werte in den Tabellenspalten des Recordsets zuzugreifen, verwenden Sie die Feldnamen in der Form
DAO.Recordset("Feldname")
oder besser
DAO.Recordset!Feldname
Mit der Variablen rst brauchen Sie dann einfach nur
rst.Nachname
zu schreiben, um das zugehörige Feld anzusprechen.
16.6 Datenbankzugriff mit DAO
237
Daten verändern
Um den aktuellen Datensatz zu ändern, kopieren Sie mit Edit die
Daten in einen internen Puffer. Sind die Daten bearbeitet, wird die
Änderung mit Update geschrieben. Erst danach sind die Bearbeitungen dauerhaft gespeichert.
Public Sub DatensatzÄndern_DAO()
Dim rst As DAO.Recordset
Set rst =
CurrentDb.OpenRecordset("tblAdressenDeutschland")
' Alle Datensätze durchlaufen (bis EOF -End of File)
Do Until rst.EOF
' Recordset bearbeiten
rst.Edit
' Allen Nachnamen 'von' voranstellen
rst!Nachname = "von " & rst!Nachname
' Datensatzänderungen speichern
rst.Update
' Zum nächsten Datensatz gehen
rst.MoveNext
Loop
rst.Close
End Sub
Mit dieser Prozedur machen Sie alle Casa-Maria-Gäste zu Adeligen. Wenn Sie das von vor den Namen wieder entfernen wollen,
ändern Sie die Programmzeile für den nächsten Durchlauf einfach
wie folgt:
rst!Nachname = Right(rst!Nachname, Len(rst!Nachname) - 4)
Neue Datensätze hinzufügen
Mithilfe von AddNew wird dem Recordset ein neuer Datensatz hinzugefügt. Dem zunächst leeren Datensatz können dann Felder
zugeordnet werden. Nach Update werden die Daten in die zugrunde liegende Tabelle geschrieben.
Private Sub DatensatzHinzufügen_DAO()
Dim rst As dao.Recordset
Set rst = CurrentDb.OpenRecordset("tblBuchungen")
With rst
' Neuen Datensatz anlegen
.AddNew
238
Kapitel 16: DAO und andere Objekte
' Mit Daten füllen
!Appartementnummer = 12
!Buchungsnummer = 200300301
' Datum in englischer Schreibweise
!Anreise = #3/13/2003#
!Abreise = #3/21/2003#
' Neuen Datensatz speichern
.Update
End With
rst.Close
End Sub
Datensätze löschen
Sie können den aktuellen Datensatz mit Delete löschen. Es bietet
sich an, dafür ein Recordset für eine Abfrage zu erstellen. Dazu
wird bei der Definition des Recordsets einfach der Name der Abfrage eingetragen.
Public Sub DatensatzLöschen_DAO()
Dim rst As dao.Recordset
Set rst = CurrentDb.OpenRecordset("qryAlteBuchungen")
' qryAlteBuchungen zeigt Buchungen,
' deren Abreisedatum mehr als 400 Tage zurück liegt.
' Ist das Recordset bearbeitbar?
If rst.Updatable = False Then
MsgBox "Recordset kann nicht aktualisiert werden"
Exit Sub
End If
' Alle Datensätze durchlaufen
Do Until rst.EOF
' Datensatz löschen
rst.Delete
' Zum nächsten Datensatz gehen
rst.MoveNext
Loop
rst.Close
End Sub
Schluss mit dem DAOismus
Genug der Theorie. Im nächsten Kapitel geht es um die praktische
Umsetzung des neu gewonnenen Wissens um VBA, DAO und Co.
16.6 Datenbankzugriff mit DAO
239

Documents pareils