Datenbankzugriff

Grundsätzliches über Datenbanken

Visual Basic bietet einen Zugriff auf Datenbanken über die so genannte JET-Engine. Mit diesem Modul ist es möglich auf verschiedenste Datenbanken zuzugreifen. Am einfachsten ist das mit Access Datenbanken. Microsoft Access ist eine relationale Datenbank, d.h. sie beinhaltet i.A. mehrere Tabellen, die mit Verknüpfungen miteinander verbunden sind. Diese Verknüpfungen nennt man auch Relationen. Informationen aus diesen getrennten Tabellen können dann durch Abfragen wieder zusammengeführt werden.

Tabellen

Wie schon erwähnt ist eine relationale Datenbank in Tabellen organisiert. Eine Tabelle enthält beliebig viele Datensätze gleichen Aufbaus. Ein Datensatz besteht dabei aus einer festen Anzahl von Feldern mit festen Datentyp.
Ein Datensatz entspricht einem Record wie sie im ersten Kapitel eingeführt wurden. Eine Tabelle ist dann nichts anderes als ein eindimensionales Array aus diesen Records mit variabler Obergrenze. Eine Tabelle kann man sich wie gewohnt als eine Matrix vorstellen, in der die Zeilen die Datensätze, die Spalten die Felder sind. In der unteren Tabelle ist beispielhaft eine Tabelle mit Adressdaten dargestellt.

Datensatz Nummer Feld 1 : Name Feld 2 : Straße Feld 3 : PLZ
Datensatz 1 Ludwig Thoma Höllgasse 4711
Datensatz 2 J.W. von Goethe Schillerstraße 0815
Datensatz 3 ... ... ...


Neben den Nutzdaten, die die eigentlichen Informationen tragen, werden auch Verwaltungsinformationen benötigt. In Access wird ein weiteres Feld gebraucht, das den Datensatz eindeutig von den anderen in der Tabelle unterscheidet, also ein eindeutiger Schlüssel. Dieses Feld wird meist ID benannt.
Auf dieses Feld und auch auf andere Felder, die häufig als Such- oder Sortierfeld dienen, setzt man einen Index. Dadurch werden Such- und Sortieroperationen beschleunigt, dafür belegt der Index mehr Speicher als ein normales Feld und das Einfügen von Datensätzen wird etwas langsamer.

Relationen

Eine Relation definiert eine Verknüpfung zwischen zwei Tabellen. Realisiert wird das durch ein zusätzliches Feld in einer der beiden Tabellen, die als eindeutigen Verweis i.A. den Index des zugehörigen Datensatz aus der anderen Tabelle beinhaltet. Beispiel: Relationale Tabellen
Nehmen wir an, wir sollen eine Adressverwaltung schreiben und müssen dazu die Tabellen in einer relationalen Datenbank erstellen. Wir haben neben den Informationen Namen, Straße, PLZ und Ort auch die Information Telefon zu verwalten. Eine Person hat aber i.A. mehrere Telefonnummern (z.B. Privat, Geschäftlich, Handy). Würden wir versuchen diese Daten in einer Tabelle zu verwalten, so müssten wir uns entscheiden, wieviele und welche Nummern wir zulassen. Das wäre eine sehr unbeholfene und unbefriedigende Lösung. Darum legen wir die Telefonnumern in eine eigene Tabelle und müssen nur noch jede Telefonnummer eindeutig mit einer Adresse verknüpfen. Dies geschieht normalerweise über einen eindeutigen Index, der ID genannt wird. Diese ID's werden von Access selbst erzeugt.
Also könnten die Tabellen folgendermaßen aussehen: Tabelle: Adressen

AdressID Name Straße PLZ Ort
101 Ludwig Thoma Höll gasse 83278 Salzburg
102 J.W. von Goethe Schiller straße 0815 Weimar


Tabelle: Telefonnummern

TelefonID Kategorie Telefonnummer AdressID
291 Geschäftlich 71717161 101
292 Privat 262622 101
293 Handy 8222282 101
294 Privat 192863 102
295 ... ... ...


Die beiden Tabellen sind über das Feld AdressID eindeutig verknüpft. Zur ersten Adresse sind also drei Telefonnummern eingegeben worden. Zur zweiten nur eine. Durch diese Verweise können 1:1 und 1:n Verknüpfungen realisiert werden, d.h. einem Datensatz aus einer Tabelle wird genau ein Datensatz, bzw. n Datensätze zugeordnet. Verknüpfungen der Art n:m können nur durch eine Zwischentabelle implementiert werden.

Abfragen

Um auf diese Weise getrennte Tabellen wieder zusammenzuführen werden (Auswahl-)Abfragen benutzt. In einer eigens dafür definierten Sprache SQL können temporäre Ergebnistabellen erzeugt werden, die Informationen aus verschiedenen Tabellen gegenüberstellt. In Access gibt es zur Erleichterung Tools, mit deren Hilfe man Abfragen grafisch erstellen kann.
In diesem Rahmen kann nur ganz oberflälich auf Abfragen und SQL eingegangen werden, da sonst der Rahmen dieser Einführung bei weitem gesprengt würde Beispiel: Auswahlabfrage in SQL
In dem folgenden SQL-Statement werden alle Felder aus den Tabellen Adressen und Telefonnummern genommen. Die Tabellen werden dabei über das Feld AdressID verknüpft.

SELECT DISTINCTROW Adressen.*, Telefonnummern.* FROM Adressen INNER JOIN Telefon ON Telefonnummern.AdressID = Adressen.AdressID;

Das Ergebnis dieser Abfrage würde folgendermaßen aussehen:

ID Name Straße PLZ Ort Kat
23 Ludwig Thoma Höll gasse 83278 Salzburg Gesch
24 Ludwig Thoma Höll gasse 83278 Salzburg Privat
25 Ludwig Thoma Höll gasse 83278 Salzburg Handy
26 J.W. von Goethe Schiller straße 0815 Weimar Privat