HINWEIS
HINWEIS
HINWEIS
Kapitel 9: Fortgeschrittene Datenbankprogrammierung
td.Fields.Append fld
db.TableDefs.Append td
Set prop = fld.CreateProperty("TextFormat", 2, 1)
Setzen Sie den Wert auf 0, ist es ein reines Textfeld.
fld.Properties.Append prop
End Sub
Es handelt sich um eine zusätzlich zu erzeugende Eigenschaft, deshalb das Append.
Multivalue-Feld (MVF)
Sicher kennen auch Sie die typische Problemstellung einer m:n-Beziehung, die im Normalfall mit drei
Tabellen realisierbar ist:
Abbildung 9.11 Lösung mit drei
Tabellen
Für obiges Beispiel gilt: Ein Angestellter kann beliebig viele Hobbys haben, ein Hobby kann von beliebig
vielen Angestellten ausgeübt werden.
Mit Access 2007 wird das aus relationaler Sicht Unmögliche wahr und Sie können obige Aufgabenstellung
auch mit zwei Tabellen realisieren. Hier ist allerdings keine Hexerei am Werk, im Hintergrund werden nach
wie vor drei Tabellen verwaltet, dies ist jedoch für den Endanwender (und leider auch für den Programmie-
rer) nicht transparent.
Dieses Feature ist nur mit Datenbanken im Access 2007-Format realisierbar!
Allerdings ist die Verwendung von Multivalue-Feldern nicht ganz unproblematisch. Der Übersichtlichkeit
Ihrer Programme ist dieses »Feature« kaum zuträglich, ganz abgesehen davon, dass spätere Abfragen (SQL)
schnell zu fehlerhaften Ergebnissen führen können. Auch ein Export derartiger Daten wird (vom Share-
Point-Server abgesehen) schnell zum Geduldsspiel.
Als Beispiel wollen wir, ausgehend von obiger Lösung mit drei Tabellen, ein Multivalue-Feld erstellen, in
welchem für einzelne Mitarbeiter die Hobbys verwaltet werden.
528
HINWEIS
Erzeugen per Access-Editor
Erstellen Sie zunächst eine Tabelle Hobbys, die alle möglichen Hobbys in der Spalte Hobby aufnimmt.
Füllen Sie die Tabelle mit einigen Beispieldatensätzen:
Abbildung 9.12 Die Tabelle Hobbys
Nachfolgend können Sie sich der Tabelle AngestelltenHobbys zuwenden. Neben einem Primärschlüssel
(Zählerfeld) und einem Textfeld für den Namen des Mitarbeiters fügen Sie noch ein weiteres Feld Hobbys
mit Hilfe des Nachschlage-Assistenten hinzu.
Im ersten Schritt bestimmen Sie im Assistenten, dass die Werte einer Tabelle zu entnehmen sind:
Abbildung 9.13 Erster Schritt im
Nachschlage-Assistenten
In den nachfolgenden Schritten entscheiden Sie sich für die Tabelle Hobbys und dort für das Feld Hobby.
Eine extra Sortierfolge brauchen Sie nicht anzugeben. Bevor Sie die letzte Seite in einem Anfall von Flüch-
tigkeit mit »Ferti abschließen, sollten Sie noch einen Blick auf eine unscheinbare Option werfen, die in
diesem Dialog angezeigt wird (siehe Abbildung 9.14).
Markieren Sie die Option »Mehrere Werte zulassen«, um ein Multivalue-Feld zu erstellen.
529
Erstellen spezieller Feldtypen
BEISPIEL
Kapitel 9: Fortgeschrittene Datenbankprogrammierung
Abbildung 9.14 Letzter Schritt des
Nachschlage-Assistenten
Das war es bereits, Sie können Ihren Tabellenentwurf abspeichern und einen ersten Datensatz aufnehmen:
Abbildung 9.15 Erstellen eines ersten Datensatzes
Erzeugen per Code (DAO)
Wie im vorhergehenden Absatz per Assistent demonstriert, wollen wir jetzt per Code für einen Mitarbeiter
verschiedene Hobbys verwalten. Die Tabelle Hobbys (eine Spalte Hobby) ist bereits erstellt und mit einigen
Datensätzen gefüllt.
Über einige neue Konstanten der DAO DataTypeEnum (dbComplexByte, dbComplexLong, dbComplexText
...) können Sie die neuen Multivalue-Felder erzeugen.
Das Erstellen der Tabelle
AngestelltenHobbys
:
Sub MultiValueField()
Dim db As DAO.Database
Dim td As DAO.TableDef
Dim fld As DAO.field
Set db = CurrentDb()
530
HINWEIS
Set td = db.CreateTableDef("AngestelltenHobbys")
Eindeutiger Bezeichner (auf Primärkey verzichten wir an dieser Stelle):
Set fld = td.CreateField("Id", dbLong)
fld.Attributes = dbAutoIncrField
td.Fields.Append fld
Der Name des Mitarbeiters:
Set fld = td.CreateField("Mitarbeiter", dbText, 100)
td.Fields.Append fld
Das Feld für die Verwaltung der Hobbys:
Set fld = td.CreateField("Hobbys", dbComplexText, 255)
td.Fields.Append fld
db.TableDefs.Append td
Erst nach dem Anhängen an die Tabelle können die neuen Eigenschaften definiert werden.
Mehrfachwerte möglich:
fld.Properties.Append fld.CreateProperty("AllowMultipleValues", dbBoolean, True)
Die Detaildaten entstammen einer Tabelle:
fld.Properties.Append fld.CreateProperty("RowSourceType", dbText, "Table/Query")
Die Datenherkunft:
fld.Properties.Append fld.CreateProperty("RowSource", 12, "SELECT [Hobbys].[Hobby] FROM Hobbys;")
Die gebundene und anzuzeigende Spalte:
fld.Properties.Append fld.CreateProperty("BoundColumn", dbInteger, 1)
fld.Properties.Append fld.CreateProperty("ColumnCount", dbInteger, 1)
End Sub
Das war es bereits, Sie können jetzt die Tabelle AngestelltenHobbys öffnen und austesten.
Bemerkungen
Zunächst scheint auch alles wunderbar zu funktionieren. Doch ein erster Blick in die Beziehungen der
Datenbank bringt hervor, dass beide Tabellen aus Sicht des Anwender nicht in Beziehung stehen.
Dass dem auch so ist, werden Sie mit einem kleinen Test schnell feststellen.
Fügen Sie einen zusätzlichen Datensatz in die Tabelle AngestelltenHobbys ein und wählen Sie das Hobby
»Laufen«. Einer plötzlichen Eingebung folgend, wollen Sie jetzt das Hobby in »Waldlauf« umbenennen.
Dies funktioniert auch problemlos. Ein erneuter Blick in die Tabelle AngestelltenHobbys zeigt jetzt jedoch
immer noch das Hobby »Laufen«, neue Datensätze können jedoch mit »Waldlauf« erstellt werden.
531
Erstellen spezieller Feldtypen

Get Microsoft Office Access 2007-Programmierung - Das Handbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.