Einführung
Ich möchte unabhängig vom Workshop "Programmieren
mit Visual Basic" noch zwei Workshops über die Datenbankprogrammierung
machen, da es sich hierbei um eines der wichtigsten Themen in der Programmierung
handelt. Es ist so wichtig, dass ich dem Thema sogar gleich zwei Workshops
widme.
In diesem möchte ich die Datenbankprogrammierung mit Hilfe des
Datensteuerelements behandeln. Das andere wird sich mit der Programmierung
des Datenbankzugriffs von Hand befassen.
Einführung
zum VB-Projekt Adressverwaltung
Ich habe vor, ein kleines Adressverwaltungsprogramm zu programmieren,
das seine Datensätze in deiner Access-Datenbank speichert. Für
dieses Vorhaben setze ich das Datensteuerelement ein.
Datensteuerelement
Man muss gegenüber der Programmierung von Hand etwas weniger programmieren.
Es reicht das Datensteuerelement in der Form zu platzieren und die richtigen
Einstellungen zu treffen. Doch die sogenannte Bindung von Steuerelementen
(z.B. Textfeldern) kann praktisch ohne Programmieraufwand schnell eine
Datenbankanwendung erstellt werden. Den Zugriff auf die Datenbank übernimmt
größtenteils das Datensteuerelement.
Die Benutzung des Datensteuerelements ist für Einsteiger empfehlenswert,
da bei der Programmierung von Hand mehr Verständnis der Datenbank
vorhanden sein muss und man mehr selbst von Hand programmieren muss.
Den Einsteiger schreckt dies erst einmal ab. Aus diesem Grund mache
ich den Datenbankzugriff erst einmal mit dem Datensteuerelement. Im
nächsten Workshop werde ich dann die selbsterstellte Lösung
verwenden, die auch einige Vorteile bietet, die ich dann erläutern
werde.
Datenbank
für das Projekt anlegen
Zuallererst einmal muss eine Datenbank erstellt werden, in
die die Daten gespeichert werden. Das kann auf zwei Wege gehen: Mit
Access oder mit dem Visual Data Manager der bei Visual Basic mit geliefert
wird.
Da jeder Visual Basic-Programmierer den Visual Data Manager besitzt,
werde ich die Erstellung einer Datenbank mit diesem Programm erklären.
Den "Visual Data Manager" findest du in der IDE unter
"Add-Ins/Visual Data Manager". Vorher musst du natürlich
Visual Basic startet und ein "Standart-EXE"-Projekt"
erstellen. Ein Klick auf den Menüpunkt startet das Programm. Wähle
dann "Datei/Neu/Microsoft Access/Version 7.0 MDB" um
eine neue Datenbank zu erstellen. Du musst der Datenbank noch einen
Namen geben. In dem dann erscheinenden Fenster, steht der Eintrag "Properties",
klicke mit der rechten Maustaste darauf, ein Kontextmenü öffnet
sich, klicke dort auf "Neue Tabelle". Eine Eingabemaske
erscheint in der du den Tabellennamen noch eingeben musst. Gib "Adress"
ein, klicke dann auf "Feld hinzufügen", eine weitere
Eingabemaske erscheint, wo du nun den Feldnamen "Vorname"
eingibst und die Voreinstellung "Text" beibehältst.
Selbstverständlich sind je nach Zweck andere Felddatentypen sinnvoll,
wenn zum Beispiel in ein Feld nur Zahlen kommen sollen lohnt sich die
Einstellung "Zahl". Durch diesen Datentyp lassen sich
Ressourcen sparen, denn der "Text"-Datentyp verbraucht
mehr als der "Zahl"-Datentyp. Es gibt nämlich
mehr verschiedene Buchstaben als Zahlen, den die Datenbank und später
die Jet-Engine (Verbindungsglied zwischen deinem Programm und der Datenbank)
im Speicher reservieren muss. Bei wenigen Datensätzen fällt
dies nicht ins Gewicht, doch wenn man 500 Datensätze hat, merkt
man dies deutlich.
Klicke, wenn du den Namen eingegeben hast, auf "OK".
Im Hintergrund siehst du das neuerstellte Feld. Wiederhole den Vorgang
für "Nachname", "Strasse", "PLZOrt",
"Telefon" und "Bemerkungen". Wenn
du all die Felder eingegeben hast, klicke auf "Schließen".
Das Fenster sollte unter "Felder" jetzt so aussehen:
Drücke nun auf "Tabelle erstellen"
um die Tabelle zu erstellen. Mit dem Schließen vom Visual Data
Manager ist die Datenbank erstellt.
Datenbank
in das VB-Projekt einbinden
Nun, wenn du die Datenbank hast, kann es in Visual Basic
mit der Programmierung des Programms weitergehen. Zuerst werden wir
das Datensteuerelement ()
in unser Formular einfügen. Ziehe dazu das Steuerelement auf bis
es etwa so breit ist wie das Formular in das das Steuerelement eingefügt
wird. Dann gehe in den Eigenschaften-Dialog und wähle die Eigenschaft
"Database Name" aus, in dem Feld dahinter erscheint
eine Schaltfläche mit drei Punkten, wenn du auf diese Schaltfläche
klickst, öffnet sich ein Fenster in dem du den Pfad angeben musst,
unter dem sich die Datenbank befindet. Wähle den Pfad der Datenbank
aus. Drücke dann auf "Öffnen", hinter der
Eigenschaft Database Name erscheint nun der Pfad der ausgewählten
Datenbank. Dann musst du Visual Basic noch sagen in welche Tabelle die
Daten eingetragen werden sollen. Dies geschieht mit der Eigenschaft
"RecordSource" (recht weit unten in dem Dialog). Klicke
auf das Pfeilchen am des Feldes, und wähle "Adress"
aus, eine andere Auswahl dürfte es nicht geben. Es wäre darüber
hinaus auch noch schön, wenn die Aufschrift des Daten-Steuerelements
etwas schöner wäre. Dies kann man mit der Eigenschaft "Caption"
verändern, diese Eigenschaft dürfte dir noch von den Bezeichnungssteuerelementen
aus der Lektion "Programmieren mit VB" bekannt sein, gib hinter
das Eigenschaftsfeld die Beschriftung "< voriger Datensatz
| nächster Datensatz >" ein. Nun weiß das Daten-Steuerelement
wo sich die Datenbank befindet, in welche Tabelle die Daten geschrieben
werden sollen und es hat eine schönere Beschriftung, doch es können
noch keine Daten eingegeben werden. Wo soll man die denn eingeben? Ganz
einfach! In ein Textfeld, dafür sind sie da! Und dies geht ganz
ohne programmieren, und zwar durch Bindung. Dies bedeutet, das alles
was in das Textfeld eingegeben wird AUTOMATISCH in EIN Feld in der Datenbank
übertragen wird, z.B. der Vorname, der in das Textfeld für
den Vornamen kommt, wird sofort in das Feld "Vorname"
der Datenbank geschrieben.
Formulardesign
Also erzeuge erst einmal für jedes erstellte Feld der
Datenbank ein Bezeichnungsfeld und ein Textfeld. Die "Caption"-Eigenschaften
der Bezeichnungsfelder sind die jeweiligen Namen der Felder der Datenbank,
die Text-Eigenschaften der Textfelder sind leer. Das Formular sollte
jetzt etwa so aussehen:
Die Schriftart und -größe veränderst
du mit Hilfe der Eigenschaft "Font". Bei dem Feld "Bemerkungen",
handelt es sich um ein Feld in das auch mehrzeilige Eingaben möglich
sind. Dies kann man mit Hilfe der Eigenschaft "MultiLine"
einstellen. Setze die Eigenschaft auf "True". Außerdem
hat die Textbox eine Scroll-Bar für Texte die über dieses
Feld hinausgehen. Dies wird mit der Eigenschaft "ScrollBars"
erreicht. Setze die Eigenschaft auf "2 - Vertikal"
damit der Balken am rechten Rand erscheinen.
Textfelder
an Datenbank binden
Nun müssen die Textfelder noch an die Felder der Datenbank
gebunden werden. Als erstes muss hierfür die Eigenschaft "DataSource"
aller Textfelder auf "Data1" gesetzt werden (So heißt
das Datensteuerelement). Dies geschieht mit dem Pfeil am Rand des Feldes.
Wenn du nun bei der Eigenschaft "DataField" auf den
Pfeil klickst erscheinen in einer Liste alle verfügbaren Felder
der Datenbank. Wähle für jedes Textfeld das zugehörige
Feld der Datenbank aus. Nun sind die Textfelder an die Datenbank gebunden.
Doch die Datenbank enthält noch keine Datensätze, die muss
der Benutzer erst eingeben. Damit er dies tun kann, bauen wir diese
Funktionen ein. Dies geht leider nicht per drag & drop. Diese Funktion
muss programmiert werden.
Die
Buttons und ihre zukünftigen Funktionen
Ich möchte in das Programm zwei Buttons einfügen,
mit dem einen soll man Datensätze löschen können, mit
dem anderen neue erstellen. Also müssen zuerst zwei Knöpfe
eingefügt werden, den einen mit der Aufschrift "Löschen"
den anderen mit der Aufschrift "Einfügen" ("Caption"-Eigenschaft).
Mache dein Formular größer, wenn die Knöpfe nicht hereinpassen.
Nun werden wir die Knöpfe mit Funktionen ausstatten.
Damit wir beim Programmieren noch wissen welches Feld welches ist, geben
wir dem Feld "Vorname" einen neuen Namen. Das Feld
soll "txtVName" heißen, du wirst dich sicher
fragen warum das Feld einen so komischen Namen hat, txt in dem
Namen ist ein Präfix, das nach der ungarischen Notation dem Namen
vorangestellt wird. Diese Namenskonvention besagt, das jedes Objekt
ein Präfix hat, so z.B. cmd (=Befehlsschaltfläche), lbl (=Bezeichnungsfeld), dat (=Daten-Steuerelement), frm (=Formular), mnu (=Menü) und eben txt (=Textfeld).
Also gib hinter der Eigenschaft "Name" des Textfeldes
in das der Vorname soll, "txtVName" ein.
Der
Quelltext des ersten Buttons
Doppelklicke dann auf den "Einfügen"-Button
um Quelltext einzugeben, gib dann ein:
txtVName.SetFocus
Data1.Recordset.AddNew
Die erste Anweisung weist Visual Basic an, den Cursor
in das Feld "txtVName" zu setzen. Die zweite weist
den Recordset des Datensteuerelements an, einen Datensatz anzulegen.
Jetzt kannst du das Programm schon mal ausprobieren.
Der
Quelltext des zweiten Buttons
Wenn der Benutzer in das Programm einen Freund eingetragen
hat, den er jetzt nicht mehr ausstehen kann, dann möchte er diese
Adresse auch wieder löschen. Diese Funktion wird der "Löschen"-Knopf
übernehmen. Also doppelklicke auf den "Löschen"-Knopf
und gib ein:
Dim prompt$ as String
Dim reply as String
prompt$ = "Wollen Sie diesen Datensatz WIRKLICH löschen?"
reply = MsgBox(prompt$, vbOKCancel, "Datensatz löschen")
If reply = vbOK Then
Data1.Recordset.Delete
Data1.Recordset.MoveNext
End If
Die ersten zwei Anweisungen nach der Deklaration der
erforderlichen Variablen geben eine Meldung aus, die sicherstellt das
sich der Benutzer nicht verklickt hat. Wenn der "OK"-Knopf
(vbOK) dann gedrückt wird, wird der Datensatz gelöscht und
der Zeiger einen Datensatz weiter geschoben. Zeiger heißt, die
Markierung des aktuell angezeigten Datensatzes. Wenn der Zeiger auf
dem gerade gelöschten Datensatz steht, den es dann nicht mehr gibt,
stehen bleibt kommt es zu einem Laufzeitfehler.
Das
Menü einbauen
Das Programm ist im Grunde fertig, doch die Art das Programm
zu beenden (über Schließen-Kreuzchen) ist noch etwas schlecht.
Wir werden noch ein Menü einfügen mit dem man das Programm
beenden kann. Also öffne den Menü-Editor ()
aus der Symbolleiste durch einen Klick darauf. Nun gib bei Caption "&Beenden"
ein. Nein, & ist kein Schreibfehler, dieses Kaufmanns-Und macht einen
kleinen Strich unter den Buchstaben danach ().
So kann man hier beispielsweise durch Druck von [Alt/B] den Menüpunkt
öffnen und muss nicht erst extra darauf klicken. Gebe dann unter
"Name" "mnuEnd" ein. Der Namenspräfix mnu vor "mnuEnd" bedeutet das es sich um einen
Menüpunkt handelt. Mit einem Klick auf "OK" wird
deinem Fenster eine Menüleiste hinzugefügt. Nun müssen
wir noch dem Menüpunkt sagen, was er machen soll, wenn auf ihn
geklickt wird. Klicke hierfür auf den Menüpunkt, als wolltest
du ihn öffnen. Das Code-Fenster öffnet sich und wartet auf
deine Quelltexteingabe. Gib ein:
End
Mit dieser Anweisung wird dein Programm geschlossen.
Was
man noch machen könnte
Nun ist dein Programm fertig, wenn du noch eine EXE-Datei
aus dem Projekt machen willst gehe vor wie im Workshop "Programmieren
mit VB" beschrieben.
Sicherlich ist dieses Programm noch verbesserungsfähig, vielleicht
kannst du das Programm noch etwas überarbeiten. Es gibt noch einige
interessante Steuerelemente zum Thema "Datenbankprogrammierung"
(DataList, DataGrid). Mit Hilfe der msdn-Hilfe und etwas Geduld kannst
du noch einige Features in dein Programm einbauen. Probieren geht über
studieren!!!
Was ist nochmal...
- Namenskonvention, ungarische Notation
Diese Konvention soll helfen die Objekte später besser wieder
an ihrem Namen erkennen zu können. txtBeispiel lässt sich
besser merken als Text11.
Die Notation vereinheitlicht das Ganze durch genormte Präfixe
(txt, lbl, cmd).
- Binden
Binden heißt, ein Ausgabefeld (Textfeld, Bezeichnungsfeld) mit
einem Felder einer Datenbank zu verbinden. Als Vermittler zwischen
Programm und Datenbank agiert die Jet-Engine, die Datenbankfunktionen
wie erstellen, löschen, suchen, Zeiger bewegen, usw. für
das Programm bereit stellt.
- Zeiger
Ein Zeiger ist die Markierung des aktuell aufgerufenen Datensatzes.
Beim Löschen muss darauf geachtet werden, das der Zeiger nicht
auf ein nicht mehr vorhandenes Feld zeigt, ansonsten kommt es zu einem
Laufzeitfehler.
|