vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Datenbanken   |   VB-Versionen: VB5, VB615.02.01
Einführung in die Datenbankprogrammierung mit VB Teil 1

Dieser Workshop richtet sich an alle Entwickler, die bisher zwar in Visual-Basic programmiert haben, jedoch mit der Datenbankprogrammierung noch nicht in Berührung gekommen sind.

Autor:  Dieter OtterBewertung:  Views:  64.310 

Dieser Workshop richtet sich an alle Entwickler, die bisher zwar in Visual-Basic programmiert haben, jedoch mit der Datenbankprogrammierung noch nicht in Berührung gekommen sind. Zunächst wird anhand einiger Beispiele gezeigt, für welche Aufgaben sich Datenbanken sinnvoll einsetzen lassen. Im Anschluß daran wird der Aufbau einer Datenbank Schritt für Schritt anhand eines konkreten Beispiels erläutert. Am Ende dieses Workshops sollten Sie in der Lage sein, eine Datenbank mit allen benötigten Tabellen und Feldern zu erstellen, Datensätze hinzuzufügen, zu bearbeiten und zu löschen.

Was ist eine Datenbank und wann lässt sich eine solche sinnvoll einsetzen?

Eine Datenbank ist nichts anderes als eine Ansammlung von Daten in einer einzelnen Datei. Bei den Daten kann es sich z.B. um Adressen, Artikel oder auch Termine handeln. Jede einzelne Adresse (Artikel oder auch Termin) steht stellvertretend für einen Datensatz. Ein Datensatz wiederum ist eine Ansammlung von einzelnen Daten-Informationen (Datenfeldern). Ein Adress-Datensatz besteht z.B. aus der Anrede, dem Namen, Vornamen, Straße, PLZ und dem Wohnort. Die Gesamtheit dieser Datenfelder bilden also einen Datensatz.

Sobald Sie viele solcher Datensätze verwalten müssen, ist es empfehlenswert hierfür eine Datenbank einzusetzen. Mit Hilfe der in Visual-Basic und den dazugehörigen Datenbank-Systemdateien vorhandenen Datenbankbefehle, lässt sich eine Datenbank mit verhältnismäßig geringem Aufwand erstellen und pflegen. Das Suchen nach bestimmten Informationen innerhalb des gesamten Datenbestandes erfolgt mit Hilfe der Datenbank-Routinen in nur wenigen Sekunden. Noch schneller von statten geht das Hinzufügen von neuen Datensätzen, das Ändern oder auch Löschen bestehender Daten.

Die Datenbankprogrammierung hat bei Visual-Basic einen sehr hohen Stellenwert. Daher wird Visual-Basic seit der Version 3.0 auch mit einer Datenbank-Engine ausgeliefert. Hierbei handelt es sich um die JET-Engine, welche auch in Microsoft Access verwendet wird. Die JET-Engine ist kein eigenständiges Programm, sondern liegt in Form von Systemdateien vor (DLLs), welche über ihre Objektschnittstelle DAO (DataAccessObject = Datenbankzugriffs-Objekt) angesprochen werden. Neben der DAO-Schnittstelle werden noch ODBC, OLE-DB und in der neuesten Version auch ADO unterstützt. Dieser Workshop konzentriert sich auf die Verwendung von DAO, da diese Schnittstelle bereits seit Visual-Basic 3.0 integriert ist und mit Sicherheit am häufigsten verwendet wird.

Der Einsatz und Aufbau einer Datenbank anhand eines konkreten Beispiels

So viel zur Theorie, nun zur Praxis. Anhand einer kleinen Adress-Datenbank wird nachfolgend der Einsatz und Aufbau einer Datenbank Schritt für Schritt erläutert.

Für jeden einzelnen Datensatz (Adresse) sollen folgende Informationen (Felder) gespeichert werden können:

Anrede, Name, Strasse, PLZ, Ort, Telefon, EMail

DAO-Verweis hinzufügen

Bevor Sie nun mit dem Erstellen des Datenbank-Grundgerüst beginnen, müssen Sie in Ihrem Visual-Basic Projekt zunächst den Verweis zur Datenbankschnittstelle (DAO) festlegen. Dies geschieht über den Menübefehl Projekt - Verweise. Markieren Sie den Eintrag "Microsoft DAO 3.51 Object Library", wie obiger Abbildung zu sehen und klicken dann auf OK. Nun stehen Ihnen in Ihrem Projekt alle benötigten Datenbankbefehle zur Verfügung

Erstellen der Adress-Datenbank - Datei

Zum Erstellen einer neuen Datenbankdatei gehen Sie wie folgt vor:

Dim Db As Database
Dim dbFile As String

dbFile = App.Path + "\ADRESS.MDB"
Set Db = Workspaces(0).CreateDatabase(dbFile, dbLangGeneral, _
  dbEncrypt + dbVersion30)

Zunächst muß eine Objekt-Variable vom Typ Database deklariert werden. Über die Objekt-Eigenschaft CreateDatabase wird eine leere Datenbankdatei erstellt. Als erster Parameter wird der vollständige Dateiname inkl. Pfadangabe erwartet. Der zweite Parameter gibt das Gebietsschema an, welches die Sortierreihenfolge der Datenbank angibt. Der dritte Parameter ist optional und gibt an, welche Version das Datenformat haben soll, und ob die Datenbank verschlüsselt werden soll oder nicht. Wenn Sie den dritten Parameter nicht angeben, wird eine unverschlüsselte Datenbank erstellt und das Dateiformat des JET-Datenbankmoduls Version 3.0 verwendet.

Die möglichen Konstanten für den dritten Parameter sind folgende:

dbEncryptErstellt eine verschlüsselte Datenbank
dbVersion10Dateiformat des JET-Datenbankmoduls Version 1.0 verwenden
dbVersion11Dateiformat des JET-Datenbankmoduls Version 1.1 verwenden
dbVersion20Dateiformat des JET-Datenbankmoduls Version 2.0 verwenden
dbVersion30Dateiformat des JET-Datenbankmoduls Version 3.0 verwenden

Die CreateDatabase-Methode erstellt und öffnet eine neue leere Datenbank und gibt das Database-Objekt zurück. Nur das Erstellen einer Datenbank-Datei reicht jedoch nicht aus, um Datensätze darin speichern zu können. Innerhalb einer Datenbank muß immer mindestens eine Datenbank-Tabelle erstellt werden, für welche dann die entsprechende Datensatz-Struktur festgelegt werden kann. Erst dann lassen sich Datensätze in der Datenbank speichern.

Erstellen der Datenbank-Tabelle mit allen benötigten Datenfeldern

Zum Erstellen einer Datenbank-Tabelle gehen Sie wie folgt vor:

Dim Tabelle As New TableDef
Dim Feld As New Field
 
Tabelle.Name = "Adressen"
 
' Datenfeld #1
Feld.Name = "AdressNr"
Feld.Type = dbLong
Feld.Attributes = dbAutoIncrField
Tabelle.Fields.Append Feld
Set Feld = Nothing
 
' Datenfeld #2
Feld.Name = "Anrede"
Feld.Type = dbText
Feld.Size = 20
Feld.AllowZeroLength = True
Tabelle.Fields.Append Feld
Set Feld = Nothing
 
' Datenfeld #3
Feld.Name = "Name"
Feld.Type = dbText
Feld.Size = 50
Feld.AllowZeroLength = True
Tabelle.Fields.Append Feld
Set Feld = Nothing
 
' Datenfeld #4
Feld.Name = "Strasse"
Feld.Type = dbText
Feld.Size = 35
Feld.AllowZeroLength = True
Tabelle.Fields.Append Feld
Set Feld = Nothing
 
' Datenfeld #5
Feld.Name = "PLZ"
Feld.Type = dbText
Feld.Size = 8
Feld.AllowZeroLength = True
Tabelle.Fields.Append Feld
Set Feld = Nothing
 
' Datenfeld #6
Feld.Name = "Ort"
Feld.Type = dbText
Feld.Size = 40
Feld.AllowZeroLength = True
Tabelle.Fields.Append Feld
Set Feld = Nothing
 
' Datenfeld #7
Feld.Name = "Telefon"
Feld.Type = dbText
Feld.Size = 25
Feld.AllowZeroLength = True
Tabelle.Fields.Append Feld
Set Feld = Nothing
 
' Datenfeld #8
Feld.Name = "EMail"
Feld.Type = dbText
Feld.Size = 50
Feld.AllowZeroLength = True
Tabelle.Fields.Append Feld
Set Feld = Nothing
 
Db.TableDefs.Append Tabelle
Db.Close
 
Set Tabelle = Nothing
Set Db = Nothing

Zunächst muß eine Objekt-Variable vom Typ TableDef ("TableDefinition = Tabellendefinition") deklariert werden. Um die Datenbank-Tabelle eindeutig innerhalb der Datenbank-Datei referenzieren zu können, wird über die Name-Eigenschaft ein eindeutiger Name festgelegt. Im Anschluß daran legen Sie die Datensatz-Struktur fest, indem Sie alle benötigten Datenfelder der Reihe nach der Datenbank-Tabelle hinzufügen.

Um ein Datenfeld festlegen zu können müssen Sie eine Objekt-Variable vom Typ New Field deklarieren. Diese Objekt-Variable besitzt mehrere Eigenschaften, wie Name, Type und Attributes.

Die Name-Eigenschaft ist selbsterklärend und gibt den Namen des Feldes an. Zu beachten ist, daß jedes Feld innerhalb der Datenbank-Tabelle einen eindeutigen Namen besitzen muss.

Die Type-Eigenschaft bestimmt den Feldtyp, d.h. sie legt fest, welche Art von Daten in diesem Feld gespeichert werden.

Nachfolgend finden Sie eine Übersicht der am häufigsten verwendeten Feldtypen.

dbIntegerInteger-Zahl
dbLongLong-Integer-Zahl
dbBooleanTrue/False
dbCurrencyWährungsfeld (Betragsfeld)
dbDateDatum/Uhrzeit-Feld
dbTextText
dbMemoBemerkungen (lange Texte)

Es gibt noch zahlreiche weitere Feldtypen, welche allerdings eher seltener benötigt werden. Detailierte Informationen über alle möglichen Feldtypen finden Sie in der Online-Hilfe von Visual-Basic.

Die Eigenschaft Size gibt die Feldlänge an (Anzahl Zeichen, die gespeichert werden können) und wird nur benötigt, wenn es sich um ein Feld vom Typ dbText handelt. Die maximale Größe ist auf 255 Zeichen begrenzt.

Handelt es sich bei dem Datenfeld um ein Feld vom Typ dbText oder dbMemo, so kann über die AllowZeroLength-Eigenschaft bestimmt werden, ob "leere" Felder zulässig sind oder nicht. Wird diese Eigenschaft nicht angegeben, wird automatisch der Wert False angenommen. Dies kann ungewollte Fehler hervorrufen. So wird z.B. beim Versuch einen Datensatz mit leerem Datenfeld zu speichern, ein Laufzeitfehler ausgelöst, d.h. der Datensatz kann nicht gespeichert werden. Es ist also ratsam, der AllowZeroLength-Eigenschaft grundsätzlich den Wert True zuzuweisen.

Über die Attributes-Eigenschaft können Sie festlegen, ob es sich bei dem Datenfeld um einen Zähler mit automatischer fortlaufender Numerierung handelt. Wird für Attributes der Wert dbAutoIncrField festgelegt, so wird der Feldinhalt bei jedem neuen Datensatz automatisch um eins erhöht. Der Feldinhalt kann nicht durch den Anwender verändert werden, da dieses Feld vom JET-Datenbankmodul verwaltet wird. Ein Feld, für das die Attributes-Eigenschaft auf dbAutoIncrField gesetzt wird, muß immer vom Typ dbLong sein.

Nachdem alle benötigten Feld-Eigenschaften festgelegt sind, wird das Feld über die Append-Methode der Datenbank-Tabelle hinzugefügt. Bevor Sie dann das nächste Feld erstellen, müssen Sie die Objekt-Variable Feld auf Nothing setzen.

Nachdem nun die Datenbank-Tabelle alle relevanten Datenfelder beinhaltet, muß die Datenbank-Tabelle letztendlich noch der Datenbank-Datei hinzugefügt werden. Dies geschieht über den Befehl:

Db.TableDefs.Append Tabelle

Über die Methode Db.Close wird die Datenbank geschlossen. Nach dem Hinzufügen der Datenbank-Tabelle können Sie die Objekt-Variable Tabelle durch Setzen auf Nothing wieder freigeben. Ebenso verfahren Sie mit der Objekt-Variable Db, um den belegten Speicher vollständig freizugeben.

Das waren alle notwendigen Schritte, um eine Datenbank inkl. der Datenbank-Tabelle und alle benötigten Datenfelder zu erstellen.

Öffnen und Schließen einer Datenbank

Zum Öffnen und Schließen einer Datenbank stellt Ihnen das JET-Datenbankmodul folgende Befehle zur Verfügung:

' Datenbank öffnen
Dim Db As Database
Dim Tabelle As Recordset
Dim dbFile As String
 
dbFile = App.Path + "\ADRESS.MDB"
Set Db = Workspaces(0).OpenDatabase(dbFile, False, False)
Set Tabelle = Db.OpenRecordset("Adressen")

Die Methode OpenDatabase erwartet als ersten Parameter den genauen und vollstänfigen Dateinamen der Datenbank. Der zweite Parameter ist optional und legt den Zugriffsmodus zu. Geben Sie hier True an, so wird die Datenbank exklusiv geöffnet, d.h. keine andere Anwendung bzw. kein anderer Anwender kann die Datenbank zusätzlich öffnen. Wird nichts angegeben oder False, wird die Datenbank im "geteilten" Modus geöffnet, d.h. sie kann von mehreren Anwendungen und/oder Anwendern benutzt werden. Der dritte Paramater ist ebenfalls optional und legt das Schreibschutzrecht fest. True bedeutet, daß die Datenbank schreibgeschützt geöffnet werden soll, d.h. die Datensätze können nur gelesen werden. Wird nichts angegeben oder False, so wird die Datenbank mit Schreib-/Lese-Zugriff geöffnet.

Da jede ACCESS-Datenbank mehrere Datenbank-Tabellen enthalten kann, müssen Sie - bevor Sie auf irgendwelche Datensätze zugreifen bzw. neue Datensätze speichern können - zunächst noch die entsprechende Datenbank-Tabelle öffnen. Hierfür dient die Methode OpenRecordset, welche auf die Datenbank-Objekt-Variable Db angewandt wird. Als Parameter wird der Tabellennamen erwartet.

' Datenbank schließen
Tabelle.Close
Db.Close
Set Tabelle = Nothing
Set Db = Nothing

Das Schließen einer Datenbank-Tabelle und/oder der gesamten Datenbank erfolgt über die Methode Close. Bevor die Datenbank-Datei geschlossen wird, sollten immer zunächst alle geöffneten Datenbank-Tabellen geschlossen werden. Um auch wirklich den gesamten belegten Speicher wieder freizugeben, ist es ratsam die Objekt-Variablen auf Nothing zu setzen.

Anlegen eines neuen Datensatzes und Speichern der Datenfelder in der Datenbank

Im nachfolgenden wird gezeigt, wie Sie neue Datensätze in der Datenbank speichern können. Hierfür sind nur wenige Befehle notwendig. Zunächst muß jedoch sichergestellt werden, daß die Datenbank und die entsprechende Datenbank-Tabelle geöffnet ist (Vorgehensweise siehe weiter oben). Das Tabellen-Objekt stellt Ihnen dann alle notwendigen Befehle (Methoden) zur Verfügung.

' Neuen Datensatz hinzufügen
Tabelle.AddNew
Tabelle("Anrede") = "Herrn"
Tabelle("Name") = "Dieter Otter"
Tabelle("Strasse") = "Riemenschneiderstr. 32"
Tabelle("PLZ") = "97708"
Tabelle("Ort") = "Steinach"
Tabelle("Telefon") = ""
Tabelle("Email") = "info@vbarchiv.de"
Tabelle.Update

Über die Methode AddNew wird der Datenbank-Tabelle mitgeteilt, daß ein neuer Datensatz hinzugefügt werden soll. Im Anschluß daran werden die einzelnen Datenfelder mit den entsprechenden Inhalten belegt. Die Felder können entweder über deren Index (0...n) oder über deren Feldnamen (in Anführungszeichen) "angesprochen" werden. Nachdem alle Datenfelder belegt wurden, wird der Datensatz mit der Update-Methode gespeichert.

Beispielsformular für eine Adress-Eingabemaske
Das "Belegen" der einzelnen Datenfelder kann auch über eine Schleife realisiert werden. Wenn Sie z.B. ein Formular mit einheitlichen Eingabefeldern (Array) für die Anschrift erstellt haben, kann der Datensatz auch folgendermaßen gespeichert werden:

' Neuen Datensatz hinzufügen
Dim i As Integer
 
Tabelle.AddNew
For i = 1 To 7
  Tabelle(i) = Text1(i).Text
Next i
Tabelle.Update

Kleiner Tipp:
Nach dem Hinzufügen eines neuen Datensatzes befindet sich der Datenbank-Zeiger nicht automatisch auf den neuen Datensatz. Dies können Sie jedoch ändern, indem Sie nach der Update-Methode folgenden Code einfügen:

Tabelle.Bookmark = Tabelle.LastModified

Über die Eigenschaft Bookmark läßt sich das "Lesezeichen" (Datenbank-Zeiger) ermitteln und auch ändern. Wenn Sie dieser Eigenschaft die LastModified-Eigenschaft zuweisen, wird der Datenbank-Zeiger auf den zuletzt bearbeiteten Datensatz gesetzt - also auf den Datensatz, der ja eben neu hinzugekommen ist.

Blättern innerhalb der Datenbank-Tabelle

Zum Bewegen innerhalb der Datenbank-Tabelle stehen folgende Methoden zur Verfügung:

Tabelle.MoveFirstWechselt zum ersten Datensatz
Tabelle.MovePreviousEinen Datensatz zurückblättern
Tabelle.MoveNextEinen Datensatz vorblättern
Tabelle.MoveLastWechselt auf den letzten Datensatz

Tipp:
Bevor Sie die "Blättern"-Befehle anwenden, sollten Sie immer prüfen, ob ein Blättern überhaupt möglich ist.

' Ersten Datensatz anzeigen
If Tabelle.RecordCount > 0 And Not Tabelle.BOF Then _
  Tabelle.MoveFirst
 
' vorigen Datensatz anzeigen
If Tabelle.RecordCount > 0 And Not Tabelle.BOF Then _
  Tabelle.MovePrevious
 
' Nächsten Datensatz anzeigen
If Tabelle.RecordCount > 0 And Not Tabelle.EOF Then _
  Tabelle.MoveNext
 
' Letzten Datensatz anzeigen
If Tabelle.RecordCount > 0 And Not Tabelle.EOF Then _
  Tabelle.MoveLast

Über die RecordCount-Eigenschaft wird die Anzahl der gespeicherten Datensätze abgefragt. Die Eigenschaft BOF (True/False) gibt zurück, ob sich der Datenbank-Zeiger bereits auf den ersten Datensatz befindet. Analog hierzu gibt die Eigenschaft EOF (True/False) zurück, ob sich der Datenbank-Zeiger bereits auf den letzten Datensatz befindet. BOF steht für Begin Of File und EOF für End Of File.

Bearbeiten von Datensätzen

Das nachträgliche Bearbeiten eines bestimmten Datensatzes setzt voraus, daß der Datenbank-Zeiger auf den zu bearbeitenden Datensatz "bewegt" wird. Dies erfolgt über die zuvro in diesem Workshop erklärten Befehle zum Blättern innerhalb der Datenbank-Tabelle. Befindet sich der Datenbank-Zeiger nun auf dem entsprechenden Datensatz, kann dieser folgendermassen verändert werden.

Eingeleitet wird der "Bearbeiten-Modus" durch den Befehl Edit. Dann weisen Sie den betroffenen Datenfeldern die neuen Feldinhalte zu. Über den Befehl Update werden die Änderungen dauerhaft gespeichert.

' aktuellen Datensatz bearbeiten
Tabelle.Edit
Tabelle("Name") = "Otter Dieter"
Tabelle("Ort") = "Bad Bocklet/Steinach"
...
Tabelle.Update

Im Gegensatz zum Hinzufügen neuer Datensätze müssen Sie den Datenbank-Zeiger beim Bearbeiten nicht mittels der Bookmark und LastModified-Eigenschaft auf den geänderten Datensatz setzen.

Löschen von Datensätzen

Das Löschen von Datensätzen ist recht einfach. Über die Methode Delete wird der aktuelle Datensatz gelöscht.

' aktuellen Datensatz löschen
Tabelle.Delete

Um z.B. den siebten Datensatz der Datenbank-Tabelle zu löschen, verwenden Sie folgenden Code:

Tabelle.MoveFirst
For i = 1 To 6
  Tabelle.MoveNext
Next i
Tabelle.Delete

Zunächst wird der Datenbank-Zeiger auf den ersten Datensatz gesetzt. Dann wird sechsmal "vorgeblättert", so daß sich der Datenbank-Zeiger auf dem siebten Datensatz befindet. Jetzt kann der Löschen-Befehl ausgeführt werden.

Hinweis:
Nach dem Löschen zeigt der Datenbank-Zeiger auf einen "Null-Datensatz", da der aktuelle Datensatz gelöscht wurde. Um den Datenbank-Zeiger auf den nächsten Datensatz zu setzen, verwenden Sie folgende Codezeilen:

If Not Tabelle.Eof Then
  Tabelle.MoveNext
Else
  Tabelle.MoveLast
End If

Zusammenfassung

Sie sollten nun in der Lage sein, mittels der hier vorgestellten Befehle, Methoden und Eigenschaften, eine eigene Datenbank zu erstellen, eine Datenbank-Tabelle mit den benötigten Datenfelder anzulegen und Datensätze hinzuzufügen, ändern und zu löschen.

Nochmals zur Erinnerung:
CreateDatabaseNeue "leere" Datenbank-Datei erstellen
OpenDatabaseDatenbank öffnen
CloseDatenbank/Tabelle schließen
 
TableDef-ObjektTabellen-Definition festlegen
Field-ObjektTabellen-Feld-Definition
Append-MethodeFeld/Tabelle hinzufügen
 
OpenRecordsetDatenbank-Tabelle öffnen
 
AddNew/UpdateNeuen Datensatz hinzufügen
Bookmark/LastModifiedDatenbank-Zeiger auf den zuletzt bearbeiteten Datensatz setzen
Edit/Updateaktuellen Datensatz bearbeiten
 
MoveFirstzum ersten Datensatz blättern
MovePreviouseinen Datensatz zurückblättern
MoveNexteinen Datensatz vorblättern
MoveLastzum letzten Datensatz blättern
RecordCountAnzahl Datensätze ermitteln
BofPrüfen, ob aktueller Datensatz der erste Datensatz ist
EofPrüfen, ob aktueller Datensatz der letzte Datensatz ist

Vorschau Teil 2

Im zweiten Teil dieses Workshops werden Sie verschiedene Möglichkeiten kennenlernen, um Datensätze schnell aufzufinden. Hierzu werden bestimmte Datenfelder indiziert, d.h. es werden Indexfelder angelegt, mit deren Hilfe Datensätze in einem Bruchteil einer Sekunde gesucht werden können. Außerdem erfahren Sie, wie eine Datenbank-Tabelle nach bestimmten Datenfeldern sortiert werden kann.



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Workshops finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.