Access Anfänger: Tipps zur Variablendeklaration

Aus DBWiki
Wechseln zu: Navigation, Suche

Gerade bei der Verwendung und Deklaration von Variablen machen Anfänger oft Fehler und gewöhnen sich an einen Programmierstil, der zwar scheinbar funktioniert - aber inhärente Fehlerquellen und Unsauberkeiten beinhaltet, die oft erst wesentlich später und an anderer Stelle auftreten.

Alle Variablen deklarieren

Alle Variablen sollten explizit deklariert werden. Um dies zu erzwingen und Kompilationsfehler zu vermeiden, muss im Deklarationsteil jedes Moduls (gleich, ob Klassenmodul oder "normales" Modul) stehen:

Option Explicit

Man errreicht den automatischen Eintrag dieser Deklarationsvorschrift über Extras -- Optionen im Entwurfsmodus eines Moduls oder Klassenmoduls. Es muss hier das Kontrollkästchen Variablendeklaration erforderlich auf der Registerkarte Editor gesetzt werden, da diese nach der Installation von Access standardmäßig leider nicht angekreuzt ist!

Wird danach ein neues Modul angelegt, steht im Modulkopf automatisch eingetragen:

Option Compare Database
Option Explicit

Gelegentlich wird die Deklarationsvorschrift aber auch versehentlich gelöscht, daher gilt: Überprüfen, ob alle Module "Option Explicit" gesetzt haben - und anschließend das gesamte Projekt kompilieren.

Formular- oder Berichtsobjekte referenzieren

Man kann sich im Code eines Klassenmoduls auf die Felder der Klasse (im Fall eines Formulars also: auf die Formularfelder) mit einfachen Bezeichnern - analog zu Variablennamen beziehen. Sauberer und lesbarer ist es aber, eine explizite Referenz auf das Objekt mittels "Me" zu verwenden:

' also nicht:
Formularfeld = "MeinWert"
 
' sondern:
Me!Formularfeld = "MeinWert"

Datentypen richtig deklarieren

Häufig sieht man bei Anfängern (gerade solchen, die von anderen Programmiersprachen kommen) Deklarationen der folgenden Art:

Dim lngCnt, lngTest As Long
Dim strTmp, strTmp1 As String

Damit wird aber nur lngTest als Long Integer, nur strTmp1 als String deklariert, lngCnt und strTmp werden als Variant deklariert. ("As Variant" ist die Voreinstellung - und jede Variable muss eine eigene Typdeklaration bekommen). Richtig ist also:

Dim lngCnt as Long, lngTest As Long
Dim strTmp as String, strTmp1 As String

Passende Datentypen verwenden

Nach Möglichkeit Variablen nicht "As Variant", sondern mit einem passenden Datentyp verwenden. Das kann allerdings bei der Verwendung von Tabellen- bzw. Formularfeldern zu Problemen führen, da diese fast immer NULL-Werte annehmen können. Der einzige Datentyp, der NULL aufnehmen kann, ist "Variant". Daher muss man in so einem Fall entweder vorher geeignet konvertieren (typischerweise mit der NZ-Funktion) oder den NULL-Fall separat abhandeln.

Ebenso sollte darauf geachtet werden, dass Variablen einerseits zwar passend (also z.B., wenn es um ganze Zahlen geht: mit einem ganzzahligen Datentyp) deklariert werden, andererseits der Wertebereich nicht überläuft. Siehe dazu den ausführlicheren Artikel Niemals Datentyp Integer verwenden.

Deklarationen im Prozedurkopf

Variablen sollten immer im Kopf einer Prozedur deklariert werden. Auf das in manchen Fällen geringfügig effizientere "Deklarieren bei Bedarf" sollte verzichtet werden - von Ausnahmefällen, in denen dieser Effizienzgewinn unbedingt notwendig ist, einmal abgesehen. Eine derartige "Nachdeklaration" führt zu unangenehmen Seiteneffekten wie z.B. Fehlermeldungen, wenn auf Variablen außerhalb ihres Gültigkeitsbereichs zugegriffen wird, außerdem wird der Code unübersichtlich, wenn die Deklarationen nicht am Beginn der Prozedur stehen.

Wiki faq.png FAQ: Dieser Artikel gehört zu den "Häufig gestellten Fragen" (FAQ). Die Seite Access-FAQ bietet eine Übersicht aller FAQ-Artikel.