Datenstruktur

[ Variablen | Statische Variablen | Konstanten | Datenfelder (Arrays) | Dynamische Datenfelder ]


Variablen

Variablen sind Datenstrukturen, die für die Speicherung von Informationen verwendet werden. Es gibt zwei Haupttypen von Information, die gespeichert werden kann: Zahlen und Text. Bevor eine Variable benutzt werden kann, muß sie zuerst erstellt werden:

  Dim VariablenName As Type
Beispiel:
  Dim Anzahl As Long
  Dim ZeitschriftenTitel As String

Typ Zulässiger Umfang
Integer von -32,768 bis 32,767
Long von -2,147,483,648 bis 2,147,483,647
Single von -3.402823E38 bis -1.401298E-45
von 1.401298E-45 bis 3.402823E38
Double von -1.79769313486232D308 bis -4.94065645841247D-324
von 4.94065645841247D-324 bis 1.79769313486232D308
Currency von -922337203685477.5808 bis 922337203685477.5807
String von 0 bis 65000 bytes
Variant Datumswerte: 01.01.0000 bis 31.12.9999
Numerisch: wie Double
Zeichenkette: wie String
Wird eine neue Variable ohne Angabe des Typs deklariert, dann wird sie automatisch als Variant erstellt.

Sobald eine neue Variable erstellt worden ist, kann ihr ein Wert zum Speichern zugewiesen werden. Um dies zu tun wird der Operator '=' verwendet. Das erste Beispiel weist einer Variable eine Konstante zu, während das zweite den zehnfachen Inhalt einer anderen Variable zuweist.

Beispiel 1: Preis = 19.95
Beispiel 2: GesamtPreis = Preis * 10

Die Reichweite einer Variable ist als ihr Wirkungsbereich definiert. Es gibt drei Arten von Variablen-Reichweite:

  1. Lokale Variablen - Die Variable kann nur innerhalb der aktuellen Prozedur verwendet werden (deklarieren mit Dim innerhalb der Prozedur).
  2. Variablen auf Modulebene - Die Variable kann nur in sämtlichen Prozeduren innerhalb der aktuellen Form oder Modul verwendet werden (deklarieren mit Dim im Deklarationen-Abschnitt einer Form oder Modul).
  3. Globale Variablen - Die Variable kann in jeder Prozedur in jedem Modul verwendet werden (deklarieren mit Public im Deklarationen-Abschnitt einer Form oder Modul).
Anmerkungen

Variablen, die mit Dim auf Modulebene deklariert wurden, stehen allen Prozeduren des Moduls zur Verfügung. Auf Prozedurebene deklarierte Variablen stehen nur innerhalb der umgebenden Prozedur zur Verfügung.
Auf Variablen, die mit der Anweisung Public deklariert wurden, kann von allen Prozeduren in allen Modulen aus allen Projekten zugegriffen werden.

Statische Variablen

Es ist nützlich, Variablen und Datenfelder (siehe unten) als lokal zur aktuellen Prozedur/Funktion zu deklarieren, denn dadurch werden ungewollte Nebeneffekte minimiert, die bei globalen Variablen auftreten können. Visual Basic stellt bei lokalen Variablen zwar Speicherplatz für den Inhalt einer Variable bereit wenn der Befehl Dim ausgelesen wird, jedoch wird am Ende der entsprechenden Prozedur (End Sub) dieser Speicherplatz samt Variableninhalt wieder gelöscht. Tragen Sie den folgenden Code bei einer Schaltfläche ein. und beobachten Sie, welche Werte ausgegeben werden:

  Private Sub Command1_Click ()
    Dim Zahl As Integer           ' Erstellen einer normalen lokalen Variable

    Zahl = Zahl + 1
    Print Zahl
  End Sub

Nach einigen Clicks auf die Schaltflächen sollten sie eine Reihe von Einsen entlang dem linken Rand der Form sehen. Der Wert wird nie 1 übersteigen, selbst wenn 1 jedesmal zu der Variable hinzugezählt wird. Das ist deswegen der Fall, weil bei jedem Abarbeiten der Prozedur durch das Clicken auf die Schaltfläche VB mit einer anderen Variable arbeitet, die zwar den gleichen Namen im Programm hat, aber irgendwoanders im Speicherbereich bereitgestellt und anschließend wieder gelöscht wird. Um dies zu unterbinden, geben Sie das Schlüsselwort Static anstelle von Dim ein:

  Private Sub Command1_Click ()
    Static Zahl As Integer        ' Erstellten einer statischen lokalen Variable

    Zahl = Zahl + 1
    Print Zahl
  End Sub

Diesmal wird, im Gegensatz zur lokalen Variable, bei der deren Inhalt nach Erreichen des Prozedurendes vernichtet wird, der Inhalt der Variable bis zum Programmende erhalten. Deshalb sieht man nun eine Liste von Zahlen, die sich bei jedem Click auf die Schaltfläche um 1 erhöht.

Anmerkung: Die neue statische Variable ist immer noch von lokaler Reichweite, wenn eine andere Prozedur auf sie zuzugreifen versucht, wird das nicht gelingen. Ergänzen Sie eine zweite Schaltfläche, welche dem Programm eine weitere 'Click'-Prozedur hinzufügt, und versuchen Sie mit dieser den Wert der statischen Variable auszudrucken.

Der Inhalt von lokalen Datenfeldern kann genauso bis zum Programmende erhalten werden. Dafür muß nur die 'Static'-Anweisung statt der 'Dim'-Anweisung verwendet werden.

  Static KarteiKartenEintrag(199) As Long


Konstanten

Konstanten sind ähnlich wie Variablen, haben aber nur einen einzigen festen Wert während der gesamten Programmausführung. Der Inhalt von Variablen kann sooft wechseln wie nötig. Warum also Konstanten verwenden, wenn sie nur einen einzigen festen Wert beinhalten können? Oft ist es im Programm nötig, eine gleichlautende Zeichenkette häufiger zu verwenden. Hier ist es nun einfacher, statt jedesmal die längere Zeichenkette einzutippen, eine Konstante für diese Zeichenkette zu deklarieren. Zum Beispiel, um in einem Programm Endpreise mit Mehrwertsteuer zu berechnen, wird häufig der Prozentsatz von letzterer einzutippen sein. Wenn einmal der Mehrwertsteuersatz geändert wird, muß an allen Stellen im Programm der entsprechende numerische Wert geändert werden, was sehr zeitraubend ist. Als Alternative kann man eine Variable deklarieren, namens 'MWSt', die deren Wert enthält, und die im Form_Load-Ereignis eingetragen wird. Was passiert aber, wenn irgendwo im Programm ein Fehler auftritt und dabei der Wert dieser Variable versehentlich verändert wird?

Eine Lösung für beide angesprochenen Probleme ist die Verwendung einer Konstante. Im folgenden Beispiel wird eine Konstante namens 'MWSt' deklariert und der Wert 6,175 zugewiesen. Sie wird in der Print-Anweisung mit der Variable GesamtPreis verwendet, um den Endpreis mit Mehrwertsteuer zu berechnen. Beachten sie, daß anstelle der Zahl 6,175 in der Formel auf die Konstante verwiesen wird.

Beispiel:

  Const MWSt = 6.175            ' Deklaration der Konstante und Zuweisen ihres Wertes
  Dim GesamtPreis As Currency   ' Deklaration einer lokalen Variable für den Endpreis

  GesamtPreis = 560.95

  Print "Endpreis = "; GesamtPreis * MWSt

Wie auch bei Variablen haben Konstanten ihre Reichweiten. Globale Konstanten sind in jedem Modul verfügbar, modulweite Konstanten in jeder Prozedur innerhalb eines Moduls, und lokale Konstanten nur innerhalb der aktuellen Prozedur/Funktion.

  1. Lokal - Deklarieren mit 'Const' innerhalb der Prozedur.
  2. Modulweit - Deklarieren mit 'Const' im Deklarationen-Abschnitt einer Form oder Modul.
  3. Global - Deklarieren mit 'Public Const' innerhalb des Deklarationen-Abschnitt eines Moduls (z.B. Modul1.bas).

Datenfelder (Arrays)

Variablen sind nützlich, um kleine Mengen an Informationen zu speichern, aber weniger gut geeignet, um größere Mengen an sehr ähnlicher Information zu speichern. Zum Beispiel, um das Gehalt von zweihundert Mitarbeitern zu speichern bräuchte man zweihundert verschiedene Variablennamen. Eine viel effizientere Art ist es, eine Datenstruktur zu verwenden, die sich Datenfeld (Array) nennt.

Ein Datenfeld ist ähnlich wie eine Reihe von Schalthebeln in einem Stellwerk. Das gesamte Datenfeld hat einen einzigen Namen, und jeder Schalthebel hat eine Adresse. Für das zitierte Gehälterproblem braucht man ein Datenfeld mit 200 Elementen (Schalthebel). Dafür benutzt man den Dim-Befehl, den man für die Deklaration neuer Variablen benutzt. Dazu kommt dann noch die Festlegung der Größe des Datenfeldes.

  Dim ArrayName (Größe) [As Type]

Beispiel: Dim Gehalt(199) As Long

Dieses Beispiel erstellt ein Datenfeld mit 200 Elementen. Die Größe ist mit 199 angegeben, weil VB standardmäßig bei 0 zu nummerieren beginnt.

Wenn man weiß, daß 'Christiane' die Angestellte Nummer 24 ist und ein Gehalt von 25383 bezieht, dann kann man dies in das Datenfeld wie folgt eintragen:

  Gehalt(23) = 25383

Umgekehrt, wenn wir wissen wollen, wieviel der Angestellte Nummer 189 verdient, dann können wir benutzen:

  lblGehalt.Caption = Gehalt(188)

Anmerkung: Die beiden obigen Beispiele greifen auf das um 1 verringerte Element der benötigten Nummer zu. Das ist deswegen so, weil VB die Elemente von 0 und nicht von 1 ab nummeriert. Man kann jedoch VB zwingen, ab 1 zu nummerieren, indem man die Anweisung 'Option Base 1' in den Deklarationsabschnitt einer Form oder Modul einfügt.


Dynamische Datenfelder

Es kann vorkommen, daß beim Schreiben eines Programms die Größe eines Datenfeldes durch das Programm selbst verändert werden muß. Dafür kann ein 'dynamisches' Datenfeld verwendet werden. Zuerst muß dieses Datenfeld deklariert werden, aber ohne der Angabe der Elemente-Anzahl:

  Dim Bücher() As String

Um die Größe dieses Datenfeldes zu ändern, benutzen sie den 'ReDim'-Befehl und legen sie die Anzahl der Elemente fest:

  ReDim Bücher(1379)

Normalerweise wird der Inhalt eines Datenfeldes bei der Redimensionierung gelöscht. Folgender Zusatz verhindert dies:

  ReDim Preserve Bücher(1379)

Wie auch bei Variablen haben Datenfelder verschiedene Reichweiten:

  1. Global - verfügbar für jede Form oder Modul innerhalb des Projektes.
  2. Modulweit - verfügbar für jede Prozedur auf der Form, auf der es eingerichtet ist.
  3. Prozedur - verfügbar nur innerhalb der Prozedur in der es deklariert ist.


Hauptseite