8.5 Ein Verwaltungsprogramm
In diesem Abschnitt wird ein einfaches Programm (Projekt DBVerwaltung) zur Verwaltung einer Tabelle vorgestellt. Das Programm ermöglicht die grundlegenden Aktionen wie Alle Sehen, Name suchen, Einfügen, Ändern und Löschen, siehe Abbildung 8.25.
Abbildung 8.25 Benutzeroberfläche des Verwaltungsprogramms
8.5.1 Initialisierung
Zunächst werden einige klassenweit gültige Variablen vereinbart. Außerdem werden beim Laden des Formulars einige allgemeine Einstellungen vorgenommen, die in den verschiedenen Ereignisprozeduren benötigt werden.
Imports System.Data.OleDb
Public Class Form1
Dim con As New OleDbConnection
Dim cmd As New OleDbCommand
Dim reader As OleDbDataReader
Dim pnummer As New ArrayList
Private Sub Form1_Load(...) Handles MyBase.Load
con.ConnectionString =
"Provider=Microsoft.ACE.OLEDB.12.0;" &
"Data Source=C:\Temp\firma.accdb"
cmd.Connection = con
End Sub
[...]
End Class
Listing 8.3 Projekt »DBVerwaltung«, Initialisierung
Zur Erläuterung:
- Der Namespace System.Data.OleDb wird für die Nutzung der notwendigen Klassen innerhalb des gesamten Formulars importiert.
- Es werden die Variablen für Verbindung, SQL-Befehl und Reader deklariert.
- Außerdem wird ein Objekt der Datenstruktur ArrayList deklariert, siehe Abschnitt 4.6.
- Die Daten für die Verbindung (Provider, Datenquelle) werden bereitgestellt.
- Der SQL-Befehl wird mit der Verbindung verknüpft.
8.5.2 Alle Datensätze sehen
Betätigt der Benutzer den Button Alle sehen, werden alle Datensätze angezeigt, siehe Abbildung 8.26. Anschließend könnte man z. B. einen der angezeigten Datensätze markieren, um ihn zu verändern oder zu löschen.
Abbildung 8.26 Alle Datensätze sehen
Die Ereignisprozedur ruft nur die allgemeine Prozedur AlleSehen() auf. Diese wird von mehreren Ereignisprozeduren aufgerufen. In der Prozedur AlleSehen() wird u. a. die allgemeine Prozedur Ausgabe() aufgerufen. Diese wird ebenfalls von verschiedenen Stellen des Programms aufgerufen.
Public Class Form1
[...]
Private Sub cmdAlleSehen_Click(...) Handles ...
AlleSehen()
End Sub
Private Sub AlleSehen()
Try
con.Open()
cmd.CommandText = "select * from personen"
Ausgabe()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
con.Close()
txtName.Text = ""
txtVorname.Text = ""
txtPersonalnummer.Text = ""
txtGehalt.Text = ""
txtGeburtstag.Text = ""
End Sub
Private Sub Ausgabe()
reader = cmd.ExecuteReader()
lstTab.Items.Clear()
pnummer.Clear()
Do While reader.Read()
lstTab.Items.Add(reader("name") & " # " &
reader("vorname") & " # " &
reader("personalnummer") & " # " &
reader("gehalt") & " # " &
reader("geburtstag"))
pnummer.Add(reader("personalnummer"))
Loop
reader.Close()
End Sub
[...]
End Class
Listing 8.4 Projekt »DBVerwaltung«, alle Datensätze sehen
Zur Erläuterung:
- In der Prozedur AlleSehen() wird zunächst die Verbindung geöffnet.
- Der SQL-Befehl wird formuliert und gesendet.
- Anschließend wird die Prozedur Ausgabe() aufgerufen.
- Die Verbindung wird wieder geschlossen.
- Die Inhalte der fünf Textfelder werden gelöscht. Dies erzeugt einen Startzustand für alle weiteren, möglichen Aktionen und hilft bei einer besseren Benutzerführung.
- In der Prozedur Ausgabe() wird der SQL-Befehl ausgeführt. Das Ergebnis wird im Reader gespeichert.
- Das Objekt der Klasse ArrayList wird mithilfe der Methode Clear() geleert.
- Die einzelnen Datensätze werden im Listenfeld ausgegeben.
- Parallel dazu wird die ArrayList pnummer mit den Personalnummern mithilfe der Methode Add() gefüllt. Das Objekt beinhaltet anschließend die Personalnummern unter dem gleichen Index wie die betreffenden Datensätze im Listenfeld. Dies wird zur Auswahl und Anzeige eines einzelnen Datensatzes in den fünf Textfeldern benötigt. Zum Ändern oder Löschen eines Datensatzes muss zuvor ein Datensatz ausgewählt werden.
- Der Reader wird wieder geschlossen.
8.5.3 Datensatz einfügen
Falls der Benutzer den Button Einfügen betätigt, wird ein Datensatz eingefügt, der sich aus den Daten in den fünf Textfeldern zusammensetzt. Diese müssen zuvor vom Benutzer gefüllt werden, siehe Abbildung 8.27.
Abbildung 8.27 Ein neuer Datensatz
Die Ereignisprozedur hat den folgenden Code:
Private Sub cmdEinfügen_Click(...) Handles ...
Dim anzahl As Integer
Try
con.Open()
cmd.CommandText =
"insert into personen " &
"(name, vorname, personalnummer, " &
"gehalt, geburtstag) values ('" &
txtName.Text & "', '" &
txtVorname.Text & "', " &
txtPersonalnummer.Text & ", " &
txtGehalt.Text.Replace(",", ".") &
", '" & txtGeburtstag.Text & "')"
'MessageBox.Show(cmd.CommandText)
anzahl = cmd.ExecuteNonQuery()
If anzahl > 0 Then
MessageBox.Show(
"Ein Datensatz eingefügt")
End If
Catch ex As Exception
MessageBox.Show(ex.Message)
MessageBox.Show("Bitte mindestens einen" &
" Namen, eine eindeutige Personal" &
"nummer und ein gültiges Geburts" &
"datum eintragen")
End Try
con.Close()
AlleSehen()
End Sub
Listing 8.5 Projekt »DBVerwaltung«, Datensatz einfügen
Zur Erläuterung:
- Die Verbindung wird geöffnet.
- Der SQL-Befehl zum Einfügen wird mit den Inhalten der fünf Textfelder zusammengesetzt. Zur Kontrolle können Sie sich den Befehl mithilfe der Methode MessageBox.Show() ansehen, siehe Abbildung 8.28. Bei den Feldern für Zeichenketten und Datumsangaben achten Sie wieder auf die einfachen Hochkommata.
Abbildung 8.28 Kontrolle des insert-Befehls
- Falls die eingetragene Personalnummer bereits in einem anderen Datensatz vorkommt, tritt ein Fehler auf und es erscheint eine entsprechende Fehlermeldung.
- Das Gehalt wird in dem zugehörigen Textfeld mit einem Komma als Dezimaltrennzeichen eingetragen. Zur Speicherung in der Datenbank wird dieses Komma mithilfe der Methode Replace() in einen Punkt umgewandelt.
- Der SQL-Befehl wird gesendet. Im Erfolgsfall wird ausgegeben, dass ein Datensatz eingefügt werden konnte.
- Die Verbindung wird wieder geschlossen.
- Alle Datensätze, einschließlich des neu eingefügten Datensatzes, werden im Listenfeld neu angezeigt.
8.5.4 Datensatz ändern
Die Daten eines bestimmten Datensatzes werden in den Textfeldern angezeigt, wenn der Benutzer vorher den betreffenden Eintrag im Listenfeld ausgewählt hat. Er kann nun die Daten des Datensatzes ändern. Betätigt er anschließend den Button Ändern, so wird der Datensatz mit den angezeigten Daten aktualisiert.
Die Ereignisprozedur, die für die Anzeige eines Datensatzes in den Textfeldern sorgt, hat folgenden Code:
Private Sub lstTab_SelectedIndexChanged(...
) Handles lstTab.SelectedIndexChanged
Try
con.Open()
cmd.CommandText = "select * from personen" &
" where personalnummer = " &
pnummer(lstTab.SelectedIndex)
reader = cmd.ExecuteReader()
reader.Read()
txtName.Text = reader("name")
txtVorname.Text = reader("vorname")
txtPersonalnummer.Text =
reader("personalnummer")
txtGehalt.Text = reader("gehalt")
txtGeburtstag.Text = reader("geburtstag")
reader.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
con.Close()
End Sub
Listing 8.6 Projekt »DBVerwaltung«, Datensatz anzeigen
Zur Erläuterung:
- Sobald der Benutzer einen Datensatz in der Liste markiert, wird diese Prozedur aufgerufen.
- Es wird ein SQL-Befehl zusammengesetzt, in dem der betreffende Datensatz ausgewählt wird. Dazu wird der zugehörige Eintrag (mit der Personalnummer) in der ArrayList pnummer benutzt.
- Markiert der Benutzer den dritten Datensatz von oben, so steht die Eigenschaft SelectedIndex des Listenfelds auf dem Wert 2. Es wird dann das Element 2 aus der ArrayList pnummer ermittelt. Dies ist die Personalnummer des markierten Datensatzes, denn das Listenfeld und die ArrayList wurden parallel gefüllt.
- Der SQL-Befehl wird gesendet. Das Ergebnis der Abfrage besteht nur aus einem Datensatz, aufgrund der Eindeutigkeit des Felds personalnummer. Daher muss keine Schleife durchlaufen werden.
- Es wird ein Datensatz mithilfe der Methode Read() aus dem Reader geholt. Sein Inhalt wird in den fünf Textfeldern dargestellt.
Die Ereignisprozedur zum Ändern des ausgewählten (und gegebenenfalls veränderten) Datensatzes sieht wie folgt aus:
Private Sub cmdÄndern_Click(...) Handles ...
Dim anzahl As Integer
Try
con.Open()
cmd.CommandText =
"update personen set " &
"name = '" & txtName.Text & "', " &
"vorname = '" & txtVorname.Text &
"', " & "personalnummer = " &
txtPersonalnummer.Text & ", " &
"gehalt = " &
txtGehalt.Text.Replace(",", ".") &
", " & "geburtstag = '" &
txtGeburtstag.Text & "' " &
"where personalnummer = " &
pnummer(lstTab.SelectedIndex)
'MessageBox.Show(cmd.CommandText)
anzahl = cmd.ExecuteNonQuery()
If anzahl > 0 Then
MessageBox.Show("Datensatz geändert")
End If
Catch ex As Exception
MessageBox.Show(ex.Message)
MessageBox.Show("Bitte einen Datensatz" &
" auswählen und mindestens einen" &
" Namen, eine eindeutige Personal" &
"nummer und ein gültiges Geburts" &
"datum eintragen")
End Try
con.Close()
AlleSehen()
End Sub
Listing 8.7 Projekt »DBVerwaltung«, Datensatz ändern
Zur Erläuterung:
- Die Verbindung wird geöffnet.
- Der SQL-Befehl zum Ändern wird mit den Inhalten der fünf Textfelder zusammengesetzt. Zur Kontrolle können Sie sich den Befehl wiederum mithilfe der Methode MessageBox.Show() ansehen, siehe Abbildung 8.29. Er bezieht sich nur auf den markierten Datensatz, da die zugehörige Personalnummer in der where-Klausel angegeben wurde.
Abbildung 8.29 Kontrolle des update-Befehls
- Bei dem SQL-Befehl ist wie beim Einfügen auf Folgendes zu achten:
- einfache Hochkommata bei Zeichenketten und Datumsangaben
- gültige Zahlen- und Datumsangaben
- Der SQL-Befehl wird gesendet. Im Erfolgsfall wird ausgegeben, dass ein Datensatz geändert werden konnte.
- Die Verbindung wird wieder geschlossen.
- Alle Datensätze, einschließlich des soeben geänderten Datensatzes, werden im Listenfeld neu angezeigt.
8.5.5 Datensatz löschen
Der Benutzer kann den Datensatz löschen, den er zuvor im Listenfeld ausgewählt hat. Dessen Daten werden zusätzlich in den fünf Textfeldern angezeigt.
Die Ereignisprozedur zum Löschen des ausgewählten Datensatzes hat folgenden Code:
Private Sub cmdLöschen_Click(...) Handles ...
Dim anzahl As Integer
If txtPersonalnummer.Text = "" Then
MessageBox.Show(
"Bitte einen Datensatz auswählen")
Exit Sub
End If
If MessageBox.Show("Wollen Sie den ausge" &
"wählten Datensatz wirklich löschen?",
"Löschen", MessageBoxButtons.YesNo) =
DialogResult.No Then
Exit Sub
End If
Try
con.Open()
cmd.CommandText = "delete from personen " &
"where personalnummer = " &
pnummer(lstTab.SelectedIndex)
'MessageBox.Show(cmd.CommandText)
anzahl = cmd.ExecuteNonQuery()
If anzahl > 0 Then
MessageBox.Show("Datensatz gelöscht")
End If
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
con.Close()
AlleSehen()
End Sub
Listing 8.8 Projekt »DBVerwaltung«, Datensatz löschen
Zur Erläuterung:
- Es wird zunächst geprüft, ob der Benutzer einen Datensatz ausgewählt hat.
- Zur Sicherheit wird der Benutzer noch einmal gefragt, ob er den Datensatz wirklich löschen möchte, siehe Abbildung 8.30. Dies ist die übliche Vorgehensweise, um versehentliches Löschen zu vermeiden.
Abbildung 8.30 Rückfrage vor dem Löschen
- Die Verbindung wird geöffnet.
- Der SQL-Befehl zum Löschen wird zusammengesetzt, siehe Abbildung 8.31. Er bezieht sich nur auf den markierten Datensatz, da die zugehörige Personalnummer in der where-Klausel angegeben wurde.
Abbildung 8.31 Kontrolle des delete-Befehls
- Der SQL-Befehl wird gesendet. Im Erfolgsfall wird ausgegeben, dass ein Datensatz gelöscht werden konnte.
- Die Verbindung wird wieder geschlossen.
- Alle noch vorhandenen Datensätze, ohne den soeben gelöschten Datensatz, werden im Listenfeld neu angezeigt.
8.5.6 Datensatz suchen
Zur Suche nach einem bestimmten Datensatz muss zuvor im Feld name ein Suchtext eingegeben werden. Nach Betätigung des Buttons Name suchen werden alle Datensätze angezeigt, die den Suchtext an einer beliebigen Stelle im Feld Name enthalten, siehe Abbildung 8.32.
Abbildung 8.32 Suchen mit (Teil-)Name
Anschließend könnte man z. B. einen der angezeigten Datensätze markieren, um ihn zu verändern oder zu löschen. Die Ereignisprozedur sieht wie folgt aus:
Private Sub cmdNameSuchen_Click(...) Handles ...
Try
con.Open()
cmd.CommandText =
"select * from personen where" &
" name like '%" & txtName.Text & "%'"
'MessageBox.Show(cmd.CommandText)
Ausgabe()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
con.Close()
End Sub
Listing 8.9 Projekt »DBVerwaltung«, Suchen im Feld »name«
Zur Erläuterung:
- Die Verbindung wird geöffnet.
- Der SQL-Befehl zum Suchen wird zusammengesetzt. Er beinhaltet den Namen, den der Benutzer im zugehörigen Textfeld eingegeben hat, in der where-Klausel. Die Prozentzeichen davor und dahinter sorgen dafür, dass alle Datensätze gefunden werden, die den Suchtext an einer beliebigen Stelle im Feld Name enthalten, siehe Abbildung 8.33.
Abbildung 8.33 Kontrolle des Suchbefehls
- Es wird die Funktion Ausgabe() aufgerufen. Diese sorgt – wie bei der Ausgabe aller Datensätze – für das Senden des SQL-Befehls und für das Empfangen und Anzeigen des Abfrage-Ergebnisses.
- Die Verbindung wird wieder geschlossen.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.