Bauen mit Microsoft - Haushaltsbuch Online

Irgendwie erlebt jeder einmal, dass am Ende des Kontos noch viel vom Monat übrig ist. Wo das alles hinging, wenn man’s nur wüsste. Ein kleines Haushaltsbuch muss her. Dabei wollen wir jetzt nicht die doppelte Buchführung einer GmbH simulieren (man kann es auch übertreiben), obwohl: Wer das Projekt ein wenig weiter entwickelt, könnte auch das hinbekommen. Wir wollen für jeden Einkauf einen Eintrag machen. Also Betrag, Datum, eine kleine Bemerkung und einen Zweck angeben. Die Zwecke sollen aus einer Liste stammen, um nachher ein paar Auswertungen machen zu können (Was kostet die Katze im Monat? Warum ist Fasten teurer als Sylvester? So was halt).

Schritt 1: Am Anfang steht Projekt-Neu

Nach dem Start von Visual Basic Express legen wir ein neues Projekt vom Typ „Windows Forms“ an. Name: Haushaltsbuch. Einfach Datei, Neues Projekt, kurz Name und Typ checken und OK klicken. Damit haben wir unser Projekt erstellt.

Schritt 2: Wie die Großen: Datenbanken

Unsere Daten wollen wir in einer Datenbank abspeichern. Also gehen wir im „Projektmappen-Explorer“ (oben rechts) auf unser Projekt, klicken rechts und wählen „Hinzufügen-Neues Element“. Dann suchen wir eine SQL-Datenbank aus (die gelbe Tonne unten links). Als Name geben wir Ihr Haushaltsbuch.mdf und tippen Enter. Im anschließenden Dialog klicken wir auf Fertigstellen.

Wir hatten ja gesagt, es gibt Einträge und Zwecke. Beides werden wir in jeweils einer Tabelle anlegen, damit wir beliebig erweitern können. Dazu gehen wir oben links auf den Datenbank-Explorer und öffnen unsere Datenbank bis wir den Eintrag „Tabellen“ sehen. Die sind noch leer, daher klicken wir rechts drauf und sagen „Neue Tabelle einfügen“.

Wir sehen den Tabellen-Editor mit Spaltenname, Datentyp und Null zulassen. Unsere Tabelle soll nun die „Zwecke“ enthalten. Dazu nehmen wir die Spalte und nennen sie ZweckID, Datentyp int (Ganze Zahl), NULL zulassen darf nicht angehakt sein (die Spalte muss also Daten enthalten).

Diese ID Spalte gibt uns die Möglichkeit, jede Zeile mit einem eindeutigen „Namen“ ansprechen zu können. Dazu gehen wir unten auf das Fenster Spalteneigenschaften (vorher noch kurz checken, dass die Zeile ZweckID mit einem Pfeil gekennzeichnet, also ausgewählt, ist) und suchen den Eintrag „Identitätsspezifikation“. Dieser etwas sperrige Name zeigt es deutlich: ist es diese Spalte, die der Zeile ihre Identität (oder „Namen“) gibt? Dazu auf das kleine Plus vorne klicken und (Ist Identity) auf Ja. Um dies zu vollenden, gehen wir noch mit der rechten Maustaste auf die ZweckID wieder oben im Tabellen-Editor und wählen „Primärschlüssel festlegen“. Ein kleiner Schlüssel erscheint.

Noch eine weitere Zeile mit dem Spaltennamen Text, Datentyp nvarchar(50) (50 Zeichen sollten ausreichen) und keine NULL zulassen. Unsere erste Tabelle sollte so aussehen wie im ersten Bild. Jetzt auf Speichern (die Diskette oben links), die Tabelle soll Zwecke heißen.

Unsere erste Tabelle

Schritt 3: Zurück

Wir gehen noch mal in den Datenbank-Explorer links oben, öffnen die Tabellen und finden „Zwecke“ als Tabelle vor. Rechtsklick auf „Zwecke“ und „Tabellendaten anzeigen“. Wir sehen unsere Tabelle vor uns und sie ist leer (überall steht NULL). Wir klicken auf die NULL in der Text Spalte und schreiben Gehalt (links erscheint ein Stift, wir editieren gerade). Wenn man die Zeile verlässt (die Tabulator-Taste zum Beispiel), wird die ZweckID automatisch auf 1 gesetzt. Cool, das ist unser erster Datensatz.

Datensatz anlegen

Schritt 4: Will sehen: Ein Formular für Zwecke

Wir brauchen ein Formular oder Fenster, mit dem wir die Zeilen in unserer „Zwecke Tabelle“ bearbeiten können. Um es einfach zu machen, wählen wir Datenquellen (rechts in der Mitte). Am oberen Rand der Datenquellen befindet sich ein Symbol mit einer gelben Tonne, von der ein Pfeil auf einen Haken weist (Dataset mit dem Assistenten konfigurieren). Das klicken wir an und im Dialog, der sich dann auftut, wählen wir den Kasten vor den Tabellen an. Fertigstellen. Jetzt weiß unser Programm auch von unserer Tabelle in der Datenbank.

Zurück zum Projektmappen-Explorer. Dort klicken wir rechts auf unser Haushaltsbuch und sagen „Hinzufügen, Windows Form“. Wir nennen das Formular „Zwecke Bearbeiten.vb“. Wenn wir jetzt zurück in die Datenquellen gehen, finden wir „Zwecke“ unterhalb des HaushaltsbuchDataSet. Neben „Zwecke“ erscheint ein Pfeil (dazu auf Zweck klicken), der zu einem Menü führt, wenn man ihn anklickt. Aus diesem Menü wählen wir „Details“. Neben der ZweckID in unserer Tabelle „Zwecke“ auch auf den Pfeil und dort Label auswählen.

Jetzt einfach die Tabelle „Zwecke“ aus diesen Datenquellen mit links anklicken, festhalten und über unser „Zwecke Bearbeiten Formular“ ziehen. Sobald man die Maustaste loslässt, baut uns Visual Basic alles weitere zusammen. In den Reitern am oberen Rand findet sich ein Fenster Form1.vb. Das ist das Fenster, mit dem unser Programm starten wird. Auf diesen Reiter klicken und aus der Toolbox oben links einen Button auf das Fenster Form1 im Editor ziehen. Im unteren rechten Bereich kann man die Eigenschaften der Buttons sehen. Wir ändern die Text Eigenschaft auf Zwecke bearbeiten… Jetzt den Button doppelt anklicken, der Code-Editor kommt hoch. Nun wollen wir auch mal programmieren, also folgende Zeilen eingeben:


Dim ZweckeForm As New Zwecke_Bearbeiten
ZweckeForm.ShowDialog()

Klicken Sie auf die Abbildung um den Code zu erhalten!

Jetzt wollen wir mal ausprobieren. Also auf das grüne Dreieck in der oberen Leiste klicken, unser Hauptfenster mit dem Button sollte erscheinen. Wenn man darauf klickt, erscheint unser „Zwecke Bearbeiten Formular“ mit unserem Datensatz. Über die Zeichen in der oberen Zeile kann man neue Zwecke hinzufügen, hin- und herspringen etc. Klickt man auf die Diskette, werden die gemachten Änderungen zur Datenbank zurück geschrieben. Herzlichen Glückwunsch zur ersten Datenbank-Applikation.

Schritt 5: Jetzt wird es ernst...

Für unsere Einträge brauchen wir eine weitere Tabelle. Also im Datenbank-Explorer wie gehabt, rechte Maustaste auf Tabellen, neue Tabelle hinzufügen. Spaltenname EintragID, Datentyp int, keine NULL zulassen, in den Spalteneigenschaften Identitätsspezifikation, (Ist Identity) auf Ja. Auch hier wieder mit der rechten Maustaste auf der Spalte den Primärschlüssel festlegen.

Wir brauchen dann noch eine Spalte Betrag vom Typ money, auch keine NULL zulassen, eine Spalte Bemerkung, Typ nvarchar(MAX) (darf etwas üppiger sein), hier ist die NULL erlaubt, eine Spalte FK_ZweckID, Typ int, keine NULL (kommt gleich, was das soll) und eine Spalte Datum, Typ datetime, auch keine NULL. Bitte speichern und der Tabelle den Namen Einträge geben.

Diese Spalte FK_ZweckID soll eine Beziehung zwischen unseren Einträgen und den Zwecken herstellen. Dazu kopieren wir nicht die Werte rüber, sondern merken uns den „Namen“ des Zwecks. Daher kommt auch der Begriff „relationale Datenbank“ (Relation=Beziehung) und nichts anderes sind die überwiegend meisten Datenbanken heute.

Solche Beziehungen kann man in der Datenbank ablegen und damit einige Aufgaben automatisieren. Dazu klicken wir im oberen linken Bereich auf das Symbol, in dem drei kleine Kästchen mit einander verbunden sind (Beziehungen).

Wir sagen Hinzufügen und im rechten Bereich klicken wir auf Tabellen- und Spaltenspezifikation. Im Feld erscheinen drei Punkte, auf die wir klicken. Wir suchen für die Primärschlüsseltabelle die Zwecke-Tabelle aus. Im unteren Bereich können wir nun die beiden Einträge in den Tabellen suchen, die die Verbindung herstellen (also ZweckID links und FK_ZweckID rechts). Wir schließen danach die beiden Fenster wieder. Die Datenbank weiß jetzt Bescheid.

Schritt 6: Ein Formular für Einträge

Wir wechseln zu unserem Editor Form1.vb [Entwurf] (die Reiter im oberen Bereich). Eigentlich müssen wir nur das gleiche tun wie bereits für das Fenster Zwecke_Bearbeiten. Also in Datenquellen den Assistenten aufrufen, die Tabellen anhaken, Fertigstellen. Jetzt finden wir unsere Einträge.

Auch hier mit Hilfe des kleinen Pfeils Einträge auf Details umschalten, EintragID und FK_ZweckID auf ein Label. Für den Betrag wollen wir etwas besonderes und gehen auf Anpassen. Wir suchen im Bereich „zugeordnetes Steuerelement“ die MaskedTextBox aus und klicken OK. Man sieht, dass der Editor das Datum gleich mit einem entsprechenden Zeichen hinterlegt hat. Jetzt wieder die Einträge auf das Formular ziehen und den Zauber wirken lassen.

Startet man jetzt das Programm, stellt man fest, dass die Verbindung zu den Zwecken in der anderen Tabelle irgendwie noch seltsam ist. Also zurück in den Editor.

Wir klicken auf das Feld hinter Betrag. Es erscheint ein kleiner Pfeil (oder SmartTag), auf den wir wieder klicken. Wir können nun einige wichtige Angaben machen. Hier zum Beispiel die Maske festlegen. Man darf in dieses Feld ja nur Geldbeträge eingeben, also Vorzeichen, Zahlen, ein Komma und wieder zwei Zahlen. Das können wir mit der Maske 999,999.00 erreichen.

Zweck ID Feld (eventuell das dahinterliegende Label aus dem Weg ziehen).

Diese ComboBox soll uns die Eingabe des Zwecks vereinfachen. Dazu auf das SmartTag an dieser ComboBox klicken. Wir wählen „An Daten gebundenes Element“ öffnen und es erscheinen weitere Auswahlen. Im Bereich Datenquellen wählen wir Weitere Datenquellen, Projektdatenquellen, HaushaltsbuchDataSet, Zwecke.

Die ComboBox soll uns die Eingabe des Zwecks vereinfachen

Für Member anzeigen Text, für Wertemember ZweckID und für Ausgewählter Wert EinträgeBindingSource FK_Zweck ID. So jetzt mal starten, mit dem Plus aus der oberen Reihe einen neuen Datensatz hinzufügen und loseditieren.

Noch ein Schönheitsfehler… Wenn man während der Eingabe ein weiteren Zweck hinzufügt, wird der noch nicht in unserer Liste angezeigt. Daher klicken wir auf unseren „Zwecke bearbeiten Knopf“ und fügen folgenden Code in einer Zeile unter ZweckeForm.ShowDialog() ein:


ZweckeTableAdapter.Fill(Me.HaushaltsbuchDataSet.Zwecke)

Klicken Sie auf die Abbildung um den Code zu erhalten!