8.8 Arbeiten mit DataSets
Die Verbindung zwischen einer Anwendung und einer Datenbank kann auch halb-automatisiert, mithilfe der Entwicklungsumgebung über ein so genanntes DataSet aufgenommen werden. Das DataSet dient dabei als Puffer zur Zwischenspeicherung der Daten.
Der Ablauf bei der Benutzung ergibt sich wie folgt:
- Nach Aufnahme einer Verbindung werden die Daten aus der Datenbank in das DataSet kopiert. Anschließend wird die Verbindung wieder geschlossen.
- Nach Änderung einzelner oder mehrerer Datensätze des DataSets können die Daten über eine neue Verbindung in der Datenbank gespeichert werden.
8.8.1 Eine Tabelle in Detailansicht
In einem ersten Beispiel soll auf die Tabelle personen der Access Datenbank firma.accdb über einen DataSet zugegriffen werden.
Zur schnellen Erstellung einer einfachen Datenbankanwendung (Projekt DBDataSet, siehe Abbildung 8.51):
- Erstellen Sie ein neues WindowsForms-Projekt.
- Speichern Sie das gesamte Projekt.
- Rufen Sie im Kontextmenü des Projekts Hinzufügen • Vorhandenes Element auf. Es erscheint das entsprechende Dialogfeld.
- Wählen Sie die Access-Datenbank firma.accdb in ihrem Originalverzeichnis aus. Sie wird normalerweise bei diesem Vorgang in das Projektverzeichnis kopiert und es werden dort weitere Kopien angelegt. Hier wollen wir aber immer auf das Original zugreifen. Daher wählen Sie im Aufklappmenü des Buttons Hinzufügen den Menüpunkt Als Link hinzufügen, siehe Abbildung 8.46.
- Nach kurzer Zeit erscheint ein Assistentendialogfeld zum Konfigurieren der Datenquelle.
- Es ist eine Liste der Tabellen und Abfragen zu sehen. Markieren Sie die Tabelle personen, siehe Abbildung 8.47.
Abbildung 8.46 Datenbank als Link hinzufügen
Abbildung 8.47 Auswahl der Tabelle »personen«
- Nach dem Fertigstellen sehen Sie nach kurzer Zeit, dass im Projektmappen-Explorer ein Objekt vom Typ DataSet hinzugefügt wurde (firmaDataSet), siehe Abbildung 8.48.
Abbildung 8.48 Objekt vom Typ DataSet
- Wählen Sie nun im Menü Ansicht den Menüpunkt Weitere Fenster • Datenquellen.
- Lassen Sie sich über den Projektmappen-Explorer das Formular der Anwendung anzeigen, falls es momentan nicht sichtbar sein sollte.
- Wählen Sie in der Datenquellenanzeige im Aufklappmenü der Tabelle personen die Ansicht Details, siehe Abbildung 8.49.
Abbildung 8.49 Ansicht »Details«
- Ziehen Sie das Symbol der Tabelle personen aus der Datenquellenanzeige in das Formular der Anwendung.
- Nach kurzer Zeit erscheinen im bzw. unter dem Formular:
Abbildung 8.50 Komponenten für den DataSet
- Dadurch wird eine einfache Ansicht und Aktualisierung der Tabellendaten ermöglicht.
- Starten Sie die Anwendung, siehe Abbildung 8.51.
Abbildung 8.51 Anwendung mit DataSet
Sie können nun durch die Datensätze navigieren. Sie können sie ändern. Sie können die Anwendung wieder beenden. Nach einem erneuten Start werden Sie feststellen, dass Daten erst nach Betätigung des Symbols Speichern dauerhaft in der Datenbank gespeichert werden. Vorher sind sie nur temporär im DataSet geändert.
Die Navigations-Symbolleiste für den DataSet besteht aus den folgenden Steuerelementen:
- AddNewItem: zum Bereitstellen eines neuen leeren Datensatzes
- CountItem: zur Anzeige der Anzahl der Datensätze
- DeleteItem: zum Löschen eines Datensatzes
- MoveFirstItem: geht zum ersten Datensatz
- MoveLastItem: geht zum letzten Datensatz
- MoveNextItem: geht zum nächsten Datensatz
- MovePreviousItem: geht zum vorigen Datensatz
- PositionItem: zur Positionierung auf einem bestimmten Datensatz und zur Anzeige des betreffenden Datensatzes
- Separator, Separator1, Separator2: zur optischen Trennung der Symbole
- NavigatorSaveItem: zur Speicherung der Inhalte des DataSets in der Datenbank
Die neuen Komponenten des Projekts:
- BindingNavigator (hier: PersonenBindingNavigator): zentrale Komponente zur Navigation, hat Verbindung zur BindingSource-Komponente
- BindingSource (hier: PersonenBindingSource): bildet die Verbindung zwischen den Daten-Steuerelementen (hier: TextBoxen und DateTimePicker) und dem DataSet
- TableAdapter (hier: PersonenTableAdapter): stellt kurzfristig die Verbindung zwischen dem DataSet und der Datenbank her, zum Empfangen der Daten (von Datenbank zu DataSet) und zum Aktualisieren der Daten (von DataSet zu Datenbank)
- TableAdapterManager (hier: TableAdapterManager): steuert die Reihenfolge der Aktualisierung der Daten, hier gibt es verschiedene Strategien
- DataSet: (hier: FirmaDataSet): Puffer zur Zwischenspeicherung der Daten
8.8.2 Schließen ohne Speichern verhindern
Als nützliche Ergänzung der Anwendung DBDataSet wird noch eine Ereignisprozedur hinzugefügt. Diese wird aufgerufen, sobald der Benutzer das Formular schließen möchte. Es gibt bekanntlich mehrere Möglichkeiten, ein Formular zu schließen:
- über den Aufruf der Methode Close() des Formulars
- über den Klick auf das Kreuz oben rechts im Systemmenü
- über die Tastenkombination +
In allen Fällen tritt das Ereignis FormClosing ein. Mit der folgenden Prozedur haben Sie die Möglichkeit, das Schließen des Formulars zu verhindern, falls eine Änderung durchgeführt wurde, ohne dass danach gespeichert wurde:
Private Sub Form1_FormClosing(sender As Object,
e As FormClosingEventArgs
) Handles MyBase.FormClosing
If FirmaDataSet.HasChanges() Then
If MessageBox.Show(
"Beenden, ohne zu speichern?",
"Daten geändert",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question) =
DialogResult.No Then
e.Cancel = True
End If
End If
End Sub
Listing 8.11 Projekt »DBDataSet«, FormClosing-Ereignis
Zur Erläuterung:
- Die Prozedur zum Ereignis FormClosing bekommt als zweiten Parameter das Objekt e der Klasse FormClosingEventArgs geliefert.
- Jede Änderung des DataSets wird registriert. Ein DataSet verfügt außerdem über die Methode HasChanges(), mit der Sie feststellen können, ob eine Änderung stattgefunden hat.
- Falls dies zutrifft, dann wird im vorliegenden Programm gefragt, ob Sie die Anwendung wirklich verlassen möchten ohne zu speichern, siehe Abbildung 8.52. Falls Sie mit Nein antworten, dann wird die Eigenschaft Cancel des Objekts e auf True gesetzt. Dies führt dazu, dass das Schließen des Formulars nicht stattfindet.
Abbildung 8.52 Rückfrage beim Schließen nach Änderung
8.8.3 Eine Tabelle in DataGrid-Ansicht
Eine weitere, übersichtliche Möglichkeit zur Darstellung und Bearbeitung von Daten aus einer Datenbank stellt das Steuerelement DataGridView dar. Dies wird im Projekt DBDataSetGrid gezeigt, siehe Abbildung 8.53.
Abbildung 8.53 Verwendung eines DataGridView
Erstellen Sie ein neues Projekt. Gehen Sie genau so wie in der Anleitung des vorherigen Projekts vor. Wählen Sie jedoch in der Datenquellenanzeige im Aufklappmenü der Tabelle personen die Ansicht DataGridView, siehe Abbildung 8.54. Nunmehr können Sie alle Datensätze gleichzeitig sehen, ändern und speichern.
Abbildung 8.54 Tabellenansicht mit DataGridView
8.8.4 Mehrere Tabellen mit Relationen
In diesem Abschnitt wird mithilfe eines DataSets eine Anwendung (Projekt DBDataSetMehrereTabellen) mit Zugriff auf die Datenbank projektverwaltung.accdb erstellt. Diese Datenbank beinhaltet mehrere Tabellen und Relationen. Es soll möglich sein, auf die Datensätze der Tabelle projekt, die zugehörigen Datensätze der Tabelle projekt_person und dort über eine Auswahlliste auf den zugehörigen Nachnamen aus der Tabelle person zuzugreifen, also auf Daten aller drei miteinander verbundenen Tabellen, siehe Abbildung 8.55.
Abbildung 8.55 Zugriff auf Inhalte aus drei Tabellen
Die Erstellung:
- In einem neuen Projekt wird ein Element über den Menüpunkt Hinzufügen • Vorhandenes Element hinzugefügt: ein Link auf die Datei C:\Temp\projektverwaltung.accdb. Dabei werden alle Tabellen eingeschlossen. Damit steht ein DataSet zur Verfügung, der alle Tabellen und Relationen beinhaltet.
- Aus der Datenquellenansicht wird die Tabelle projekt in der Detail-Ansicht auf das Formular gezogen.
- Aus der Datenquellenansicht wird diejenige Tabelle projekt_person in der DataGrid-Ansicht auf das Formular gezogen, die in der Hierarchie eine Ebene unterhalb der Tabelle projekt steht, also die in Abbildung 8.56 markierte Tabelle. Damit werden nur die Datensätze der Tabelle projekt_person eingeblendet, die zum jeweiligen Datensatz der Tabelle projekt gehören.
Abbildung 8.56 Tabelle »projekt_person«, auf Tabelle »projekt« bezogen
- Über den kleinen Pfeil oben rechts am DataGrid lässt sich ein Konfigurationsmenü aufklappen, u. a. mit Zugang zu den Dialogfeldern Spalten bearbeiten (Edit Columns) und Spalten hinzufügen (Add Column), siehe Abbildung 8.57.
Abbildung 8.57 Konfigurationsmenü des DataGridView
- Im Dialogfeld Spalten bearbeiten entfernen Sie die beiden Spalten pr_id und pe_id. Sie sind für die Ansicht überflüssig bzw. ungünstig zu bedienen.
- Im Dialogfeld Spalten hinzufügen wählen Sie die Spalte pe_id, den Typ DataGridViewComboBoxColumn und den Headertext pe_nachname, siehe Abbildung 8.58. Damit ist eine weitere Spalte im DataGrid zu sehen, noch ohne Datenbindung und als letzte Spalte.
Abbildung 8.58 Hinzufügen einer neuen Spalte
- Im Dialogfeld Spalten bearbeiten verschieben Sie die neu hinzugefügte Spalte an die erste Stelle. Es werden die folgenden
Eigenschaften zur Datenbindung eingestellt, siehe Abbildung 8.59:
- DataSource: über Weitere Datenquellen die Tabelle person
- DisplayMember: das Feld pe_nachname
- ValueMember: das Feld pe_id
Abbildung 8.59 Eigenschaften der neuen Spalte
DisplayMember liefert die sichtbaren Werte (hier den Nachnamen), wenn der Benutzer die ComboBox aufklappt. ValueMember liefert die unsichtbaren zugehörigen Werte (hier die Personen-ID), über die eine Beziehung zu einer anderen Tabelle hergestellt wird.
Mit diesem Projekt steht Ihnen eine einfache Anwendung mit Zugriff auf Inhalte von drei miteinander verbundenen Tabellen zur Verfügung.
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.