|
|
Access-Namenskonventionen
Autor: Ing. Ernst Greiner
Namenskonventionen sind Regeln
welche festlegen, wie Objekte, Variablen, Konstanten usw. benannt werden.
Warum Namenskonventionen?
- Ihre Programme werden lesbarer und übersichtlicher, nicht nur für sie,
sondern auch für eine größere Entwicklergemeinde.
- Der geringe Aufwand, ordentliche Namen zu geben, steht einem großen Nutzen gegenüber.
Speziell in größeren Projekten verliert man ohne vernünftige Benennungen schnell die Übersicht.
Access bietet in dieser Hinsicht auch keine anderen architektonischen Möglichkeiten
als über Objektnamen die Software zu strukturieren.
Beispiel, gruppieren sie Abfragen nach ihrer Funktionalität/Zugehörigkeit:
Vergeben sie allen Abfragen die als Datenquelle für Unterformulare dienen das Präfix qfsub.
Alle diese Abfragen sind dann im Datenbankfenster zusammenhängend aufgereiht,
sie müssen dann nur mehr in dieser Gruppe alphabetisch suchen.
So suchen sie anstatt unter 200 Abfragen nur unter 40, dass spart Zeit und Energie.
Wie gehe ich am besten vor?
- Diese Konventionen sind als Vorschlag gedacht. Wenn sie ihnen nicht gefallen, entwickeln sie ihre eigenen.
- Erweitern sie Ihre Konventionen nach Bedarf, halten sie sich an ein Grundschema.
- Keep it simple - erfinden sie keine komplizierten Abkürzungen.
Sollte es doch notwendig sein, führen sie in einem eigenen Modul (_Description) eine erklärenden Legende ein
z.B.: fdlstg ... Dienstleistungsformular.
- Verwenden sie für Bezeichner englische Ausdrücke.
Englisch verbindet die Nationen der Erde, im Besonderen die Softwerker.
Grundsätzliches
- Verwenden sie nur Buchstaben, die auch im englischen Alphabet existieren,
d. h. keine Umlaute, kein ß.
- Keine Sonderzeichen, ausgenommen underscore _ und das sparsam.
- Keine Bindestriche: - diese können als Minus interpretiert werden.
- Keine Leerzeichen.
- Keine reservierten Namen, am "beliebtesten" dabei ist Name.
- Keine Zahlen am Anfang eines Variablen-, Funktionsnamens.
Diese Grundregeln räumen von vornherein einige Fehlerquellen aus.
Sonderzeichen in Namen, dazu gehören Umlaute, ß, Bindestriche usw.
führen an bestimmten Stellen der Software zu Komplikationen
die nicht sein müssen, deswegen lässt man sie von vornherein weg.
Der Underscore _
Früher wurde der underscore _ exzessiv eingesetzt.
Meiner Meinung nach zerstückelt der underscore einen Objektnamen anstatt ihn zu strukturieren.
Selten ist der underscore wirklich notwendig, verwenden sie stattdessen die Groß-/Kleinschreibung
um Objektnamen zu strukturieren, dass liest sich auch flüssiger.
Ich verwende den underscore hauptsächlich dazu, um Testabfragen die
anschließend wieder gelöscht werden können ganz am Anfang des Datenbankfensters zu positionieren,
das erspart Zeit beim Suchen (_qaddCustomers).
Oder, um übergeordnete Module oder Formulare (_Description, _Todo) wiederum leichter zu finden.
Donts
Feldnamen in Tabellen:
Straße-Nr
Straße_Nr
Straße Nr
Kein Mensch würde auf die Idee kommen eine Variable Straße-Nr zu nennen,
der Compiler würde das vermutlich ohnehin nicht zulassen.
Es ist hier offensichtlich, dass diese Variable als Straße minus Nr interpretiert wird.
Bei Feldnamen ist diese Unart leider alltäglich.
Does
Es gibt genug bessere Möglichkeiten:
dtStrasseNr
dtStrasse
dtStreetNo
dtStreet
StrasseNr
StreetNo
Access-Objekte
| Code |
Detail |
Beschreibung |
t |
table |
Tabellen |
q |
query |
Abfragen |
f |
form |
Formular |
r |
report |
Bericht |
m |
macro |
Makro |
v |
vba |
Modul |
c |
class |
Klassenmodul |
Eine grundsätzliche Unterscheidung von Objekten bringt folgenden Vorteil:
- Tabellen und Abfragen sind eindeutig unterscheidbar.
Access verarbeitet in einigen Fällen Tabellen und Abfragen als gleichwertig,
zum Beispiel bei Datenquellen in Formularen.
- Ähnliches gilt für Formulare und Berichte.
- Bei Makros kann dieses System nicht hundertprozentig eingehalten werden, siehe dazu Kapitel Makros.
Allgemein üblich sind: tab, qry, frm, rpt, mac, mod, und cls
welche die Lesbarkeit aber nur unwesentlich erhöhen.
Wichtiger ist meiner Meinung nach die Strukturierung innerhalb der einzelnen Objektgruppen,
siehe dazu die nächsten Abschnitte.
Tabellen
| Code |
Detail |
Beispiel |
Beschreibung |
tdt |
data table |
tdtCostumer |
Haupttabelle (Kerndaten der Anwendung) |
tadd |
additional table |
taddCostumer |
Tabelle zum Speichern von (untergeordneten) Information in einer 1:1 oder 1:n Beziehung zu einer tdt |
tlnk |
link table |
tlnkFilmActor |
Tabelle zum Verbinden zweier Tabellen für eine m:n Beziehung |
tref |
reference table |
trefState |
Referenztabelle, ablegen von Referenz Infos auf die in anderen Tabellen zugegriffen wird |
ttmp |
temporary table |
ttmpPLZsend |
Tabelle wird von Anwendung zum zeitweiligen Zwischenspeichern verwendet. Daten in dieser Tabelle können jederzeit gelöscht werden. |
tsys |
system table |
tsysMenu |
Anwendungsspezifische Daten werden hier abgelegt, haben mit den eigentlichen Daten die verwaltet werden nichts zu tun |
ttpt |
template table |
ttptFields |
Tabelle dient als Vorlage (z.B. zum erstellen von neuen Tabellen) |
timp |
import table |
timpCostumerExcel |
Tabelle zum importieren von Daten in einem Fremdformat |
texp |
export table |
texpCostumerTxt |
Tabelle zum exportieren von Daten in ein Fremdformat |
Der Vorteil der Strukturierung
innerhalb der Objektgruppe ergibt sich einfach daraus,
dass bei der Suche nach einem bestimmten Objekt nicht immer der ganze Pool durchsucht werden muss.
Man braucht sich beim Entwickeln nur auf einen bestimmten Abschnitt konzentrieren,
was, wie weiter oben schon erwähnt, Zeit und Energie spart.
Dieses Prinzip gilt auch für die folgenden Abschnitte.
Tabellen Feldbezeichnungen
| Code |
Detail |
Beispiel |
Beschreibung |
id |
identity |
idCostumer |
Primärschlüssel (meistens Autowert) |
fi |
foreign identity |
fiCostumer |
Fremdschlüssel verweist auf eine id |
dt |
data |
dtName1 |
normale Daten (d. h. 90% der Feldnamen beginnen mit dt) |
dat |
date |
datInput |
Datum |
lnk |
hyperlink |
lnkWWW |
Hyperlink ins www oder auf eMail-Adressen, Dokumente ... |
mem |
memo |
memInfo |
Memofeld |
ole |
object linking and embedding |
|
OLE Objekte sind problematisch, von einer Verwendung wird abgeraten. |
cur |
currency |
curArticle |
Währung |
bi |
boolean, binary |
biPrint |
Boolsche, binäre Felder |
Abfragen
| Code |
Detail |
Beispiel |
Beschreibung |
qadd |
add query |
qaddCostumer |
Anfügeabfrage |
qupd |
update query |
qupdArticleCost |
Aktualisierungsabfrage |
qdel |
delete query |
qdelCostumerOld |
Löschabfrage |
qfdlg |
dialog form query |
qfdlgCostumer |
Datenherkunft für ein Standard Dialogformular |
qfsub |
subform query |
qfsubCostumer |
Datenherkunft für ein Unterformular |
qflt |
filter query |
qfltCostumerTyp |
Datenherkunft für ein Kombofeld das als Filter für ein Formular eingesetzt wird |
qref |
reference query |
qrefCity |
Datenherkunft für Kombofelder in Formularen |
qrmn |
mainreport query |
qrmnArticle |
Datenherkunft für einen Standardbericht |
qrsub |
subreport query |
qrsubArticle |
Datenherkunft für einen Unterbericht |
qsys |
system query |
qsysMenu |
Abfrage die auf Systemtabellen (tsys) zugreift |
qv |
vba query |
|
Abfrage die in Modulen weiterverwendet wird |
Abfrage Feldbezeichnungen
Grundsätzlich können die gleichen Bezeichnungen wie bei Tabellenfelder verwendet werden.
| Code |
Detail |
Beispiel |
Beschreibung |
cpt |
compute |
cptName |
Berechnete Felder ([dtNachname] + [Vorname] + ...) |
Formulare
| Code |
Detail |
Beispiel |
Beschreibung |
fmnu |
menu form |
fmnuMain |
Menüs zum navigieren in der Anwendung |
fdlg |
dialog form |
fdlgCostumer |
Normales Dialogformular zum editieren von Daten |
fsub |
subform |
fsubCostumer |
Unterformular |
fshw |
show form |
fshwCostumerOld |
sehr einfaches Formular in Datenblattansicht |
fnew |
new data form |
fnewCostumer |
Dateneingabeformular |
frpt |
report form |
frptCostumer |
Formular zum filtern und ausdrucken von Daten |
fsys |
system form |
fsysMenu |
Formular zum editieren von Systemdaten |
Formular Elemente
Grundsätzlich können die gleichen Bezeichnungen wie bei Tabellen-/Abfragefelder verwendet werden.
| Code |
Detail |
Beispiel |
Beschreibung |
lbl |
label |
lblInfo |
nur Bezeichnungsfelder die gesondert bezeichnet werden sollten,
ansonsten kann man den vom System vorgeschlagenen Namen verwenden |
flt |
filter |
fltCostumerTyp |
Eingabefelder die Daten filtern |
fsub, rsub |
subform, -report |
fsubCostumer |
Unterformular/-bericht Steuerelemente, einfach so benennen wie das Formular/Bericht selbst |
lnk |
link |
lnkidCostumer |
Felder die die Verbindung zwischen Unterformularen herstellen |
opt |
option |
optType |
Optionsgruppe |
btn |
button |
btnClose |
Befehlsschaltfläche |
tgl |
toggle button |
tglView |
Umschaltfeld |
reg |
register |
regDataSrc |
Registersteuerelement |
Makros
Auf Makros sollte man besser verzichten:
- Makros erlauben keine Fehlerbehandlung
- Makros können nicht debuggt werden
- Makros sind unflexibel und unübersichtlich
- Makros sind in MDE-Dateien ungeschützt
Wenige Gründe sprechen für den Einsatz von Makros:
- Das 'AUTOEXEC' Makro: dieses Makro wird ausgeführt wenn sie eine Datenbank öffnen.
Die einzige Aktion die sie in diesem Makro aufrufen sollten, ist das Starten einer VBA-Funktion.
- Das 'AUTOKEYS' (oder 'Tastaturbelegung') Makro überprüft, ob Tasten gedrückt wurden, auf die dann reagiert werden kann.
Folgende Tasten werden überwacht:
- Die Funktionstasten F1 bis F12 (+STRG + SHIFT)
- Alle alphanumerischen Tasten (+STRG)
- Einfügen und Entfernen-Taste (+STRG + SHIFT)
- Makros können einfach in VBA-Code umgeformt werden. Für Neulinge ist das ein möglicher Einstiegspunkt in die VBA-Welt.
Module
| Code |
Detail |
Beispiel |
Beschreibung |
v |
vba module |
vSystem |
Standard Modul |
lv |
vba module library |
lvSystem |
Standard Modul in einer Bibliotheksdatei |
c |
class module |
cHoverBtn |
Klassenmodul |
lc |
class module library |
lcHoverBtn |
Klassenmodul in einer Bibliotheksdatei |
Variablen und Konstanten
Grundsätzlich sollte man Variablen und Konstanten auf einen Blick voneinander unterscheiden können.
Der Grund ist einfach, einer Variablen können sie ständig neue Werte zuweisen,
Konstanten weisen sie nur einmal einen Wert zu.
Allgemein wird empfohlen Konstanten groß und Variablen klein zu schreiben.
Um das Programm lesbarer zu gestalten empfiehlt sich Konstanten mit einem großgeschriebenen Teil zu beginnen
und Variablen zumindest mit einem kleingeschriebenen Buchstaben zu beginnen.
Beispiel:
|
Option Compare Database
Option Explicit
Private Const FRMtitle = "Assistenten Fahrtkosten"
Private Const FRMcaption = "Auswahl:"
Private Const FRMpicture = "ressourc.gif"
Private Const RPTsql As String = "qrmnAssiDrive"
Private Const RPTname As String = "rmnAssiDrive"
Private mDateTyp As String
|
|
|