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 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:
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.
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.
' 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: 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:
Tipp: ' 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: 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:
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. Dieser Workshop wurde bereits 64.045 mal aufgerufen.
Anzeige
![]() ![]() ![]() (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. |
sevZIP40 Pro DLL ![]() Zippen und Unzippen wie die Profis! Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. Tipp des Monats ![]() Dieter Otter FlexGrid beim Klick auf den Spaltenbezeichner sortieren Man kennt es eigentlich von fast jedem Datengrid. Beim Klick auf den Spaltenbezeichner lässt sich der Inhalt der Liste nach dieser Spalte sortieren. Wie aber funktioniert das beim MSFlexGrid-Control? sevISDN 1.0 ![]() Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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. |