Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 2/2001.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Ihren XING-Kontakten zeigen

Diesen Beitrag Ihrem XING-Kontakten vorstellen

Diesen Beitrag auf Facebook teilen

Verwandte Beiträge:

Arrays, Collections und Dictionarys

Textvorlagen mit Daten füllen

Alle verwandten Beiträge ansehen ...

Bisherige Kommentare:

Noch keine Kommentare vorhanden.

Alle Kommentare ansehen oder Kommentar abgeben

Über den Autor:

André Minhorst

Bitte nutzen Sie das XING-Profil nicht
für Fragen zum Artikel, sondern nur für
den Kontaktaustausch beziehungsweise
Projekt- oder Supportanfragen.

Datenfelder und deren Alternativen

Verwaltung von Daten ohne Tabelle

Autor: André Minhorst, Duisburg

Einige Anwendungen erfordern die temporäre Verwaltung von Daten - d.h., die Daten werden im Programmverlauf ermittelt, für einen bestimmten Zweck verwendet und anschließend wieder gelöscht. Selbstverständlich könnte man für solche Fälle Tabellen anlegen, die Daten während der Bearbeitung darin speichern und die Tabelle anschließend wieder löschen. Das ist aber erstens aufwendig und zweitens wächst die Größe der Datenbank schnell ins Unermessliche, wenn der Anwender sie nicht regelmäßig komprimiert. Daher verwenden Sie entweder Datenfelder - sogenannte Arrays - oder die seit Access 2000 verfügbaren ungebundenen Datensatzgruppen.

Verwendung von Datenfeldern

Datenfelder (im Fachjargon: Arrays) dienen zum Speichern mehrerer Werte in einer einzigen Variablen. So können Sie sich - im Gegensatz zu einfachen Variablen - eine Menge Deklarationen und Wertzuweisungen speichern.

Gültigkeitsbereiche von Datenfeldern

Datenfelder haben einen Gültigkeitsbereich, der wie bei allen anderen Variablen von der Art der Deklaration abhängt. Dabei gibt es prinzipiell drei Möglichkeiten:

  • Das Datenfeld soll im ganzen Anwendungsbereich verfügbar sein. Deklarieren Sie das Datenfeld dann mit der Public-Anweisung im Deklarationsteil eines Moduls.
  • Das Datenfeld soll innerhalb eines Moduls verfügbar sein. Deklarieren Sie das Datenfeld mit der Private-Anweisung im Deklarationsteil des gewünschten Moduls.
  • Das Datenfeld soll nur innerhalb einer Prozedur oder Funktion verfügbar sein. Deklarieren Sie das Datenfeld dann mit der Private-Anweisung innerhalb der gewünschten Prozedur oder Funktion.
  • Statische und dynamische Datenfelder

  • Datenfelder können als statische oder dynamische Variablen deklariert werden. Der Unterschied ist, dass Sie bei statischen Datenfeldern bereits bei der Deklaration wissen müssen, wie viele Elemente das Datenfeld enthalten soll.
  • Statische Datenfelder

  • Das ist z.B. der Fall, wenn Sie die Namen aller Monate in einem Datenfeld speichern möchten. In dem Fall wissen Sie vorher, dass es sich um zwölf Elemente handelt. Die Deklaration lautet dann folgendermaßen:
  • Dim Monatsnamen(12) as String

    Zumindest lautet die Deklaration so, wenn Sie davon ausgehen, dass die einzelnen Daten von der Zahl Eins ausgehend durchnummeriert werden. Das ist aber standardmäßig nicht der Fall: Stattdessen beginnt der Index für Datenfelder bei der Zahl Null. Und da Sie mit der Zahl 12 die obere Bereichsgrenze angegeben haben, können Sie nun theoretisch 13 Daten in das Datenfeld eingeben - von 0 bis 12.

    Um die Anzahl der Elemente des Datenfeldes nun tatsächlich auf den Wert 12 festzulegen, gibt es zwei Möglichkeiten. Entweder setzen Sie die obere Grenze auf den Wert 11, wie in folgender Anweisung:

    Public Monatsnamen(11) As String

    Oder Sie setzen die untere Bereichsgrenze auf den Wert 1. Dazu verwenden Sie den folgenden Befehl und setzen gleichzeitig wieder die obere Grenze auf den Wert 12:

    Option Base 1

    Public Monatsnamen(12) As String

    Auf diese Weise können Sie nun die Monatsnamen von 1 bis 12 durchnummeriert in die gewünschte Variable einlesen. Dazu verwenden Sie eine kleine Prozedur:

    Sub MonatsnamenZuweisen()

        Monatsnamen(1) = "Januar"

        Monatsnamen(2) = "Februar"

        ....

        Monatsnamen(12) = "Dezember"

        

    End Sub

    Wenn Sie allerdings einen Monatsnamen eingeben möchten, dessen Index außerhalb des angegebenen Bereichs liegt, erscheint eine Fehlermeldung (Abb. 1). Um das zu testen, geben Sie einfach im Testfenster die folgende Anweisung ein:

    Monatsnamen(13) = "Fantasiemonat"

    Abb. 1: Fehlermeldung nach der Eingabe eines unzulässigen Feldindizes

    Sie können die eingelesenen Monatsnamen nun beispielsweise mit der folgenden Anweisung ausgeben lassen:

    Debug.Print Monatsnamen(1)

    Oder Sie verwenden eine kleine Prozedur, um alle Monate auszugeben:

    Sub MonateAusgeben()

        Dim i As Integer

        For i = 1 To 12

            Debug.Print "Name des " _

                & i & ".ten Monats: " _

                & Monatsname(i)

        Next

    End Sub

    Die Angabe der unteren Grenze mit der Option Base-Anweisung können Sie allerdings auch umgehen, falls Sie mehrere Datenfelder verwenden und nicht alle die gleiche Untergrenze haben sollen. Geben Sie dazu die Untergrenze und die Obergrenze explizit in der Deklaration des Datenfeldes an:

    Public Monatsname(1 to 12) As String

    Sie können die Monatsnamen auch direkt als Liste eingeben. Dazu verwenden Sie die Array-Funktion. Die Funktion arbeitet allerdings nur mit Variant-Variablen, daher müssen Sie zuvor eine entsprechende Variable deklarieren:

    Public Monatsname As Variant

    Anschließend können Sie der Variablen mit dem folgenden Befehl die gewünschte Monatsliste zuweisen:

    Monatsname = Array("Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember")

    In den bisherigen Beispielen haben Sie lediglich eindimensionale Datenfelder kennengelernt. Sie können aber auch zweidimensionale Datenfelder verwenden. Das ist z.B. sinnvoll, wenn Sie zu den Monatsnamen auch noch die jeweilige Anzahl Tage speichern möchten. Die Deklaration für ein solches Datenfeld sieht folgendermaßen aus:

    Public Monatsdaten(1 To 12, 1 To 2) As Variant

    Wahrscheinlich fragen Sie sich nun, warum das Datenfeld als Variant deklariert wird. Der Grund ist, dass man für das komplette Feld nur einen Datentyp angeben kann. Da die Anzahl der Tage eines Monats im Datenformat String nicht besonders sinnvoll erscheint, verwenden Sie hier den Datentypen Variant. Für Daten dieses Datentyps können beliebige Formate mit Ausnahme von Zeichenketten fester Länge und benutzerdefinierter Datentypen verwendet werden.

    Die Zuweisung der Daten eines zweidimensionalen Feldes erfolgt beispielsweise wie in folgender Prozedur:

    Sub MonatsdatenZuweisen()

        Monatsdaten(1, 1) = "Januar"

        Monatsdaten(2, 1) = "Februar"

        ....

        Monatsdaten(12, 1) = "Dezember"

        

        Monatsdaten(1, 2) = 31

        Monatsdaten(2, 2) = 28

        ....

        Monatsdaten(12, 2) = 31

    End Sub

    Zusätzlich zu den Monatsnamen enthält das Datenfeld nun noch die Anzahl Tage des jeweiligen Monats. Das Feld sieht nun etwa folgendermaßen aus:

    Monatsdaten(X,Y)

    Y=1

    Y=2

    X=1

    Januar

    31

    X=2

    Februar

    28

    ...

    ...

    ...

    X=3

    Dezember

    31

    Auf die beschriebene Weise können Sie beliebig große Felder anlegen.

    Dynamische Datenfelder

    Dynamische Datenfelder können Sie verwenden, wenn Sie bei der Deklaration noch nicht genau wissen, wie viele Daten das Feld aufnehmen soll.

    Wenn Sie beispielsweise Daten aus einer Textdatei einlesen möchten, aber nicht wissen, wie viele Zeilen die Datei enthält, ist ein dynamisches Datenfeld die richtige Wahl.

    Für das folgende Beispiel legen Sie bitte eine Textdatei wie in Abb. 2 an.

    Abb. 2: Textdatei mit einer Liste von Namen und Altersangaben

    Die im folgenden vorgestellte Anwendung soll die Daten in einer Tabelle namens tblAltersangaben speichern. Sie fragen nun zu Recht, warum man die Einträge nicht direkt in eine geeignete Tabelle schreiben kann. Der Grund ist, dass man zunächst die Informationen einer Zeile mit einer geeigneten Funktion auseinandernehmen muss. Daher liest man den Inhalt der Textdatei zunächst in ein geeignetes Datenfeld ein. Anschließend übergibt man das Feld an eine Funktion zum Extrahieren der einzelnen Elemente einer Zeile. Anschließend kann man die Informationen in die einzelnen Felder einer Tabelle schreiben.

    Mit der folgenden Prozedur können Sie die einzelnen Zeilen einer Textdatei in das Datenfeld Spalte einlesen:

    Sub TextdateiLesen()

        Dim Spalte(1 To 10) As String

        Dim i As Integer

        Open "c:\Alter.txt" For Input As #1

        i = 1

        While Not EOF(1)

            Line Input #1, Spalte(i)

            i = i + 1

        Wend

        Close #1

        For i = 1 To 10

            Debug.Print Spalte(i)

        Next i

    End Sub

    Im vorliegenden Fall ist das Datenfeld allerdings statisch festgelegt und kann nur zehn Elemente enthalten.

    Dementsprechend erhalten Sie eine Fehlermeldung, sobald die Datei mehr als zehn Einträge enthält. Bevor Sie aber nun für das Datenfeld eine entsprechend hohe Menge Speicherplatz reservieren und anschließend nur einen Bruchteil davon benötigen, deklarieren Sie das Datenfeld lieber als dynamisches Datenfeld. Der einzige Unterschied zur Deklaration eines statischen Datenfeldes ist, dass Sie weder die untere noch die obere Grenze des Datenfeldes angeben, sondern einfach eine leere Klammer angeben:

    Dim Spalte() as String

    Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

    Sie sind nicht angemeldet!
    Für den kompletten Artikel plus Beispieldatenbanken müssen Sie sich einloggen!
    Jetzt einloggen ...
     

    Sie haben keine Benutzerdaten? Na, dann aber schnell:

    Benutzerdaten erhalten Sie auf zwei Arten:

    1. Testen Sie das Online-Archiv von 'Access im Unternehmen' für eine Woche. Sie müssen Sie lediglich für den 'Access im Unternehmen'-Newsletter anmelden.
    Ja, ich will den einwöchigen Testzugang und den Newsletter!

    2. Greifen Sie ein ganzes Jahr auf das Online-Archiv zu und erhalten Sie zusätzlich alle zwei Monate das brandneue "Access im Unternehmen"-Magazin - für nur EUR 108,-* im Jahr!
    Ja, ich will Access im Unternehmen bestellen!

     

    * inkl. MwSt., zzgl. Versandkostenpauschale, EUR 140,- inkl. MwSt., zzgl. Versandkostenpauschale ab dem zweiten Jahr

    Verwandte Beiträge:

    Arrays, Collections und Dictionarys

    Textvorlagen mit Daten füllen

    © 2003-2010 André Minhorst Alle Rechte vorbehalten.