.: vb - datenbankprogrammierung I :.
 
abyter.de \\ workshops

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:

Screenshot von Datenbankstruktur

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 (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:

Formular

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 (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 (Beenden). 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.

Related Workshops: Allgemeines \\ Visual Basic Einführung \\ Die Programmierumgebung \\ Programmiergrundlagen \\ Programmieren mit VB \\ Datenbanktheorie \\ Datenbankprogrammierung 2 \\ EmbeddedSQL \\ Steuerelemente \\ Api-Funktionen
Related Files: Quellcodedateien fertiges Programm

Workshop als pdf

<Zurück

© by www.abyter.de (Martin Monshausen)