Einführung
Bevor ich mit dem Thema Datenbankzugriff selbst programmieren beginne,
möchte ich noch etwas Datenbanktheorie einschieben, da man ansonsten
einige Dinge beim späteren Programmieren nicht verstehen kann.
Sehr fleißige werden schon im Access-Workshop geschaut haben (und
ihn hoffentlich durchgemacht haben), doch auch diese werden in dieser
Datenbankeinführung einige Neuigkeiten erfahren.
Der
Datenbankzugriff
Erst mal eine grafische Darstellung des Datenbankzugriffs:
Zuerst einmal das Lesen von Daten: Aus der Tabelle einer
Datenbank wird der mit dem Datensatzzeiger aktuell markierte Datensatz
in den Hauptspeicher geladen. Dort befindet sich ein Puffer der die Daten
zwischenspeichert. Einer der Aufgaben des Programmierers ist es die Daten
in den Puffer zu bekommen und von dem Puffer aus korrekt in der Form anzeigen
zu lassen.
Beim Speichern wird der umgekehrte Weg gegangen. Änderungen werden
erst in den Puffer im RAM gespeichert. Von da aus werden die Änderungen
in den Feldern der Datenbank gesichert.
Der
Lesezugriff
Ich möchte nun den lesenden Zugriff auf die Datenbank genau behandeln.
Die Datenbank liegt dem Programmierer vor, zuerst einmal muss er sich
um das Puffern des aktuellen Datensatzes in den RAM kümmern. Dies
ist eigentlich recht simpel; man benötigt zwei Variablen, die die
Verbindung zur Datenbank verstellen. Die eine Variable ist für das
öffnen der Datenbank zuständig und die andere für den Zugriff
auf die Felder der Datenbank.
Die Variable werden folgendermaßen deklariert:
Dim Db as Database
Dim Tb as Recordset
Die erste Variable ist also sinnigerweise eine Variable
vom Typ Database. Der Zugriff auf die Felder der Datenbank wird mit einer
Variable vom Typ Recordset vollzogen. Nun zu der Zuweisung der beiden
Variablen:
Set Db = OpenDatabase ("db.mdb")
Set Tb = Db.OpenRecordset ("Tab1", dbOpenDynaset)
Bei der ersten Zuweisung ist db.mdb der Name der Datenbank
und Db, die vorhin deklarierte Variable. Die zweite Zuweisung sieht schon
etwas komplizierter aus. Tab1 ist hier der Tabellenname und Tb die vorhin
deklarierte Variable. Das öffnen der Tabelle geht mit dem soeben
definierten Objekt DB, dessen Attribut OpenRecordset für das Öffnen
einer Tabelle zuständig ist. Das Attribut dbOpenRecordset sorgt dafür,
dass die Tabelle als Dynaset geöffnet wird, d.h. Änderungen
werden erst beim nochmaligen laden des Dynasetobjekts sichtbar. Dies geschieht,
wenn man z.B. einen Datensatz weitergeht.
Mit diesen beiden Anweisungen ist a) die Datenbank geöffnet worden
und b) der RAM mit dem aktuellen Datensatz gefüllt worden. Nun müssen
die Datensätze des Puffers auf die Form gebracht werden. Dies geht
in dem man dem Textfeld folgendes zuweist:
txtName.Text = Tb!Name
Dem Textfeld wird der Inhalt des Datenfeldes im RAM zugewiesen.
Die Inhalte der Datenfelder werden im RAM im folgenden Format gespeichert:
Tb!Datenfeldname
Wobei Tb selbstredend die oben deklarierte Variable ist.
Mit ! und dem Datenfeldname aus der Tabelle wird der Inhalt in das Textfeld
kopiert.
Schreibzugriff
Etwas komplizierter ist da schon der schreibende Zugriff. Im
Grunde genommen geht man zwar den entgegengesetzten Weg des lesenden Zugriffs,
also:
Tb!Name = txtName.Text
Jedoch sind noch weitere Befehle notwendig um die Daten
dann auch in der Datenbank zu speichern. Diese möchte ich nun im
Folgenden behandeln.
Das Ändern wird mit zwei Befehlen vollzogen:
Tb.Edit
Tb!Name = txtName.Text
Tb.Update
Tb ist hier wieder die Variable von oben. Mit der ersten
Anweisung wird die Tabelle in den Bearbeitungsmodus versetzt, d.h. erst
nachdem die Tabelle im Bearbeitungsmodus ist, können Felder verändert
werden. Zuvor ist die Tabelle für den schreibenden Zugriff gesperrt.
Danach wird die oben beschriebene Zuweisung in das Datenfeld gemacht und
mit der letzten Anweisung wird die Änderung mit Update gespeichert
und ab dann angezeigt. Der letzte Befehl hängt auch damit zusammen,
dass wir den Recordset als Dynaset geöffnet haben.
Das war die Änderung bestehender Datensätze; natürlich
kann man auch neue Datensätze in die Tabelle einfügen. Dies
geht so:
Tb.AddNew
Jetzt ist an die Tabelle ein neuer Datensatz angehängt
worden. Wenn man die Felder dann mit Inhalt gefüllt hat, müsste
man die letzte Anweisung incl. der Zuweisung noch mal durchlaufen, damit
die Änderungen wirksam werden.
Natürlich ist es auch notwendig Datensätze wieder zu entfernen,
die geht damit:
Tb.Delete
Bei diesem Befehl muss man jedoch noch einiges beachten,
zum Einen ob es sinnvoll ist, den Befehl ohne Sicherheitsabfrage auszuführen
und zum Anderen, dass man den Datensatzzeiger um eins weiterverschieben
muss. Vor allem das Letztere birgt Fehlerpotential in sich.
Praxis
Nachdem du nun dich mit der Theorie des Datenbankzugriffs beschäftigt
hast, würde ich vorschlagen, dass du dich im nächsten Workshop
mit der Praxis auseinandersetzt.
|