Ausgewählte Themen
Wirtschafts-Praktikum
SS 1995
1 Objekte, Eigenschaften und Methoden
1.1 Objekte, Eigenschaften und Methoden in C++
1.2 Objekte innerhalb eines Formulars in ACCESS
1.2.1 Die Objekte
1.2.2 Die Eigenschaften
1.2.3 Die Methoden (Technik der Ereignisgesteuerten Programmierung")
2 Bilden von Ausdrücken
2.1 Regeln
2.2 Allgemeine Beispiele zu Ausdrücken
2.3 Beispiele: Ausdruck für Argumente bei Aktionen
2.4 Ausdruckseditor
2.4.1 Verwendung
2.4.2 Starten
2.4.3 Aufbau
3.1 Abfragen in MS-Access
3.2 Abfragenerstellung am Beispiel von Auswahlabfragen
3.2.1 Grundlagen
3.2.2 Auswahl der benötigten Tabellenfelder
3.2.3 Umbenennen von Feldern
3.2.4 Ausblenden von Feldern
3.2.5 Berechnete Felder
3.2.6 Sortieren der Datensätze
3.2.7 Kriterien
3.2.8 Parameter
3.2.9 Aggregierte Berechnungen
3.3 Kreuztabellenabfragen
3.4 Aktionsabfragen
3.5 Der Abfrageassistent
4.1 Allgemeines
4.1.1 Vergleich zwischen Microsoft Access SQL und ANSI SQL
4.1.1.1 Die wesentlichen Unterschiede
4.1.1.2 Verbesserte Features von Microsoft Access SQL
4.2 Festlegen von Eigenschaften
4.3 Erstellen von SQL-spezifischen Abfragen
4.3.1 Union - Abfrage
4.3.2 SQL Pass-Through Abfrage
4.3.3 Datendefinitionsabfrage
4.4 Erstellen von Unterabfragen
5.1 Überblick
5.1.1 Was sind Makros
5.1.2 Wo kann man Makros einsetzen
5.1.2.1 Pushbuttons
5.1.2.2 Ereignisse
5.1.2.3 Elemente in Formularen mit Werten versorgen
5.1.2.4 Differenzierte Gültigkeitsregeln
5.1.2.5 Autoexec-Makro (vgl. Punkt 6)
5.1.2.6 Eigene Menüleisten
5.1.2.7 Eigene Tastenbelegung
5.1.3 Das Makrofenster
5.2 Wie werden Makros erstellt
5.2.1 Ein einfaches Beispiel
5.2.2 Bedingte Ausführung von Makroaktionen
5.2.3 Bezugnahme auf Steuerelemente und Felder in Ausdrücken
5.3 Makro ausführen
5.4 Gruppierung von Makros
5.4.1 Wie erstellt man eine Makrogruppe
5.4.2 Wie spricht man ein Makro einer Gruppe an
5.5 Alle Makroaktionen auf eine Blick
5.6 Das Autoexec-Macro
5.7 Makros durch Tastendrücken ausführen
1.1 Elementare Datentypen in Access Basic
1.2 Deklarieren von Variablen (incl. Datenfeldern)
1.2.1 Implizite Deklaration
1.2.2 Explizite Deklaration
1.2.2.1 Die Anweisung Dim
1.2.2.2 Die Anweisung Global
1.2.2.3 Anweisung ReDim
1.2.2.4 Die Anweisung Static
1.3 Selbstdefinierte Datentypen
1.3.1 Die Type-Anweisung (Syntax)
1.3.2 Argumente der Anweisung Type
1.3.3 Beispiel: Verwendung statischer Datenfelder in einem benutzerdefinierten Datentyp.
1.4 Konstanten
1.5 Vergleich von Datentypen
1.5.1 Besonderheiten verschiedener Datentypen
1.5.1.1 BINARY
1.5.1.2 DATUM
1.5.1.3 INTEGER
1.5.1.4 VALUE
1.6 Konvertierungsfunktionen für Datentypen
1.6.1 Funktionssyntax
1.6.2 Funktionsweise der einzelnen Konvertierungsfunktionen
1.7 Felder in Tabellen
1.7.1 Mögliche Datentypeinstellungen
1.7.2 Anmerkung
1.8 Gültigkeitsbereiche, Lebensdauer
1.8.1 Gültigkeitsbereich
1.8.2 Lebensdauer
2.1 Voraussetzungen
2.2 GoTo-Anweisung
2.3 If...Then...Else-Anweisung
2.4 Select Case-Anweisung
2.5 For...Next-Anweisung
2.6 While...Wend-Anweisung
2.7 Do...Loop-Anweisung
3 Objekttypen und Objektvariablen
3.1 Einführung
3.2 Die wichtigsten Objekttypen :
3.2.1 Objekttyp Form und Report :
3.2.2 Objekttyp Control :
3.2.3 Objekttyp Database :
3.2.4 Objekttyp Recordset :
3.2.5 Objekttyp Workspace :
3.2.6 Objekttyp QueryDef :
3.2.7 Objekttyp TableDef und Fields :
3.3 Objektdatentypen - Programmierbeispiele
3.3.1 Bespiel 1 : Microsft Access - Objektdatentypen Form, Report, Control
3.3.2 Bespiel 2: Einführung für die Objektdatentypen Database und Recordset
3.3.3 Beispiel 3: Verwendung der Move-Methoden des Objektdatentyps Recordset
3.3.4 Beispiel 4: Verwendung der Sort-Eigenschaft eines Recordset-Objektes
3.3.5 Beispiel 5: Verwendung der Filter-Eigenschaft eines Recordset-Objektes, sowie der Find-Methoden
3.3.6 Beispiel 6: Methoden find, edit, update
3.3.7 Beispiel 7: Transaktionen in Access Basic
3.3.8 Beispiel 8: Objektdatentypen TableDef und Field
4 Module, Sub-Prozeduren und Funktionen
4.1 Module
4.1.1 Allgemeines
4.1.2 Deklarationsabschnitt
4.2 Sub-Prozeduren, Funktionen
4.2.1 Allgemeines
4.2.2 Definieren einer Prozedur
4.2.2.1 Syntax
4.2.2.2 Bemerkungen
4.2.2.3 Beispiele
4.2.3 Aufrufen einer Sub-Prozedur
4.2.3.1 Syntax
4.2.3.2 Bemerkungen
4.2.3.3 Beispiel
4.2.4 Deklarieren eines Verweises auf eine externe Prozedur (DLL [Dynamic-Link Library])
4.2.4.1 Syntax
4.2.4.2 Bemerkungen
4.2.4.3 Beispiel
5.1 Tabelle
5.1.1 Datei
5.1.2 Datenfelder
5.1.3 Dynamischer Datenaustausch
5.1.4 Domäne
5.1.5 Datum/Zeit
5.1.6 Fehlerbehandlung
5.1.7 Finanzmathematische Aufgaben
5.1.8 Grafiken in gedruckten Berichten
5.1.9 Inspektion von Variablen
5.1.10 Konvertierung
5.1.11 Mathematische Aufgaben
5.1.12 Objektmanipulation
5.1.13 Steuerung des Programmablaufs
5.1.14 SQL-Aggregatsoperationen
5.1.15 Zeichenfolgen
5.1.16 Sonstiges
5.2 Beispiele
5.2.1 Datei
5.2.2 Domäne
5.2.3 Datum/Zeit
5.2.4 Konvertierung
5.2.5 Objektmanipulation
5.2.6 Zeichenfolgen
5.2.7 Sonstiges
5.2.7.1 MsgBox
5.2.7.2 InputBox
6 Flexible Listenfelder und Kombinationsboxen
7.1 Das Direktfenster
7.1.1 Testen von Funktionen und Sub-Prozeduren
7.1.2 Überprüfen des Werts eines Feldes, eines Steuerelements oder einer Eigenschafteneinstellung in einem Formular oder Bericht
7.1.3 Anzeigen des Werts einer Variablen oder eines Ausdrucks, während der Ausführung
7.1.4 Anzeigen des Werts einer Variablen oder eines Ausdrucks, wenn die Ausführung des Codes angehalten wurde
7.2 Schrittweises Ausführen von Prozeduren und Verwendung von Haltepunkten
7.2.1 Standard Prozeduren
7.2.2 Ereignisprozeduren
Objekte, Eigenschaften und Methoden
Objekte, Eigenschaften und Methoden in C++
class linie {
int px1, py1; // Eigenschaften
int px2, py2; // Private Daten
public:
linie (....); // Konstruktor Þ Standardeinst. d. Eigensch.
void show (void); // Methode
void hide (void); // Methode
};
linie L1; // Objekt L1 anlegen
Die Klasse beschreibt also in C++ das Speicherverhalten eines Objektes dieser Klasse (Instanz).
Diese Ansicht verdeutlicht, daß die Eigenschaften und Methoden dem späteren Objekt zu-geordnet sind. Man erhält also eine Datenabstraktion ( ADT Þ Abstrakter Datentyp).
Das Interface des Abstrakten Datentyps (für den Zugriff auf die privaten Daten) bilden die Methoden.
Die Kapselung wird durch die Codeschreibweise verdeutlicht.
Bsp.: L1.show();
In ACCESS kann man sich nun die vorhandenen Objekte in ähnlicher Art vorstellen. Ein wesentlicher Unterschied zu C++ besteht lediglich darin, daß man sich keine eigenen Klassen bauen kann, d.h. man kann lediglich vordeklarierte Objekttypen verwenden.
Objekte innerhalb eines Formulars in ACCESS
Bezeichnungsfeld
Dient zur Ausgabe von Text
Textfeld
Dient zur Ausgabe und Eingabe von Text
Optionsgruppe
Dient zur Gruppierung anderer Objekte, typischerweise z.B. Kontrollkästchen. Es ist also ein sogenanntes Containerobjekt.
Umschaltfläche
Ähnelt vom Aussehen einer Schaltfläche, entspricht aber der Funktion eines Kontrollkästchens.
Kennt also im Prinzip die zwei Zustände AN/AUS.
Optionsfeld
Kennt die zwei Zustände AN/AUS.
Kontrollkästchen
Kennt die zwei Zustände AN/AUS.
Listenfeld
Stellt dem Anwender eine Auswahlbox zur Verfügung.
Kombinationsfeld
Der Anwender kann hier ähnlich wie im Textfeld Text eingeben, aber auch über eine kleine Schaltfläche eine Auswahlbox aufklappen und dort eine Auswahl treffen.
Diagramm
Darstellung verschiedener Diagramme zum Bsp. basierend auf den Daten einer Abfrage.
Unterformular
Wenn man mehrere Tabellen in einem Formular ansprechen will.
Linie
Zum zeichnen einer Linie.
Rechteck
Zum zeichnen eines Rechtecks.
Seitenumbruch
Wenn ein Formular über mehrere Seiten gehen soll.
Befehlsschaltfläche
Zum darstellen verschiedener Schaltflächen (Bsp: OK-Button).
Objektfeld
Zum darstellen grafischer Objekte (Bilder). Es können auch OLE-Objekte sein.
Gebundenes Objektfeld
Ist an ein Tabellenfeld geunden. (ähnlich Textfeld !!)
An die Eigenschaften eines Objektes gelangt man wie folgt:
Objekt markieren
rechte Maustaste
Eigenschaften"
Diese Eigenschaften lassen sich nun modifizieren.
Jedes Objekt bekommt mit der Anlage Standardeigenschaften. Auch aus diesem Grund sollte die Eigenschaft Name" vom Entwickler sinnvoll angepaßt werden.
Bsp.: OK-Button Þ Schaltfläche_OK
Die Methoden (Technik der Ereignisgesteuerten Programmierung")
In ACCESS wie auch in der Objekt-Orientierten-Programmierung wird die Technik der Ereignisgesteuerten Programmierung" angewendet:
Ereignis
Versenden einer Nachricht an ein Objekt
Objekt kann auf diese Nachricht durch Codeausführung reagieren
Hinweis:
Senden einer Nachricht <==> Aufruf einer Funktion eines Objektes (Methode)
Bsp. Für Methoden:
Sub Schaltfläche_OK_Click (...) Þ Ereignis: Mausklick oder Tastendruck
Sub Schaltfläche_OK_MouseMove (...) Þ Ereignis: Mauswanderung über Objekt
Diese Methoden sind anwählbar über das Eigenschaftsfenster oder Ansicht-Code".
Allgemeine Beispiele zu Ausdrücken
Ausdruck | Verwendung | Beschreibung |
= [Vorname] & " " & [Nachname] | Berechnetes Steuerelement |
Verkettet die Werte in den Feldern "Vorname" und "Nachname" und zeigt zwischen diesen ein Leerzeichen an. |
>100 | Eigenschaft "Gültigkeitsregel" |
Legt fest, daß Sie in dieses Feld nur Werte größer als 100 eingeben können. |
=DatTeil("m"; Datum( )) | Eigenschaft "Standardwert" |
Bezeichnet die Monatsangabe des aktuellen Systemdatums als Standardeintrag für ein Feld. |
<Datum( )-30 | Abfragekriterien | Verwendet die Funktion Datum, um mehr als 30 Tage alte Datensätze in das Dynaset aufzunehmen. |
Formulare![Personal]![Land]= "Großbritannien" |
Makrobedingung | Führt eine Aktion aus, wenn der Wert im Feld "Land" für den aktuellen Datensatz im Formular "Personal" gleich "Großbritannien" ist. |
Beispiele: Ausdruck für Argumente bei Aktionen
Für die Aktionen: | "SetzenWert" |
"SuchenDatensatz" | |
"AusführenMakro" |
Ausdruck | Aktion | Argument | Ergebnis |
Formulare![Lieferanten]![Lieferanten-Nr] | SetzenWert | Feld | Setzt das/die im Aktionsargument angegebene Feld, Steuerelement oder Eigenschaft auf den Wert des Feldes "Lieferanten-Nr" des Formulars "Lieferanten". |
Formulare![Personal]![Gehalt]*1,1 | SetzenWert | Ausdruck | Setzt das/die im Aktionsargument angegebene Feld, Steuerelement oder Eigenschaft das Produkt auf den Wert des Feldes "Gehalt" im Formular "Personal" und 1,1 (Gehalt wird um 10 % erhöht). |
=[Firmenkurzliste] | SuchenDatensatz | Suchen nach | Sucht den Datensatz, der den in der Firmenkurzliste erscheinenden Firmennamen enthält. |
Jahr([Bestelldatum])=1994 | AusführenMakro | Wiederhol- bedingung |
Führt das Makro solange aus, wie das Datum im Feld "Bestelldatum" die Jahresangabe 1994 enthält. |
Wenn man zum Erstellen eines Ausdrucks Hilfe benötigt, kann man sich des Ausdrucks-Editors bedienen. Der Ausdrucks-Editor ist an fast allen Stellen ausführbar, an denen man Ausdrücke verwendet:
Eigenschaftenfenster
"Kriterien"-Zelle im QBE-Entwurfsbereich
Makrofenster
Modulfenster
...
Fügen Sie die Elemente eines Ausdrucks in den Audrucks-Editor ein.
Um Ihre zuletzt ausgeführte Aktion rückgängig zu machen, wählen Sie die Schaltfläche für "Rückgängig".
Wenn Ihr Ausdruck vollständig ist, wählen Sie "OK".
Wenn Sie "OK" wählen, kopiert Microsoft Access Ihren Ausdruck an die Stelle, von der aus Sie den Ausdrucks-Editor gestartet haben. Wenn dort bereits ein Wert vorhanden war oder wenn Sie den Ausdrucks-Editor aus dem Modulfenster gestartet haben, das markierten Text enthielt, wird der Wert oder der Text durch Ihren neuen Ausdruck ersetzt.
Der Ausdrucks-Editor wird im Eigenschaftenfenster bzw. im unteren Ausschnitt des Makrofensters wiefolgt gestartet:
Auf das Einstellungsfeld der Eigenschaft oder des Arguments, in das der Ausdruck eingeben werden soll klicken.
Auf die Editor-Schaltfläche neben dem Einstellungsfeld der Eigenschaft oder des Arguments klicken
Wenn einer Eigenschaft mehrere Editoren zugeordnet sind, zeigt Microsoft Access das Dialogfeld Editor auswählen an. In diesem Fall die Option "Ausdrucks-Editor" und dann "OK" wählen.
So startet man den Ausdrucks-Editor in einem Feld oder einer "Kriterien"-Zelle im Abfragefenster, in der Spalte "Bedingungen" des Makrofensters oder im Modulfenster
Mit der rechten Maustaste auf die Stelle, an der der Ausdruck einfügt werden soll klicken.
Aus dem Kontextmenü den Befehl Editor auswählen
Anmerkung
Wenn das Einstellungsfeld der Eigenschaft oder des Arguments, die Abfragenzelle oder die Spalte "Bedingungen", von dem/der aus man den Ausdrucks-Editor startet, bereits einen Wert enthält, wird dieser Wert automatisch in das Ausdrucksfeld kopiert. Um Text aus dem Modulfenster in den Ausdrucks-Editor zu kopieren, muß man den gewünschten Text markieren, bevor man den Ausdrucks-Editor startet.
Mit Hilfe von Abfragen sollen Datensätze aus Tabellen einer Datenbank unter bestimmten Gesichtspunkten zusammengestellt werden. Dieser Abschnitt beinhaltet eine Beschreibung wie Abfragen in dem Programm Microsoft ACCESS 2.0 mit Hilfe des Abfrageassistenten und der Methode Querry by Example (QBE, Abfragen an Beispielen) erstellt werden.
Innerhalb von ACCESS 2.0 wird das Ergebnis einer Abfrage in einem sogenannten Dynaset dargestellt, welches sich dem Anwender wie eine Tabelle präsentiert. Der Unterschied liegt darin, daß nicht die Dynaset-Inhalte sondern nur die Abfrage selbst gespeichert wird. Um die Aktualität der Daten zu garantieren, wird das Dynaset nach jeder Änderung der Daten bzw. Ausführung von Aktionen auf den Daten aktualisiert.
Es gibt sechs verschiedene Abfragearten :
Auswahlabfragen
Kreuztabellenabfragen
Aktionsabfragen
Union-Abfragen
SQL Pass-Through-Abfragen
Datendefinitionsabfragen.
Die ersten drei Abfragearten können mit Hilfe des Abfrageassistenten bzw. unter der Verwendung von QBE erstellt werden, während die letzten drei nur mit Hilfe der Datenabfragesprache SQL formuliert werden können und somit nicht Bestandteil dieses Abschnittes sind.
Abfragenerstellung am Beispiel von Auswahlabfragen
Auswahlabfragen sind die häufigste Art von Abfragen und können nur unter der Verwendung von QBE oder SQL erstellt werden. Dazu wählt man unter dem Menü Abfragen den Punkt Neue Abfrage erstellen". Anschließend kann man die entsprechenden Tabellen auswählen, auf welche sich die Abfrage beziehen soll. Wenn mehrere Tabellen in einer Abfrage verwendet werden, sollten diese miteinander verknüpft sein, damit es zu sinnvollen Abfrageergebnissen kommt. Verknüpfungen die bei der Tabellendefinition gemacht wurden, können aufgehoben und neue, nur für die Abfrage relevante, hinzugefügt werden. Verknüpfungen können auf folgende Art und Weise manipuliert werden :
Löschen : Verknüpfung anklicken und die Taste ENTF betätigen.
Ändern der Verknüpfungsart : Auf die Verknüpfung doppelt klicken und die gewünschte Verknüpfungsart auswählen.
Neudefinition : Verbinden der Felder mit Hilfe von Drag und Drop.
Es gibt drei Arten von Verknüpfungen :
Gleichheitsverknüpfung : Bei Gleichheitsverknüpfungen enthält das Dynaset nur diejenigen Datensätze, die auf beiden Seiten der verknüpften Felder den gleichen Wert haben.
Inklusionsverknüpfung : Wenn das Dynaset alle Datensätze der linken Verknüpfungsseite besitzen soll und von der Rechten dagegen nur diejenigen, bei denen die Inhalte der verknüpften Felder identisch sind (und umgekehrt), handelt es sich um eine Inklusionsverknüpfung left join (right join).
Reflexivverknüpfung : Reflexivverknüpfungen sind Verknüpfungen in der eine Tabelle mit sich selbst verknüpft wird. Dabei ist zu beachten das die Verknüpfung der beiden Felder auch interpretierbar ist.
Auswahl der benötigten Tabellenfelder
Tabellenfelder können entweder mit der Hilfe von Drag und Drop in die Feldliste des Abfragefensters eingetragen oder aus der Listbox der Feldzeile (anklicken der gewünschten Spalte) ausgewählt werden.
Zur Verwendung aller Felder einer Tabelle gibt es zwei Möglichkeiten : Man kann den Namen der Tabelle in das Feld des Abfragefensters eintragen und alle Tabellenfelder werden in das Abfragefenster übernommen (spätere Änderungen der Tabellendefinition werden nicht berücksichtigt). Zweitens besteht die Möglichkeit den Namen der Tabelle gefolgt von einem Punkt und einem Stern zu verwenden, wodurch alle Felder der aktuellen Tabelle im Dynaset angezeigt werden, aber nicht im Abfragefenster erscheinen. Dies ist für spätere Änderungen der Tabellendefinition (z.B. durch Hinzufügen oder Löschen von Feldern) von Vorteil, da diese sofort Berücksichtigung finden.
Tabellenfeldern können innerhalb von Abfragen neue Namen gegeben werden. Formulare und Anwendungen, die auf dieser Abfrage basieren, müssen dann auch diesen Namen verwenden. Dazu trägt man vor dem Feldnamen den neuen Namen gefolgt von einen Doppelpunkt ein.
Zusätzlich können in einer Abfrage auch Felder verwendet werden, deren Daten später nicht im Dynaset erscheinen, um diese dann z.B. für die Sortierung oder für Auswahlkriterien einzusetzen. Felder werden durch das entfernen des Kreuzes in dem Feld Anzeigen" ausgeblendet.
Diese Methode muß z.B. dann angewandt werden, wenn alle Tabellenfelder durch den Tabellennamen gefolgt von einem Stern ausgewählt wurden, denn die einzelnen Felder stehen nicht im Abfragefenster zur Verfügung und können so auch nicht als Grundlage für eine Sortierung oder ein Auswahlkriterium dienen. Würde man das entsprechende Feld jetzt zusätzlich hinzufügen ohne es auszublenden, würden die Daten im Dynaset doppelt erscheinen.
Im Gegensatz zu Tabellen können in Abfragen auch berechnete Felder verwendet werden. Dazu muß nur ein Ausdruck in die erste Zeile des Abfragefensters eingetragen werden. Die Namensvergabe erfolgt von ACCESS automatisch, kann aber nachträglich geändert werden (vgl. 3.2.3).
Sortieren der Datensätze
Es kann innerhalb einer Abfrage nach jedem Feld sortiert werden. Dies erfolgt durch das Eintragen der Sortierungsart (absteigend oder aufsteigend) in der entsprechenden Zeile eines ausgewählten Feldes. Die Sortierungspriorität der einzelnen Tabellenfelder wird durch die Spaltenposition festgelegt. Die sich am weitesten links befindende Spalte hat die höchste Priorität etc. .
Die Reihenfolge der Spalten kann geändert werden, indem die entsprechende Spalte markiert und anschließend durch einen Doppelklick ausgewählt wird. Nun kann die Spalte, mit gedrückt gehaltener linker Maustaste, an die gewünschte Position befördert werden.
Kriterien für die Auswahl von Datensätzen können in allen Zeilen ab der Kriterien-Zeile" eingetragen werden. Einträge in unterschiedlichen Spalten einer Zeile repräsentieren eine UND-Verknüpfung dieser Kriterien und Einträge in unterschiedlichen Zeilen eine ODER-Verknüpfung. Innerhalb eines Feldes können sonst alle vorhanden logischen Operationen, auch z.B. mit eingeschlossenen Berechnungen, durchgeführt werden.
Werden bei der Formulierung von Kriterien andere Tabellenfelder, als das für die Spalte zuständige, benötigt, müssen diese in eckige Klammern eingefaßt werden. Angaben von Datümern erfolgen unter dem Einschluß von Doppelkreuzen.
Probleme kann es mit Nullwerten geben! Datensätze mit Nullwerten werden im Dynaset nicht angezeigt. Dies führt dann zu Problemen, wenn die Abfrage einem Formular zu Grunde liegt und der Anwender in dem Formular keine Angabe für das auszuwählende Feld macht. Er erhält dann kein Ergebnis, obwohl er eigentlich erreichen wollte, daß er alle Datensätze angezeigt bekommt. Dieses Problem kann z.B. mit einer Inklusionsverknüpfung behoben werden.
Sie können in allen Ausdrücken auch Parameter verwenden. Als Parameter gelten alle in eckigen Klammern eingeschlossenen Bezeichner, die keinem Tabellenfeld zugeordnet werden können. Parametern können dann auch Typen zugeordnet werden, um automatische Typprüfungen und Berechnungen mit ihnen durchzuführen.
Vor der Ausführung der entsprechenden Abfrage wird dann eine Eingabeaufforderung an den Anwender von ACCESS durchgeführt.
Aggregierte Berechnungen führen Berechnungen über mehrere Datensätze aus und geben das Ergebnis jeweils in einem Datensatz des Dynasets wieder. Es besteht die Möglichkeit von einstufigen bis zu mehrstufigen Gruppenwechseln.
Erstellt wird eine aggregierte Berechnung, indem man auf das große griechische Sigma der Symbolleiste klickt. Sofort wird in das Abfragefenster eine neue Zeile mit dem Namen Funktion eingetragen. Der Eintrag Gruppierung in dieser Zeile bedeutet, daß für diese Spalte ein Gruppenwechsel vorgenommen wird. In einer anderen Spalte kann dann z.B. die Funktion SUMME eingetragen werden, um eine Summe der Feldwerte für die ausgewählte Gruppierung zu erhalten. Die Priorität der Gruppenwechsel hängt wieder von der Reihenfolge der Spalten ab (vgl. 3.2.6).
Eine Kreuztabellenabfrage ist eine zweidimensionale Abfrage, die auf aggregierten Berechnungen basiert und bei der sowohl Spalten als auch Zeilen eine Überschrift haben. Sie hat folgende Merkmale :
Eine Kreuztabellenabfrage liegt nur eine Tabelle zu Grunde
Eine Kreuztabellenabfrage enthält mindestens zwei Gruppierungsfelder, von denen das eine die Zeilenüberschriften und das andere die Spaltenüberschriften bestimmt. Darüber hinaus darf eine Kreuztabellenabfrage weitere Gruppierungsfelder für Zeilenüberschriften haben. Für Spaltenüberschriften ist hingegen nur ein Gruppierungsfeld erlaubt.
Eine Kreuztabellenabfrage enthält ein Feld, dessen Inhalte mit einer Funktion oder einem benutzerdefinierten Ausdruck aggregiert und als Tabelleneinträge in den Zellen der Kreuztabelle ausgegeben werden.
Es besteht die Möglichkeit diese mit dem Abfrageassistenten oder mit QBE zu erstellen. Es wird hier die Erstellung einer Kreuztabellenabfrage mit Hilfe von QBE beschrieben.
Nach der Wahl der zu Grunde liegenden Tabelle gelangt man zum Abfragefenster. Unter dem Menü "Abfrage" wählt man den Punkt Kreuztabelle. Es werden jetzt zwei zusätzliche Zeilen, Funktion und Kreuztabelle, angezeigt. Zunächst werden die Felder bestimmt, die als Zeilenüberschriften fungieren sollen. Als Funktion wird bei diesen die "Gruppierung" eingetragen und in der Zeile Kreuztabelle der Wert "Zeilenüberschrift". Die Wahl der Spaltenüberschriften erfolgt analog, wobei der Wert "Zeilenüberschrift" durch "Spaltenüberschrift" ersetzt wird. Zum Schluß wird das Feld für die Tabelleneinträge hinzugefügt und eine entsprechende Funktion z.B. ANZAHL verwendet. Die Zeile Kreuztabelle erhält für diese Feld den Wert "Tabelleneintrag".
Mit Hilfe der Abfrageeigenschaften können Spaltenüberschriften auch fixiert werden um bessere Vergleichbarkeit mit anderen Abfragen zu erhalten.
Die Erstellung einer Kreuztabelle mit Hilfe des Abfrageassistenten funktioniert entsprechend. Er gibt jeden Schritt vor, läßt nur bestimmte Eingaben zu und stellt Hilfen zur Verfügung.. Der Nachteil liegt in der Nichtzulassung von berechneten Feldern. Sollen diese eingesetzt werden, müssen Felder als Platzhalter ausgewählt und nachträglich geändert werden.
Im Gegensatz zu Auswahlabfragen , die ein Dynaset aus bestehenden Tabellen erzeugen, und an den zu Grunde liegenden Daten jedoch nichts ändern, ist es die Aufgabe von Aktionsabfragen die eine oder andere Veränderung von Datensätzen vorzunehmen. Es gibt vier Arten von Aktionsabfragen :
Tabellenerstellungsabfragen : Kopiert die Daten des Dynasets in eine andere Tabelle.
Löschabfrage : Löscht Datensätze aus Tabellen.
Anfügeabfrage : Fügt Datensätze an Tabellen an.
Aktualisierungsabfrage : Ändert Daten in bestehenden Datensätzen von Tabellen.
Erzeugt werden diese Abfragen genau wie Auswahlabfragen nur mit dem Unterschied, daß die Abfrageart mit Hilfe des Menüs "Abfrage" und der Auswahl des entsprechenden Abfragetyps geändert werden muß.
Mit Hilfe des Abfrageassistenten können folgende Abfragen erstellt werden, wobei einem dieser bei der Erstellung der Abfragen entsprechende Vorgaben und Hilfestellungen anbietet:
Kreuztabellenabfragen : vgl. 3.3
Duplikatsuche : Liefert doppelte Datensätzen zu einer Tabelle für ein bestimmtes Feld.
Inkonsistenzsuche : Stellt Datensätze dar, die auf einer Verknüpfung zwischen Tabellen basieren und für die die Datensätze auf die sie verweisen fehlen (Mengendifferenz der beiden Tabellen).
Datenarchivierung : Kopiert bestimmte Datensätze aus einer bestehenden Tabelle in eine neue Tabelle, wobei die Möglichkeit besteht die Datensätze aus der Orginaltabelle zu löschen.
SQL (Structured Query Language) = Strukturierte Abfragesprache
= Programmiersprache, die zum Abfragen, Aktualisieren und Verwalten von relationalen Datenbanken verwendet wird. Jeder Abfrage, die man in MS Access erstellt , wird eine SQL-Anweisung zugewiesen, die Aktionen der jeweiligen Abfrage definiert. Normalerweise ist es am einfachsten, den QBE(Query By Example)-Entwurfsbereich und die grafische Abfragewerkzeuge in MS-Access zum Erstellen und Modifizieren von Abfragen zu verwenden.
Beim Erstellen einer Abfrage mit dem QBE-Entwurfsbereich, konstruiert MS Access im Hintergrund die entsprechende SQL-Anweisung. Die SQL-Ansicht Ihrer Abfrage entspricht der Abfrage, die über den QBE-Entwurfsbereich erstellt wurde, spiegelt jedoch nicht alle eingestellten Eigenschaften wider.
Vergleich zwischen Microsoft Access SQL und ANSI SQL
Microsoft Access SQL stimmt grundsätzlich mit den Inhalten von ANSI-89 Level 1 überein. Allerdings sind einige ANSI SQL-Features in Microsoft Access SQL nicht realisiert. Umgekehrt umfaßt Microsoft Access SQL reservierte Wörter sowie Features, die in ANSI SQL nicht unterstützt werden.
Microsoft Access SQL und ANSI SQL haben jeweils unterschiedliche reservierte Wörter sowie Datentypen
Es gelten unterschiedliche Regeln für das Konstrukt Between...And, welches die folgende Syntax hat: Ausdruck1 [NOT] BETWEEN Ausdruck2 AND Ausdruck3 In Microsoft Access SQL darf Ausdruck2 größer sein als Ausdruck3; in ANSI SQL muß Ausdruck2 kleiner oder gleich Ausdruck3 sein.
Microsoft Access SQL unterstützt komplizierte Ausdrücke. Sie können z.B. Access Basic- oder benutzerdefinierte Funktionen in eine Microsoft Access SQL-Anweisung einfügen.
Verbesserte Features von Microsoft Access SQL
Die Anweisung TRANSFORM, die Unterstützung für Kreuztabellenabfragen bietet. Beispiel: TRANSFORM count(Stadt) Tabellenwert SELECT Land Zeile FROM Kunden Tabelle GROUP BY Land Zeilengruppierung PIVOT Stadt Spalte
Die Deklaration PARAMETERS, um Parameterabfragen zu definieren.
Wenn in Formularen häufig Listen- und Kombinationsfelder verwendet werden, um sortierte oder gefilterte Werte anzuzeigen, steigt im Laufe der Zeit die Anzahl der erstellten und gespeicherten Abfragen, was zu einer langen Liste von Abfragen und damit zu einer gewissen Unübersichtlichkeit führt. Um diese Liste zu kürzen, kann man anstelle von Abfragen eine SQL SELECT-Anweisung verwenden.
Ändern oder Erstellen der Datensatzherkunft mittels SQL-Anweisung:
Formularentwurf
Eigenschaftsfenster
Herkunftstyp: Tabelle/Abfrage
Datensatzherkunft: löschen - Editor
Abfrage generieren
Datei: Schließen
Erstellen von SQL-spezifischen Abfragen
Unter Verwendung der SQL-Anweisungen können drei SQL-spezifische Arten von Abfragen erstellt werden, die nicht über den SQL-Entwurfsbereich realisierbar sind:
Union - Abfrage
SQL Pass-Through - Abfrage
Datendefinitionsabfrage
Erstellen einer SQL-spezifischen Abfrage
Datenbankfenster: Abfrage: Neu
Neue Abfrage: Neue Abfrage
Tabelle/Abfrage hinzufügen: Schließen
Menü Abfrage: SQL-spezifisch: Union Pass-Through Datendefinition
Abfrage: Anweisungen eingeben"
Menü Ansicht: Datenblatt (Union) Menü Abfrage: Ausführen (Pass-Through, Datendefinition)
Union-Abfragen ermöglichen auf einfache Weise das Kombinieren von zwei oder mehr Tabellen oder Abfragen. Wenn man eine Union-Abfrage startet, werden die Datensätze von korrespondierenden Feldern der enthaltenen Tabellen oder Abfragen angezeigt.
Eine Union-Abfrage enthält zwei oder mehr SQL SELECT-Anweisungen. Jede SELECT-Anweisung muß dieselbe Anzahl von Feldern in derselben Reihenfolge liefern. Die korrespondierenden Felder müssen über kompatible Datentypen verfügen, mit einer Ausnahme: Sie können ein Feld vom Datentyp ZAHL und eines vom Datentyp TEXT als korrespondierende Felder verwenden.
Bsp.:
Die folgende Union-Abfrage wählt alle Firmen und Orte aus, die sowohl in der Tabelle "Lieferanten" als auch in der Tabelle "Kunden" stehen, und sortiert die Daten alphabetisch nach dem Ort:
SELECT [Firma], [Ort]
FROM [Lieferanten]
UNION SELECT [Firma], [Ort]
FROM [Kunden]
ORDER BY [Lieferanten].[Ort];
Man verwendet SQL Pass-Through-Abfragen, um Befehle direkt an einen ODBC-Datenbank-Server (wie den Microsoft SQL Server) zu senden. Zum Senden der Befehle verwendet man die für den jeweiligen Server erforderliche Syntax. Mit Hilfe von SQL Pass-Through-Abfragen arbeitet man direkt mit den Tabellen des Servers, statt sie einzubinden. Ferner lassen sich über SQL Pass-Through-Abfragen gespeicherte Prozeduren auf einem ODBC-Server ausführen.
(ODBC (Open Database Connectivity) Ein vorgegebenes Protokoll für SQL-Datenbankserver, wie z.B. MS SQL Server. Man kann ODBC-Treiber installieren, die es MS Access ermöglichen, sich an diese SQL-Datenbankserver anzuschließen und auf die Daten in den SQL-Datenbanken zuzugreifen.)
Vorsicht! Konvertieren Sie eine SQL Pass-Through-Abfrage nicht in einen anderen Abfragetyp, wie z.B.eine Auswahlabfrage. Dies würde zum Verlust der von Ihnen eingegebenen SQL-Anweisung führen.
Datendefinitionsabfragen werden verwendet, um Datenobjekte in der aktuellen Microsoft Access-Datenbank zu erstellen oder zu ändern. Das Erstellen oder Ändern von Datenobjekten kann sowohl mit Hilfe der Entwurfstools als auch mit SQL-Anweisungen durchgeführt werden.
Jede Datendefinitionsabfrage besteht aus genau einer Datendefinitionsanweisung. Folgende Anweisungen werden unterstützt:
CREATE TABLE Erstellt eine Tabelle
ALTER TABLE Fügt ein neues Feld in eine bestehende Tabelle ein
DROP TABLE Entfernt eine Tabelle aus einer Datenbank
CREATE INDEX Erstellt eine Index für ein Feld
DROP INDEX Entfernt einen Index aus einem Feld
Bsp.:
Diese Datendefinitionsanweisung erstellt eine Tabelle mit dem Namen "Freunde". Die Anweisung schließt den Namen und Datentyp jeden Feldes der Tabelle ein und weist dem Feld "Code" einen Index zu, der es als Primärschlüssel kennzeichnet.
CREATE TABLE Freunde
([Code] integer,
[Nachname] text,
[Vorname] text,
[Geburtsdatum] date,
[Telefon] text,
[Bemerkungen] memo,
CONSTRAINT [Index1] PRIMARY KEY ([Code]));
Die folgende Datendefinitionsanweisung erstellt einen Mehr-Felder-Index auf der Basis der Felder "Nachname" und "Vorname":
CREATE INDEX NeuerIndex
ON Freunde ([Nachname], [Vorname]);
Eine Unterabfrage ist entweder eine SELECT-Anweisung (SQL), die in eine SELECT-, SELECT...INTO-, INSERT...INTO-, DELETE- bzw. UPDATE-Anweisung eingebettet ist, oder eine SELECT-Anweisung, die Bestandteil einer anderen Unterabfrage ist. Sie können Unterabfragen in den folgenden Zusammenhängen einsetzen: in einer SQL-Ansicht einer Abfrage; in der Entwurfsansicht einer Abfrage im QBE-Entwurfsbereich in einer Zelle der Zeile "Kriterien" oder "Feld"; oder in Access Basic in SQL-Anweisungen.
Die SELECT-Anweisung einer Unterabfrage kann keine Union- oder Kreuztabellenabfrage definieren.
Bsp.:
Listet zu jedem Artikel, dessen Einzelpreis mit dem von "Apfelsaft" übereinstimmt, den Namen sowie den Einzelpreis auf.
SELECT [Artikelname], [Einzelpreis]
FROM Products
WHERE [Einzelpreis] = (SELECT [Einzelpreis]
FROM[Artikel]
WHERE [Artikelname] = "Apfelsaft");
Makros dienen der Automatisierung einer oder mehrerer Aktionen, welche man vorher in tabellarischer Form zusammenstellen kann. Prinzipiell handelt es sich bei den Aktionen um solche die man auch per Hand manuell ausführen kann. Dabei handelt es sich bei den Aktionen größtenteils um Menü- oder Symbolbefehle. Desweiteren sind jedoch auch Aktionen vorhanden welche nicht manuell verfügbar sind wie z.B. das setzen eines Wertes zum zuweisen von Werten für Formularfelder, oder dem einblenden von Meldungen z.B. bei anwendungsspezifischen Fehlermeldungen.
Desweiteren ist es mit den Makros möglich differenzierter auf bestimmte Ereignisse zu reagieren als es mit den Menübefehlen möglich ist, sowie Bedingungen zu formulieren wann die Aktionen auszuführen sind.
Aktion beim Klicken oder Doppelklicken z.B. aktualisieren einer Tabelle
Alle Steuerelemente in Formularen sowie Formulare selbst können auf bestimmte reagieren. Diese Ereignisse sind z.B. beim Öffnen, vor Aktualisierung, beim Klicken, usw. Diesen Ereignissen kann beliebige Makros zuordnen.
Elemente in Formularen mit Werten versorgen
Da man in Tabellen z.B. keine berechneten Felder angeben kann, aber oftmals einen berechneten Wert abspeichern will, kann man sich einem Makro bedienen. Wenn man beispielsweise den Mehrwertsteuerbetrag aus einer Rechnung in die Tabelle speichern will, erstellt man ein Formularfeld dessen Inhalt durch eine Formel berechnet wird und überträgt den Wert durch ein Makro welches bei dem Ereignis "bei Änderung" ausgeführt wird über die Funktion "setzen Wert" in das entsprechende Tabellenfeld.
Differenzierte Gültigkeitsregeln
Ähnlich kann man bei komplizierteren Gültigkeitsregeln verfahren, indem man bei dem Ereignis "vor Aktualisierung" ein Makro startet welches den eingegebenen Wert gegen eine komplizierte Gültigkeitsformel testet und ggf. mit einer Fehlermeldung reagiert.
Um bestimmte Grundeinstellungen für die Datenbank beim Starten automatisch ausführen zu lassen, kann man diese in ein Makro schreiben welches man "AUTOEXEC" nennt. Dieses Makro wird beim starten automatisch ausgeführt.
Über Makros lassen sich auch benutzerdefinierte Menüleisten, ggf. für jedes Formular differenziert, erstellen. Verfügbar sind die allgemeinen Funktionen welche man aus den Menüleisten kennt, eine Reihe von vorgefertigten ACCESS Funktionen sowie selbstdefinierte Makros und Funktionen. Hierzu wird für die Menüleiste sowie jedes Menü ein Makro erstellt, wobei die Menuleiste mit der Aktion HinzufügenMenü" auf ein Menü verweist. Jedes Menü kann nun Aktionen d.h. Menüpunkte enthalten, welche ihrerseits per HinzufügenMenü" Verweise auf Untermenümakros sein können. Komfortabel können die Menüleisten über den Menü-Editor erstellt und bearbeitet werden.
Um beispielsweise einem Formular eine benutzerdefinierte Menüleiste zuzuordnen wird das Menüleisten"-Makro (root) an die Eigenschaft Menüleiste" gebunden.
Weiterhin lassen sich Makros auch über beliebig zuordnebare Tastaturkürzel ausführen (vgl. Pkt. 5.7 Seite *).
Makros werden tabellarisch in einem Fenster erstellt. Das Fenster besteht aus zwei Teilen: Im tabellarische Teil werden die Aktionen eingetragen, welche aus einem Listenfeld ausgewählt werden können. Die Aktionen können an Bedingungen geknüpft werden und mehrere Aktionen werden durch die Vergabe eines Namens zu einem Makro zusammengefaßt. Im unteren Teil werden die Argumente eingetragen welche der Aktion zugeordnet werden sollen bzw. von ihr verarbeitet werden.
Grafik: Makrofenster Access 2.0
Zuerst muß man im Datenbankfenster das Symbol Makro auswählen und über den Button NEU ein neues das Makrofenster öffnen. Durch Eingabe einer Aktion (Listenfeld) wird die Funktion des Makros festgelegt.
Speichern und fertig !
Das Makrofenster kann auch direkt beim Zuordnen einer Aktion zu einem Ereignis in einem Formular geöffnet werden.
Bedingte Ausführung von Makroaktionen
Die Ausführung einzelner Funktionen innerhalb eines Makros kann von Bedingungen abhängig gemacht werden. Diese Bedingungen trägt man links neben der betreffenden Aktion in die Spalte "Bedingung". Falls diese Spalte nicht angezeigt wird (standardmäßig nicht) kann man Sie über "Ansicht", "Optionen", "Bedingung einblenden = ja" anzeigen lassen. Um mehrere Aktionen von der gleichen Bedingung
abhängig zu machen, trägt man bei der ersten Aktion die Bedingung ein und bei jeder weiteren Aktion, welche unmittelbar ohne Leerzeile folgen muß, lediglich drei Punkte ("...").
Bezugnahme auf Steuerelemente und Felder in Ausdrücken
Um Argumente von Makroaktionen bzw. Bedingungen angeben zu können muß man sich oftmals auf Steuerelemente oder Felder von Tabellen bzw. Abfragen beziehen. Prinzipiell ist dabei folgende Syntax zu beachten.
Zugriff auf ein Steuerelement im Formular:
Formulare![Formularname]![Steuerelementname]
Zugriff auf ein Steuerelement im Unterformular:
Formulare![Formularn.]![Steuerelem d. Unterfor.].Formular![Steuerelem.]
Zugriff auf ein Steuerelement in einem Bericht:
Berichte![Berichtname]![Steuerelementname]
Die richtige Syntax kann man sich mit Hilfe des Ausdruckseditor, welcher leider nicht direkt aufrufbar ist erstellen lassen. Dazu kann man z.B. über Eigenschaften eines Steuerelementes eine Bedingung auswählen welche den Aufruf des Ausdruckeditors ermöglicht. Der erstellte Ausdruck kann mit Drag&Drop dann beispielsweise in ein Makro übernommen werden.
Ein Makro kann ( auch zu Testzwecken) direkt aus dem Makrofenster bzw. aus dem Datenbankfenster per Doppelklick vollständig oder ebenfalls aus dem Makrofenster heraus per Einzelschritt-Button im Trace-Modus ausgeführt werden.
Außerdem kann man wie bereits unter Pkt. 5.1.2.2 erwähnt ein Ereignis über Eigenschaften mit einem Makro verbinden, sowie ein Makro aus einem anderen Makro heraus starten.
Wie erstellt man eine Makrogruppe
In einem Makrofenster (vgl. 5.1.3) können mehrere Makros untergebracht werden. Ein neues Makro beginnt sobald man unter Makroname" einen neuen Namen
vergibt. Die ggf. nicht eingeblendete Makronamenspalte kann über Ansicht eingeschaltet werden. Der Name unter dem nun das gesamte Fenster abgespeichert wird stellt nun den Gruppennamen dar.
Wie spricht man ein Makro einer Gruppe an
Syntax: Gruppenname.Makroname
Alle Makroaktionen auf eine Blick
AbbrechenEreignis | Bricht das Ereignis ab, welches das Aufrufen des Makros veranlaßte |
AktualisierenDaten | Aktualisiert die Datenbasis des angegebenen Steuerelementes oder falls keines angegeben wurde das gesamte Objekt |
AktualisierenObjekt | Aktualisiert die Bilschirmanzeige des angegebenen Objektes |
AnwendenFilter | Wendet einen Filter auf ein Formular, Bericht, Abfrage oder SQL-WHERE-Klausel an |
AnzeigenAlleDatensätze | Entfernt alle ggf. gesetzten Filter im aktiven Formular und zeigt alle Datensätze an |
AusführenAnwendung | Startet eine Windows- oder DOS- Anwendung |
AusführenCode | Führt eine ACCESS-Basic Funktion aus |
AusführenMakro | Ruft ein Makro auf |
AusführenMenübefehl | Führt eine ACCESS-Menübefehl aus |
AusführenSQL | Führt eine Aktionsabfrage unter Benutzung von SQL-Anweisungen aus |
AusgabeIn | Gibt die Daten des angegeben Datenbankobjektes (Datenblatt, Formular, Bericht oder Modul) im XLS, RTF oder TXT - Format aus |
AuswählenObjekt | Wählt das angegebene Datenbankobjekt aus |
Beenden | Beendet die ACCESS-Sitzung |
Druckt das aktive Objekt (Datenblatt, Bericht, Formular) | |
Echo | Bestimmt ob die Bildschirmanzeige während eines Makros oder nach Ausführung eine Basic-Prozedur aktualisiert wird |
EinblendenSymbolleiste | Blendet eingebaute oder benutzerdefinierte Symbolleisten ein und aus |
GeheZuDatensatz | Richtet den Fokus auf den angegeben Datensatz |
GeheZuSeite | Richtet den Fokus im aktiven Formular auf die angegebene Seite |
GeheZuSteuerelement | Richtet den Fokus auf das angegeben Steuerelement. Anwendbar auf aktives Formular, Datenblatt eines Formulars, Tabelle oder Dynaset |
HinzufügenMenü | Fügt der benutzerdefinierten Menüleiste ein Menü hinzu |
KopierenObjekt | Kopiert ein ausgewähltes Datenobjekt in eine andere oder die aktuelle Datenbank |
LöschenObjekt | Löscht das angegebene Datenonjekt |
Maximieren | Vergrößert das aktive Fenster zum Vollbild |
Meldung | Gibt ein Meldungsdialogfeld aus |
Minimieren | Verkleinert das aktive Fenster zum Symbol |
ÖffnenAbfrage | Öffnet eine Auswahl- oder Kreuztabellenabfrage in Datenblatt-, Entwurfs-, oder Seitenansicht und führt eine Aktionsabfrage aus |
ÖffnenBericht | Öffnet eine Bericht in Entwurfs- oder Seitenansicht oder druckt ihn |
ÖffnenFormular | Öffnet eine Formular in Formular-, Entwurfs- Seiten-, oder Datenblattansicht. |
ÖffnenModul | Öffnet das angegebene Modul an einer bestimmten Prozedur. |
ÖffnenTabelle | Öffnet eine Formular in Datenblatt-, Entwurfs- oder Seitenansicht. |
Positionieren | Verschiebt das angegebene Fenster und/oder ändert seine Größe |
Sanduhr | Läßt den Mauszeiger zur Sanduhr werden, wenn und solange das Makro ausgeführt wird, in dem diese Aktion angeführt ist. Nach Ende des Makros hat der Mauszeiger wieder sein normales Aussehen |
Schließen | Schließt ein angegebenes oder das aktive Fenster |
SendenObjekt | Nimmt das angegebene MS-ACCESS-Datenblatt, -Formular, -Modul oder den Bericht in eine E-Mail-Nachricht auf; diese Nachricht kann angezeigt und versendet werden |
SetzenWert | Legt für ein Feld, Steuerelement oder eine Eigenschaft (in einem Formular, einem Datenblatt eines Formulars oder einem Bericht) einen Wert fest |
Signalton | Erzeugt einen Signalton |
StopAlleMakros | Beendet alle laufenden Makros |
StopMakro | Beendet das laufende Makro |
SuchenDatensatz | Sucht nach dem ersten Datensatz, welcher die durch die Argumente festgelegten Kriterien erfüllt |
SuchenWeiter | Sucht nach dem nächsten Datensatz der den zuletzt zur Aktion SuchenDatensatz" bzw. im Dialogfeld Suchen" angegebenen Argumenten genügt |
Tastaturbefehle | Sendet Tastaturanschläge an ACCESS oder eine andere aktive Windows-Anwendung |
TransferArbeitsblatt | Im- oder exportiert eine Tabelle |
TransferDatenbank | Im- oder exportiert Daten von/nach einer anderen Datenbank |
TransferText | Im- oder exportiert Text von/nach einer Textdatei |
UmbenennenObjekt | Benennt ein im Datenbankfenster ausgewähltes (markiertes) Objekt um |
Warnmeldungen | Legt fest, ob die Systemmeldungen angezeigt werden sollen oder nicht |
Wiederherstellen | Stellt die ursprüngliche Größe eines zum Symbol verkleinerten oder zum Vollbild vergrößerten Fensters wieder her |
Tabelle: Alle Makroaktionen auf einen Blick
Um gewisse Einstellungen schon beim Start der Datenbank zu erhalten kann man die gewünschten Aktionen in einem Makro ablegen und dieses AUTOEXEC" nennen. Diese Makro wird nun immer beim Start der Datenbank ausgeführt. Das Ausführen von AUTOEXEC" kann man durch drücken der Umschalt"-Taste während des Startvorganges unterbinden.
Achtung: Bei noch nicht konvertierten Datenbanken der Versionen 1.x muß die Umschalttaste auch während der Hinweismeldung über die altere Access-Version gedrückt bleiben.
Außerdem kann man einer Datenbank welche mittels Programmzeilenparameter beim Start von Access gestartet wird über den Parameter /x ein anderes StartUp-Makro zuordnen.
z.B.: msaccess.exe beispiel.mdb /x MeineStartMakro
Mit Hilfe dieser Zeile wird beim Start von Access die Datenbank beispiel.mdb" gestartet, und dabei automatisch das Makro MeinStartMakro" ausgeführt
Makros durch Tastendrücken ausführen
Um Makros per Tastaturkürzel ausführen zu können muß ein sogenanntes Tastaturbelegungsmakro" erstellt werden. In diesem Makro erstellt man für jedes zu belegendes Tastaturkürzel ein Makro mit dem Namen des Tastaturkürzels !!!! (Syntax vgl. Tabelle S. * ). Als Aktion kann man direkt die gewünschten Funktionen auswählen oder per AusführenMakro" andere Makros starten. Den Namen unter dem diese Makrogruppe abgespeichert wird muß man nun noch über den Befehl Optionen" im Menü Ansicht" in der Kategorie Tastatur" als Eigenschaft bei Tastaturbelegung" eintragen.
Syntax für den Makronamen | belegte Tastenkombination |
|
Strg + beliebige Buchstaben- oder Zifferntaste |
|
Eine Funktionstaste (hier F1) |
|
Strg + Eine Funktionstaste (hier F1) |
|
Umschalt + Eine Funktionstaste (hier F1) |
|
Einfg |
|
Strg + Einfg |
|
Umschalt + Einfg |
|
Entf |
|
Strg + Entf |
|
Umschalt + Entf |
Tabelle: Syntax für Tastaturbelegungsmakro
Elementare Datentypen in Access Basic
In der folgenden Tabelle sind die elementaren Datentypen, welche von Access Basic unterstützt werden, sowie deren Typenkennzeichen ( optionales Variablennamensuffix), Speichergrößen und Bereiche aufgelistet:
Datentyp | Kenn- zeich. |
Bytes | Bereich |
Integer (Ganzzahl) |
% | 2 | -32.768 bis 32.767 |
Long (lange Ganzzahl) |
& | 4 | -2.147.483.648 bis 2.147.483.647 |
Single (Gleitkommazahl mit einfacher Genauigkeit) |
! | 4 | für negative Werte -3,402823E38 bis -1,401298E-45 für positive Werte 1,401298E-45 bis 3,402823E38 und 0 |
Double (Gleitkommazahl mit doppelter Genauigkeit) |
# | 8 | für negative Werte -1,79769313486232E308 bis -4,94065645841247E-324 für positive Werte 4,94065645841247E-324 bis 1,79769313486232E308 und 0 |
Currency (Währung, skalierte Ganzzahl) |
@ | 8 | -922.337.203.685.477,5808 bis 922.337.203.685.477,5807 |
String (Zeichenfolge) |
$ | 1 je Zeich. |
0 bis 65.535 Bytes (Etwas zusätzlicher Speicherbedarf ist erforderlich.) |
Variant | Keines | nach Bedarf |
Jeder beliebige numerische Wert bis zum Bereich eines Wertes vom Typ "Double" oder ein beliebiger Zeichentext |
Benutzerdefiniert (unter Verwendung von Type) |
Keines | Anzahl, die von den Elementen benötigt wird |
Der Bereich jedes Elements ist gleich dem Bereich seines elementaren Datentyps, wie oben angeführt. |
Tabelle: elementare Datentypen
Deklarieren von Variablen (incl. Datenfeldern)
Man kann Variablen impliziert deklarieren, in dem man sie einfach im laufenden Programm benutzt ohne sie vorher explizit deklariert hat. Einer implizit deklarierten Variable wird der Datentyp Variant zugewiesen.
Die Lebensdauer ist auf die Dauer der Prozedur welche die Variable beinhaltet beschränkt.
Zur expliziten Variablendeklarierung benutzt man die Anweisungen:
Dim, ReDim, Global und Static
Diese Anweisungen deklarieren jeweils eine Variable, ihre Anwendung ist jedoch von dem gewünschten Gültigkeitsbereich abhängig. Falls Indizes hinter den Anweisungen angegeben werden erzeugt man Datenfelder (Arrays).
Die Anweisung Dim wird auf Modulebene und auf Prozedurebene verwendet, um Variablen zu deklarieren und ihnen Speicherplatz zuzuweisen.
Syntax:
Dim Variable [([Indizes])][As Datentyp][,Variable][([Indizes])][As Datentyp]
Indizes := [Untergrenze To]Obergrenze[,[Untergrenze To]Obergrenze]
Argument | Beschreibung |
Variable | Name einer Variablen. |
Indizes | Dimensionen einer Datenfeldvariablen. Sie können mehrere Dimensionen deklarieren. Die Syntax von Indizes wird nachstehend beschrieben. |
As Datentyp | Reserviertes Wort, das zur Deklaration des Datentyps einer Variablen verwendet wird. Datentyp kann "Integer", "Long", "Single", "Double", "Currency", "String" (für Zeichenfolgen variabler Länge), "String" * Länge (für Zeichenfolgen fester Länge), "Variant", ein benutzerdefinierter Datentyp oder ein Objektdatentyp (eine Variable mit einem Objektdatentyp darf nicht als Datenfeld deklariert werden) sein. Verwenden Sie für jede zu definierende Variable eine separate As-Klausel Datentyp. |
Das reservierte Wort To bietet die Möglichkeit, sowohl die unteren als auch die oberen Indexgrenzen einer Datenfeldvariablen anzugeben.Datenfeldindizes können auch negativ sein. To kann verwendet werden, um einen beliebigen Indexbereich aus dem Bereich von -32.768 bis 32.767 festzulegen. Die Anzahl zulässiger Datenfelddimensionen in einer Anweisung Dim ist auf 60 begrenzt.
Die Anweisung Global wird auf Modulebene verwendet, um globale Variablen (Variablen, die für alle Prozeduren in allen Modulen verfügbar sind) zu deklarieren und ihnen Speicherplatz zuzuweisen.
Syntax
Global Variable[([Indizes])] [As Datentyp] [, Variable[([Indizes])] [As Datentyp] ]
Man kann die Anweisung Dim bzw. Global auch mit leeren Klammern verwenden, um dynamische Datenfelder zu deklarieren. Verwenden Sie nach der Deklaration eines dynamischen Datenfeldes die Anweisung ReDim innerhalb einer Prozedur, um die Anzahl der Dimensionen und Elemente im Datenfeld zu definieren. Wenn man versucht, eine Dimension für eine Datenfeldvariable, deren Größe bereits deklariert wurde, erneut zu deklarieren, tritt ein Fehler auf.
Variablen werden in Kompilierzeit initialisiert. Dabei werden numerische Variablen mit dem Wert 0 und Variablen vom Datentyp "Variant" mit dem Varianttyp "Leer" initialisiert; Zeichenfolgen variabler Länge werden als leere Zeichenfolgen ("") initialisiert, und Zeichenfolgen fester Länge werden mit ANSI-Nullen (Chr(0)) gefüllt. Die Felder von Variablen eines benutzerdefinierten Datentyps werden initialisiert, als handle es sich um separate Variablen.
Die Anweisung Static wird auf Prozedurebene verwendet, um eine statische Variable zu deklarieren und ihr Speicherplatz zuzuordnen.
Syntax
Static Variable[([Indizes])] [As Datentyp] [, Variable[([Indizes])] [As Datentyp] ]
Man verwendet Static in nichtstatischen Prozeduren, um statische Variablen explizit zu deklarieren. Man muß Static verwenden, um in nichtstatischen Prozeduren ein Datenfeld mit fester Größe zu deklarieren. In statischen Prozeduren kann man wahlweise Static oder Dim verwenden, um statische Variablen zu deklarieren.
Achtung:
Die Anweisung Static und das reservierte Wort Static haben eine unterschiedliche Auswirkung auf die Gültigkeitsdauer von Variablen. Wenn man eine Prozedur unter Verwendung des reservierten Wortes Static deklariert (wie in Static Sub Verkaufszahlen), wird allen lokalen Variablen innerhalb der Prozedur einmal Speicherplatz zugewiesen, und der Wert der Variablen bleibt während der gesamten Ausführung des Programms erhalten. Bei nichtstatischen Prozeduren wird den Variablen bei jedem Aufruf der Prozedur Speicherplatz zugewiesen, wobei dieser Speicherplatz beim Beenden der Prozedur wieder freigegeben wird. Die Anweisung Static wird für die Deklaration von Variablen in nichtstatischen Prozeduren verwendet, damit diese ihren Wert über die gesamte Ausführungszeit des Programms bewahren.
Erstellt einen benutzerdefinierten Datentyp, der ein oder mehrere Elemente enthält.
Type Benutzertyp
Elementname As Datentyp
[ Elementname As Datentyp]
. . .
End Type
Argument | Beschreibung |
Benutzertyp | Name eines benutzerdefinierten Datentyps. Es gelten die Standardregeln für die Variablenbenennung. |
Elementname | Name eines Elements des benutzerdefinierten Datentyps. Es gelten die Standardregeln für die Variablenbenennung. |
Datentyp | Einer der folgenden Datentypen: "Integer", "Long", "Single", "Double", "Currency", "String" (für Zeichenfolgen variabler Länge), "String" * Länge (für Zeichenfolgen fester Länge), "Variant" oder ein anderer, benutzerdefinierter Datentyp. Für das Argument Datentyp darf jedoch kein Objektdatentyp verwendet werden. |
Tabelle: Argumente der Anweisung TYPE
Die Anweisung Type kann nur im Deklarationsbereich eines Moduls verwendet werden. Nachdem man unter Verwendung der Anweisung Type einen benutzerdefinierten Datentyp deklariert hat, kann man im Deklarationsbereich oder in jeder Prozedur des Moduls eine Variable dieses Datentyps deklarieren. Verwenden Sie die Anweisungen Dim, Global oder Static, um eine Variable eines benutzerdefinierten Datentyps zu deklarieren. Zeilennummern und Zeilenmarken sind in einem Type...End Type-Block nicht erlaubt. Benutzerdefinierte Datentypen werden oft in Verbindung mit Datensätzen verwendet, da Datensätze häufig aus mehreren zusammengehörigen Elementen verschiedener Datentypen bestehen.
Beispiel: Verwendung statischer Datenfelder in einem benutzerdefinierten Datentyp.
Type PLZListe
PLZ (1 To 500) As Integer 'Statisches Datenfeld deklarieren.
Ort As String * 30
End Type
Dim Schweiz(1 To 500) As PLZListe
Im obigen Beispiel enthält PLZListe das statische Datenfeld PLZ, und das Datenfeld Schweiz hat die gleiche Struktur wie PLZListe. Wenn man ein statisches Datenfeld innerhalb eines benutzerdefinierten Datentyps deklariert, muß man dessen Dimensionen mit numerischen Konstanten, und nicht mit Variablen, deklarieren.
Symbolische Konstanten kann man über die Anweisung Const deklarieren. Diesen Konstanten wird bei der Deklaration ein Wert zugewiesen. Der Wert kann nur gelesen werden.
Syntax:
Const Konstantenname = Wert
Microsoft Access erkennt mehrere sich überlappende Arten von Datentypen. Der von Ihnen verwendete Datentyp hängt davon ab, mit welchem Teil von Microsoft Access Sie arbeiten. Es gibt vier verschiedene Kontextsituationen mit jeweils eigenen Arten von Datentypen: die Entwurfsansicht einer Tabelle, das Dialogfeld Abfrageparameter, Access Basic und die SQL-Ansicht einer Abfrage.
Die folgende Tabelle enthält einen Vergleich der vier Arten von Datentypen im jeweils zugehörigen Kontext. Die erste Spalte enthält die Einstellungen der Eigenschaft "Felddatentyp", die in der Entwurfsansicht einer Tabelle zur Verfügung stehen, und die fünf Einstellungen der Eigenschaft "Feldgröße" für den Datentyp "Zahl". Die zweite Spalte enthält die Datentypen zum Entwurf von Parameterabfragen, die im Dialogfeld Abfrageparameter zur Verfügung stehen. Die dritte Spalte enthält die Access Basic-Datentypen. Die vierte Spalte enthält die Microsoft Access SQL-Datentypen, wie sie durch die Microsoft Jet Datenbank-Engine definiert sind, zusammen mit den zulässigen Synonymen.
Tabellenfelder | Abfrage- parameter |
Access Basic | Microsoft AccessSQL und Synonyme |
Nicht unterstützt | Binär | Nicht unterstützt | BINARY (Siehe Anmerkungen)VARBINARY |
Ja/Nein | Ja/Nein | Integer | BITBOOLEAN, LOGICAL, LOGICAL1, YESNO |
Zahl Feldgröße = Byte |
Byte | Integer | BYTEINTEGER1 |
Zähler | Nicht unterstützt | Long | COUNTERAUTOINCREMENT |
Währung | Währung | Currency | CURRENCYMONEY |
Datum/Zeit | Datum/Zeit | Variant (Siehe Anmerkungen) | DATETIMEDATE, TIME, TIMESTAMP |
Zahl Feldgröße = Single |
Single | Single | SINGLE, FLOAT4, IEEESINGLE, REAL |
Zahl Feldgröße = Double |
Double | Double | DOUBLEFLOAT, FLOAT8, IEEEDOUBLE, NUMBER, NUMERIC |
Zahl Feldgröße = Integer |
Integer (Siehe Anmerkungen) | Integer (Siehe Anmerkungen) | SHORTINTEGER2, SMALLINT |
Zahl Feldgröße = Long Integer |
Long Integer | Long | LONG (Siehe Anmerkungen)INT, INTEGER, INTEGER4 |
OLE-Objekt | OLE-Objekt | String | LONGBINARYGENERAL, OLEOBJECT |
Memo | Memo | String | LONGTEXTLONGCHAR, MEMO, NOTE |
Text | Text | String | TEXTALPHANUMERIC, CHAR, CHARACTER, STRING, VARCHAR |
Nicht unterstützt | Wert | Variant | VALUE (Siehe Anmerkungen) |
Besonderheiten verschiedener Datentypen
Microsoft Access selbst verwendet den Datentyp BINARY nicht. Er wird nur für den Fall erkannt, daß er in eingebundenen Tabellen aus anderen Datenbankprodukten verwendet wird, die den Datentyp BINARY unterstützen.
DATUM
Wenn Sie eine Access Basic-Variable deklarieren möchten, die Angaben zu Datum und Uhrzeit speichern soll, deklarieren Sie sie mit dem Datentyp "Variant". Wenn Sie ein Tabellenfeld mit dem Typ "Datum/Zeit" in der SQL-Ansicht oder der Entwurfsansicht einer Tabelle erstellen und dann die Eigenschaft "Type" des Feldes in Access Basic überprüfen, entspricht die zurückgegebene ganzzahlige Konstante dem Wert der (durch die Jet Datenbank-Engine definierten) Konstanten DB_DATE und nicht dem Wert der Datumskonstanten V_DATE des Datentyps "Variant". Die durch diese beiden Konstanten dargestellten Variablentypen sind jedoch vollständig kompatibel zueinander, und es tritt kein Fehler aufgrund nicht übereinstimmender Typen auf, wenn eine Variable vom Typ "Variant" Daten aus einem Datum/Zeit-Feld in einer Microsoft Access-Tabelle oder -Abfrage enthält.
INTEGER
Der Datentyp "Integer" in Microsoft Access SQL entspricht nicht dem Datentyp "Integer" für Tabellenfelder, Abfrageparameter oder Access Basic. In Microsoft Access SQL entspricht "Integer" statt dessem einem "Long Integer" bei Tabellenfeldern und Abfrageparametern und dem Datentyp "Long" von Access Basic.
Das reservierte Wort VALUE kennzeichnet keinen der von der Jet Datenbank-Engine definierten Datentypen. In Microsoft Access- oder SQL-Abfragen kann VALUE jedoch als zulässiges Synonym für den Access Basic-Datentyp "Variant" angesehen werden.
Konvertierungsfunktionen für Datentypen
ZCurrency(Ausdruck) CCur(Ausdruck)
ZDouble(Ausdruck) CDbl(Ausdruck)
ZInteger(Ausdruck) CInt(Ausdruck)
ZLong(Ausdruck) CLng(Ausdruck)
ZSingle(Ausdruck) CSng(Ausdruck)
ZString(Ausdruck) CStr(Ausdruck)
ZVariant(Ausdruck) CVar(Ausdruck)
Achtung:
In Access Basic können Sie nur die englischen Funktionsnamen (aus der rechten Spalte) verwenden.
Das Argument Ausdruck kann ein beliebiger gültiger Zeichenfolgenausdruck oder ein numerischer Ausdruck sein. Die nachfolgende Tabelle zeigt, welcher Datentyp von den einzelnen Konvertierungsfunktionen erzeugt wird:
Funktionsweise der einzelnen Konvertierungsfunktionen
Funktion | Von | in |
ZCurrency (CCur) | einem beliebigen gültigen Ausdruck | Currency |
ZDouble (CDbl) | einem beliebigen gültigen Ausdruck | Double |
ZInteger (CInt) | einem beliebigen gültigen Ausdruck | Integer |
ZLong (CLng) | einem beliebigen gültigen Ausdruck | Long |
ZSingle (CSng) | einem beliebigen gültigen Ausdruck | Single |
ZString (CStr) | einem beliebigen gültigen Ausdruck | String |
ZVariant (CVar) | einem beliebigen gültigen Ausdruck | Variant |
Tabelle: Funktionsweise der Konvertierungsfunktionen
Die Konvertierungsfunktionen ZCurrency (CCur), ZDouble (CDbl), ZInteger (CInt), ZLong (CLng) und ZSingle (CSng) für numerische Ausdrücke steuern den Datentyp eines numerischen Ausdrucks. Mit ZCurrency (CCur) können Sie z.B. das Rechnen mit Währungswerten (mit größerer Genauigkeit und einem kleineren Bereich) erzwingen, wo normalerweise ganzzahlige Werte oder Werte mit einfacher oder doppelter Genauigkeit erscheinen würden. ZInteger (CInt) und ZLong (CLng) erzwingen das Rechnen mit Ganzzahlen, wo normalerweise Wärungswerte oder Werte mit einfacher oder doppelter Genauigkeit erscheinen würden. ZDouble (CDbl) und ZSingle (CSng) erzwingen das Rechnen mit Werten einfacher oder doppelter Genauigkeit, wo normalerweise Währungswerte oder ganzzahlige Werte erscheinen würden.
Da ZInterger (CInt) und ZLong (CLng) numerische Ausdrücke in Ganzzahlen konvertieren, können Sie diese Funktionen dazu verwenden, Dezimalzahlen zu runden.
Hinweis
Alle Konvertierungsfunktionen für Datentypen stellen selbsterklärenden Code zur Verfügung, der angibt, daß das Ergebnis einer Berechnung nicht im Standarddatentyp des Ergebnisses sondern als besonderer Datentyp ausgedrückt werden soll.
Liegt der Wert für Ausdruck bei den Funktionen ZCurrency (CCur), ZInteger (CInt), ZLong (CLng) und ZSingle (CSng) außerhalb des erlaubten Bereichs, tritt ein Laufzeitfehler auf und eine Meldung erscheint, es sei denn, das Programm verfügt über eine entsprechende Fehlerbehandlungsroutine.
Anmerkung
ZInteger (CInt) unterscheidet sich von den Funktionen Fix und Int, die die Dezimalstellen von Zahlen nicht runden, sondern abschneiden. Siehe hierzu auch das Beispiel zur Funktion Int. Wenn die Dezimalstelle genau 0,5 beträgt, rundet ZInteger (CInt) immer auf den nächsten geraden Wert. 0,5 wird z.B. auf 0 abgerundet, 1,5 dagegen wird auf 2 aufgerundet.
Für Tabellenfelder kann man den Datentyp der in einem Tabellenfeld gespeicherten Daten festlegen.
Mögliche Datentypeinstellungen
Einstellung | Beschreibung |
Text | (Standardeinstellung) Text mit bis zu 255 Zeichen oder in der mit der Eigenschaft "Feldgröße" definierten Länge. Gültig ist der jeweils kürzere Wert. |
Memo | Text mit einer Länge von maximal 64.000 Bytes. Felder vom Datentyp "Memo" können nicht indiziert werden. |
Zahl | Beliebiger numerischer Wert. Weitere Informationen finden Sie unter der Eigenschaft "Feldgröße". |
Datum/Zeit | Datums- und Zeitwerte für die Jahre 100 bis 9999. |
Währung | Mit einer Genauigkeit von bis zu 15 Stellen und 4 Dezimalstellen. |
Zähler | Zahl, die von Microsoft Access automatisch um 1 erhöht wird, wenn ein neuer Datensatz einer Tabelle hinzugefügt wird. Felder vom Datentyp "Zähler" können nicht aktualisiert werden. |
Ja/Nein | "Ja"- und "Nein"-Werte und Felder, die nur einen der beiden Werte enthalten. Felder vom Datentyp "Ja/Nein" können nicht indiziert werden. |
OLE-Objekt | Objekt, wie z.B. ein Microsoft Excel-Arbeitsblatt oder eine Microsoft Draw-Grafik, das von einer Objekt-Anwendung erstellt wurde. Die Größe kann maximal 1 Gigabyte betragen. Felder vom Datentyp "OLE-Objekt" können nicht indiziert werden. |
Tabelle: Datentypeinstellungen in Tabellenfeldern
Diese Eigenschaft kann nur in der Spalte "Felddatentyp" in der Entwurfsansicht einer Tabelle eingestellt werden. Sie ist im Eigenschaftenfenster, in Makros oder in Access Basic nicht verfügbar.Sie müssen den Datentyp für jedes Feld in einer Tabelle angeben. Jedes Feld kann nur Daten eines einzigen Datentyps enthalten.
Verwenden Sie den Datentyp "Währung" für Felder, mit denen Sie viele Berechnungen mit Daten durchführen möchten, die bis zu vier Dezimalstellen haben. Für Felder vom Datentyp "Single" und "Double" (Gleitkommazahlen einfacher und doppelter Genauigkeit) sind Gleitkommaberechnungen erforderlich. Der Datentyp "Währung" basiert auf einer schnelleren Festkommaberechnung, bei der Rundungsfehler vermieden werden.
Vorsicht:
Das Ändern eines Felddatentyps nach dem Eingeben von Daten in eine Tabelle führt unter Umständen zu einem längeren Datenumwandlungsvorgang, wenn Sie die Tabelle speichern. Wenn Datentypen nicht fehlerfrei umgewandelt werden können, kann es zu Datenverlust kommen.
Gültigkeitsbereiche, Lebensdauer
Variablen können die folgenden drei verschiedene Gültigkeitsbereiche haben:
Prozedurebene: Alle implizit oder explizit deklarierten Variablen einer Prozedur
Modulebene: Im Deklarationsteil eines Moduls mittels Dim deklarierten Variablen
Globale Ebene: Im Deklarationsteil eines Moduls mittels Global deklarierten Variablen
Gültigkeitsbereich und Lebensdauer von Variablen sind zu unterscheiden. Prinzipiell haben lokale Variablen nur die Lebensdauer der zugehörigen Prozedur. Variablen mit modularen oder globalen Gültigkeitsbereich bleiben jedoch erhalten bis die Datenbank geschlossen wird. Mit der Anweisung Static kann man Variablen eine entsprechende Lebensdauer zuweisen. Static vor einer Prozedur verschafft allen Variablen der Prozedur eine entsprechende Lebensdauer.
Anweisungen
Eine Anweisung besteht aus dem Inhalt einer Zeile oder einer Kontrollstruktur. Innerhalb einer Zeile können, wie von Basic her bekannt, mehrere Befehle getrennt durch einen Doppelpunkt aufgeführt werden.
Befehle
Befehle können Prozedur-, Funktions-, Makroaufrufe , Zuweisungen oder die GoTo-Anweisung sein.
Wahrheitswerte
Die vordefinierten Konstanten von Access-Basic TRUE (Wahr; -1) und FALSE (Falsch; 0) gelten auch bei Auswertung von Bedingungen innerhalb der entsprechenden Kontrollstrukturen. Bei der Verwendung der Konstanten werden auch nur diese Werte anerkannt. Im Gegensatz dazu gilt für das Zutreffen einer Bedingung , daß der Wert dieser ¹ 0 ist.
Beispiele :
Dim a As Integer
While a
...
Wend
Der While-Block wird solange ausgeführt, wie a ¹ 0 ist.
If a = TRUE Then
...
End If
Der Anweisungsblock der Then-Klausel wird nur dann ausgeführt, wenn a = -1 ist.
Zeichenfolgenausdruck
Die Anweisung Option Compare beeinflußt Zeichenfolgenvergleiche.
Führt innerhalb einer Prozedur eine unbedingte Verzweigung zur angegebenen Zeile oder Marke durch.
Syntax
GoTo {Zeilenmarke | Zeilennummer}
Bemerkungen
Die Argumente Zeilenmarke und Zeilennummer geben die Zeile an, die als nächste auszuführen ist. Das Argument Zeilenmarke muß mit einem Buchstaben beginnen, mit einem Doppelpunkt (:) enden und kann bis zu 40 Zeichen lang sein. Es darf kein in Access Basic reserviertes Wort sein. Jede Zeilenmarke muß innerhalb des Moduls, in dem sie verwendet wird, eindeutig bestimmt sein. Zeilenmarken können Groß- und Kleinbuchstaben enthalten. Zeilenmarken können in jeder beliebigen Spalte beginnen, vorausgesetzt, sie sind die ersten Zeichen (nicht Leerzeichen) der jeweiligen Zeile. Das Argument Zeilennummer kann bis zu 40 Zeichen lang sein. Es darf nur Dezimalziffern (0-9) enthalten und nicht mit einem Doppelpunkt enden. Jede Zeilennummer muß in dem Modul, in dem sie erscheint, eindeutig bestimmt sein. Zeilennummern können in jeder beliebigen Spalte beginnen, vorausgesetzt, sie sind die ersten Zeichen (nicht Leerzeichen) der jeweiligen Zeile. Wenn der Wert der Zeilennummer größer als 65.529 ist, kann die Funktion FZeile (Erl) die Zeilennummer, in der ein Fehler auftrat, nicht ordnungsgemäß ausgeben.
GoTo kann nur zu Zeilen innerhalb der Prozedur, die die Anweisung GoTo enthält, verzweigen.
Erlaubt eine bedingte Ausführung von Anweisungen aufgrund der Auswertung eines Ausdrucks.
Syntax 1
If Bedingung Then Then-Teil [Else Else-Teil]
Syntax 2
If Bedingung1 Then
[Anweisungsblock1]
[ElseIf Bedingung2 Then
[Anweisungsblock2] ]
. . .
[Else
[Anweisungsblockn] ]
End If
Bemerkungen
Syntax 1:
Die einzeilige Form der Anweisung eignet sich besonders für kurze, einfache Bedingungsüberprüfungen. Sie setzt sich aus folgenden drei Teilen zusammen:
Teil | Beschreibung |
Bedingung | Einer von zwei Ausdrucksarten: Ein numerischer Ausdruck oder ein Zeichenfolgenausdruck, der True (Wahr; ¹ 0) oder False (Falsch, 0 oder Wert Null") ausgibt (vgl. 2.1). Ein einzelner Ausdruck der Form If TypeOf Objekt Is Objekttyp. Das Objekt ist eine Steuerelementvariable und Objekttyp kann einer der folgenden Typen sein: BoundObjectFrame (Gebundenes Objektfeld), CheckBox (Kontrollkästchen), ComboBox (Kombinationsfeld), CommandButton (Befehlsschaltfläche), Label (Bezeichnungsfeld), Line (Linie), ListBox (Listenfeld), ObjectFrame (Objektfeld für eingebettete und verknüpfte Objektfelder und Diagramme), OptionButton (Optionsfeld), OptionGroup (Optionsgruppe), PageBreak (Seitenumbruch), Rectangle (Rechteck), SubForm (Unterformular), SubReport (Unterbericht), TextBox (Textfeld) oder ToggleButton (Umschaltfläche). |
Then-Teil, Else-Teil | Anweisungen oder Verzweigungen, die ausgeführt werden, wenn Bedingung Wahr (Then-Teil) oder Falsch (Else-Teil) ist. |
Der Then-Teil und Else-Teil haben beide die folgende Syntax:
{Anweisungen | [GoTo] Zeilennummer | GoTo Zeilenmarke}
Die Syntax für den Then-Teil und den Else-Teil setzt sich aus drei Teilen zusammen:
Teil | Beschreibung |
Anweisungen | Eine oder mehrere Access Basic-Anweisungen, die durch Doppelpunkte (:) getrennt sind. |
Zeilennummer | Eine gültige Zeilennummer des Programms. |
Zeilenmarke | Eine gültige Zeilenmarke des Programms. |
Bei der Verwendung von Zeilennummern muß im Gegensatz zu Zeilenmarken GoTo nicht angeben werden. Der Then-Teil wird ausgeführt, wenn die Bedingung Wahr ist, oder wenn das Objekt dem in Objekttyp angegebenen Typ entspricht. Wenn die Bedingung Falsch ist oder das Objekt nicht dem in Objekttyp angegebenen Typ entspricht, wird der Else-Teil ausgeführt. Ist keine Else-Klausel vorhanden, wird das Programm mit der nächsten Anweisung fortgesetzt. Sie können mehrere Anweisungen von einer Bedingung abhängig machen. Diese Anweisungen müssen jedoch, wie in der folgenden Anweisung, in derselben Zeile und durch Doppelpunkte getrennt, angegeben werden:
If Betrag > 1000 Then Betrag = Betrag * 1,20 : Summe = Summe + Betrag : GoTo Marke1
Syntax 2
Die Blockform von If...Then...Else ist strukturierter und flexibler als die einzeilige Form. Sie ist im allgemeinen leichter zu lesen und zu warten, und die Fehlersuche ist einfacher. Sie setzt sich aus folgenden drei Teilen zusammen:
Teil | Beschreibung |
Bedingung1, Bedingung2 | Die Bedingungen werden wie in der einzeiligen Form verwendet. |
Anweisungsblock1 - n | Eine oder mehrere Access Basic-Anweisungen in einer oder mehreren Zeilen. |
Beim Ausführen eines If-Blocks überprüft Access Basic Bedingung1, den ersten numerischen oder TypeOf-Ausdruck. Wenn der Ausdruck Wahr ist, oder wenn das Objekt dem in Objekttyp angegebenen Typ entspricht, werden die nach der Anweisung Then folgenden Anweisungen ausgeführt. Wenn der erste Ausdruck Falsch ist, oder wenn das Objekt nicht dem in Objekttyp angegebenen Typ entspricht, beginnt Access Basic als nächstes, alle ElseIf-Bedingungen nacheinander auszuwerten. Sobald Access Basic eine wahre Bedingung findet, oder eines der Objekte einem der Objekttypen entspricht, werden die der entsprechenden Anweisung Then folgenden Anweisungen ausgeführt. Wenn keine der ElseIf-Bedingungen Wahr ist, oder keines der Objekte dem zugehörigen Objekttyp entspricht, werden die nach der Anweisung Else folgenden Anweisungen ausgeführt. Nach dem Ausführen der Anweisungen, die nach Then oder Else folgen, wird das Programm mit der Anweisung fortgesetzt, die nach End If folgt.
Die Else- und ElseIf-Blöcke sind nicht unbedingt erforderlich. Es können beliebig viele ElseIf-Klauseln in einem If-Block verwendet werden. Diese dürfen jedoch nicht nach einer Else-Klausel stehen. Jeder Anweisungsblock kann wiederum verschachtelte If-Blöcke enthalten. Access Basic prüft, was nach dem reservierten Wort Then steht, um zu bestimmen, ob eine einzeilige Anweisung If oder ein If-Block folgt. Steht nach Then etwas anderes als ein Kommentar, wird die Anweisung als einzeilige Anweisung If interpretiert. Eine Anweisung If in Blockform muß die erste Anweisung in der Zeile sein. Vor den Teilen Else, ElseIf und End If der Anweisung darf nur eine Zeilennummer oder eine Zeilenmarke stehen. Der Block muß mit einer Anweisung End If abgeschlossen werden. Ausdrücke der Form If TypeOf Objekt Is Objekttyp, normale numerische Ausdrücke sowie Zeichenfolgenausdrücke können nicht mit demselben Bedingungsausdruck ausgewertet werden, so daß ein separater ElseIf-Block verwendet werden sollte.
Beispiel:
If Betrag > 11000 And Betrag <= 1000000 Then
...
ElseIf TypeOf VarArt Is ListBox Then
...
End If
Führt je nach Wert eines Ausdrucks einen von mehreren Anweisungsblöcken aus.
Syntax
Select Case Testausdruck
[Case Ausdrucksliste1
[Anweisungsblock1] ]
[Case Ausdrucksliste2
[Anweisungsblock2] ]
. . .
[Case Else
[Anweisungsblockn] ]
End Select
Bemerkungen
Die Anweisung Select Case verwendet folgende Argumente:
Argument | Beschreibung |
Testausdruck | Jeder beliebige numerische Ausdruck oder Zeichenfolgenausdruck. |
Anweisungsblock | Die Elemente Anweisungsblock1 bis Anweisungsblockn bestehen aus einer beliebigen Anzahl von Anweisungen in einer oder mehreren Zeilen. |
Ausdrucksliste | Diese Elemente können in einer dieser
drei Formen auftreten : Ausdruck [, Ausdruck] Ausdruck To Ausdruck Is Vergleichsoperator-Ausdruck |
Das Argument Ausdrucksliste besteht aus folgenden Teilen:
Teil | Beschreibung |
Ausdruck | Ein beliebiger numerischer Ausdruck oder Zeichenfolgenausdruck. Der Datentyp des Ausdrucks muß mit dem Datentyp von Testausdruck kompatibel sein. (Der Datentyp des Ausdrucks wird in den Datentyp von Testausdruck umgewandelt. Wenn Testausdruck z.B. ein Wert vom Datentyp "Integer" ist, kann Ausdrucksliste einen Wert vom Datentyp "Double" enthalten.) |
Vergleichsoperator | Ein beliebiger zulässiger Vergleichsoperator, ausgenommen Wie (Like). |
Wenn Testausdruck der einer Case-Klausel zugeordneten Ausdrucksliste entspricht, wird der Anweisungsblock, der dieser Case-Klausel folgt, bis zur nächsten Case-Klausel ausgeführt. Bei der letzten Case-Klausel wird der folgende Anweisungsblock bis zur Anweisung End Select ausgeführt. Anschließend springt die Programmsteuerung zu der Anweisung, die der Anweisung End Select folgt. Wird das reservierte Wort To zum Anzeigen eines Wertebereichs verwendet, muß der kleinere Wert vor To stehen. Vergleichsoperatoren können nur in Verbindung mit dem reservierten Wort Is verwenden werden.
Sobald Case Else verwendet wird, werden die zugehörigen Anweisungen nur dann ausgeführt, wenn Testausdruck mit keiner der anderen Case-Auswahlen übereinstimmt. Obwohl nicht unbedingt erforderlich, empfiehlt es sich doch, eine Anweisung Case Else in einem Select Case-Block zu verwenden, um unvorhergesehene Werte von Testausdruck abzufangen. Wenn keine Anweisung Case Else vorhanden ist, und keiner der in den Case-Klauseln aufgelisteten Ausdrücke dem Testausdruck entspricht, wird die Programmausführung mit der Anweisung fortgesetzt, die auf End Select folgt. Sie können in jeder Case-Klausel mehrere Ausdrücke oder Bereiche verwenden. Z.B.:
Case 100 To 1000, 2000 To 3000, 3300, 3400, Is > MaxBetrag
Sie können auch Bereiche und mehrere Ausdrücke für Zeichenfolgen definieren. Im folgenden Beispiel vergleicht Case Zeichenfolgen, die genau der Zeichenfolge Hallo" entsprechen, Zeichenfolgen, die in alphabetischer Reihenfolge zwischen Lehmann" und Meier" liegen und Werte, die dem aktuellen Wert von ZeichenString$ entsprechen:
Case "Hallo", "Lehmann" To "Meier", ZeichenString$
Entspricht Testausdruck mehr als einer Case-Klausel, werden nur die Anweisungen ausgeführt, die der ersten entsprechenden Klausel folgen. Anweisungen Select Case können verschachtelt werden. Jede Anweisung Select Case muß eine zugehörige Anweisung End Select haben.
Wiederholt eine Folge von Befehlen mehrmals. Die Anzahl der Wiederholungen ist dabei festgelegt.
Syntax
For Zähler = Startwert To Endwert [ Step Schrittgröße ]
[Anweisungsblock]
[Exit For]
[Anweisungsblock]
Next [Zähler [, Zähler]]
Bemerkungen
Die Anweisung For verwendet folgende Argumente:
Argument | Beschreibung |
Zähler | Numerische Variable, die als Schleifenzähler verwendet wird. Diese Variable darf weder ein Datenfeldelement noch ein Datensatzelement sein. |
Startwert | Anfangswert des Zählers. |
Endwert | Endwert des Zählers. |
Schrittgröße | Betrag, um den der Zähler bei jedem Schleifendurchlauf geändert wird. Wenn Sie keinen Wert für Step angeben, erhält Schrittgröße den Standardwert 1. |
Anweisungsblock | Eine beliebige Anzahl von Anweisungen oder Methoden, die oft wie angegeben ausgeführt werden. |
Der Wert von Step steuert die Schleifenausführung wie folgt:
Wert von Step | Schleife wird ausgeführt, wenn |
Positiv oder 0 | Zähler <= Endwert |
Negativ | Zähler >= Endwert |
Nach dem Starten der Schleife und dem Ausführen aller Anweisungen in der Schleife wird der Wert von Step zum Zähler addiert. Dann werden entweder die Anweisungen in der Schleife erneut ausgeführt (auf der Basis derselben Überprüfungen, die beim ersten Mal die Ausführung der Schleife bewirkten), oder die Schleife wird verlassen, und die Ausführung wird bei der Anweisung fortgesetzt, die der Anweisung Next folgt.
For...Next-Schleifen können auch durch einfaches ineinander stellen verschachtelt werden. Jeder Schleifenzähler sollte über einen eindeutigen Variablennamen verfügen. Die folgende Verschachtelung ist z.B. korrekt:
For I = 1 To 10
For J = 1 To 10
For K = 1 To 10
...
Next K
Next J
Next I
Aufeinander folgende Next-Anweisungen können auch in einer Zeile getrennt durch ein Komma geschrieben werden.
Next K, J, I (entspricht der oberen Anweisungsfolge)
Achtung : Die Reihenfolge der Laufvariablen muß beachtet werden !
Bei der Verwendung der Anweisung Next ohne Variable, wird der Wert für Step Schrittgröße zu der Variablen addiert, die sich auf die vorhergehende Anweisung For bezieht. Trift das Programm auf eine Anweisung Next vor der entsprechenden Anweisung For, tritt ein Fehler auf.
Führt eine Folge von Anweisungen in einer Schleife aus, solange eine gegebene Bedingung wahr ist.
Syntax
While Bedingung
[Anweisungsblock]
Wend
Bemerkungen
Das Argument Bedingung ist ein numerischer Ausdruck oder ein Zeichenfolgenausdruck, der True (Wahr; ¹ 0) oder False (Falsch, 0 oder Wert "Null") sein kann (vgl. 2.1). Wenn Bedingung Wahr ist, werden alle Anweisungen im Anweisungsblock ausgeführt, bis die Anweisung Wend erreicht wird. Die Programmsteuerung kehrt zur Anweisung While zurück und überprüft Bedingung erneut. Ist Bedingung weiterhin Wahr, wird der Vorgang wiederholt. Ist sie nicht mehr Wahr, wird die Ausführung mit der Anweisung fortgesetzt, die nach der Anweisung Wend folgt. While...Wend-Schleifen können in beliebig viele Ebenen verschachtelt werden. Jede Anweisung Wend gehört zur zuletzt aufgetretenen Anweisung While.
Wiederholt einen Block von Anweisungen, solange eine Bedingung wahr ist oder bis eine Bedingung wahr wird.
Syntax 1
Do [{While | Until} Bedingung]
[Anweisungsblock]
[Exit Do]
[Anweisungsblock]
Loop
Syntax 2
Do
[Anweisungsblock]
[Exit Do]
[Anweisungsblock]
Loop [{While | Until} Bedingung]
Bemerkungen
Das Argument Bedingung ist ein numerischer Ausdruck oder ein Zeichenfolgenausdruck, der True (Wahr; ¹ 0) oder False (Falsch, 0 oder Wert "Null") sein kann (vgl. 2.1). Die Programmzeilen zwischen den Anweisungen Do und Loop werden wiederholt, solange (While) oder bis (Until) die Bedingung wahr ist. Eine Anweisung Exit Do, die nur innerhalb einer Do...Loop verwendet werden kann, bietet eine weitere Möglichkeit, eine Do...Loop-Kontrollstruktur zu verlassen. Sie können beliebig viele Anweisungen Exit Do an jeder beliebigen Stelle innerhalb von Do...Loop einfügen. Exit Do wird oft zusammen mit der Auswertung einer Bedingung (z.B. If...Then) verwendet und übergibt die Steuerung an die erste Anweisung, die nach der Anweisung Loop folgt. Wenn Anweisungen Do...Loop verschachtelt sind, wird die Steuerung an die Anweisung Do...Loop übergeben, die sich in der Verschachtelungsebene über der Schleife befindet, in der Exit Do verwendet wurde.
Objekttypen und Objektvariablen
Objektvariablen vom Typ Ojekttyp" besitzen für die Dauer der Definition eine Bindung zu dem durch Objekttyp" assoziierten Objekt.
Þ Sie können über die Objetkvariable dann auf die Eigenschaften und Methoden des Objektes zugreifen.
(alphabetische Reihenfolge)
Control Ö
Database Ö
Field Ö
Form Ö
QueryDef Ö
Recordset Ö
Report Ö
TableDef Ö
Workspace Ö
Für das Zuweisen eines geöffneten Formulars oder Reports zu einer Objektvariablen.
Bsp:
Dim F1 as Form, R1 as Report
DoCmd OpenForm(Auftragsform")
DoCmd OpenReport(Auftragsbericht")
Set F1 = Forms!Auftragsform
Set R1 = Reports!Auftragsbericht
Vorteil:
Man kann nun so bei der Programmierung durch die Vergabe von neuen Namen effizienter arbeiten.
Für das Zuweisen eines Steuerelementes eines geöffneten Formulars zu einer Objektvariablen.
Bsp.:
Dim F1 as Form
Dim ST1 as Control
Set F1 = Forms!Kunden
Set ST1 = F1!Firmenbezeichnung
ST1.Caption = Hamburger Zigarrenfabrik"
Für das Zuweisen einer Datenbank (*.mdb) zu einer Objektvariablen.
Wichtige Methoden:
Close Datenbank schließen
OpenRecordset Zugriff auf Tabelle der Datanbank
(Syntax siehe Objekttyp Recordset)
CreateTableDef Erstellen neuer Tabelle
Wichtige Eigenschaften:
Name enthält den kompletten Pfadnamen
In diesem Zusammenhang oft verwendete Methoden:
CurrentDB() verwendet aktuelle Datenbank
OpenDatabase(PFAD") verwendet beliebige Datenbank
Bsp. Für Zuweisung:
Dim DB1 as Database
Dim DB2 as Database
Set DB1 = CurrentDB()
Set DB2 = OpenDatabase(c:\db\auftrag.mdb")
Andere Möglichkeit für CurrentDB() (OO, jedoch dann nicht mehr kompatibel zu ACCESS 1.x) :
Set DB1 = DBEnigne.Workspaces(0).Databases(0)
Þ CurrentDB() und OpenDatabase(...) sind Methoden von einem Objekt vom Typ Workspace. (Siehe Workspace-Objekt)
Für das Zuweisen einer Tabelle oder Abfrage einer Datenbank zu einer Objektvariablen.
Vereinfachte Syntax:
Set Variable = Datenbank.OpenRecordset(Herkunft,Typ)
Herkunft:
Tabellenname oder SQL-Anweisung
Typ:
DB_OPEN_TABLE (lokale Tabelle)
DB_OPEN_DYNASET (lokale, eingebundene Tabelle, Abfrage)
DB_OPEN_SNAPSHOT (ähnlich DB_OPEN_DYNASET, jedoch nur Kopie der Daten, während ein Dynaset eine Tabelle von indirekten Referenzen auf die Tabelle im Speicher repräsentiert.)
Bsp für Zuweisung:
Dim DB1 as Database, DS1 as Recordset, DS1 as Recordset
Set DB1 = CurrentDB()
Set DS1 = DB1.OpenRecordset(Kunden",DB_OPEN_DYNASET)
Set DS2 = DB1.OpenRecordset(Select * from Kunden;")
Wichtige Methoden:
MoveFirst
MoveLast
MoveNext
MovePrevious
FindFirst Krit Krit entspricht where-Bedingung einer SQL-Anweisung
FindLast Krit
FindNext Krit
FindPrevious Krit
Edit
Update
AddNew
Delete
Close
OpenRecordset(...) *
Hinweis:
Lediglich die Move-Methoden und die Close-Methode können mit Recordsets vom Typ DB_Open_SNAPSHOT arbeiten.
Wichtige Eigenschaften:
BOF beginning of file
EOF end of file
NOMatch Anwendung zum Bsp. nach findfirst-Methode
Sort * ermöglicht Sortierung
Filter * ermöglicht Angabe eines Filters
Index + Auswahl eines Indizees
* Þ Spezialfall: Erzeugung eines neuen Recordsets aus einem bereits bestehenden.
+ Þ nur für DB_OPEN_TABLE
Hinweis:
Die Datensätze sind direkt nach OpenRecordset nicht sortiert.
Ein Workspace-Objekt stellt eine Benutzersitzung dar. Standardmäßig gibt es nur eine Benutzersitzung : Workspaces(0)
Innerhalb einer Sitzung (Workspace-Objekt) können mehrere Datenbanken geöffnet werden, Transaktionen verwaltet werden und Daten über Kennwörter geschützt werden.
Wichtige Methoden:
CurrentDB()
OpenDatabase(...)
CreateDatabase(...)
BeginTrans
CommitTrans
Rollback
Wichtige Eigenschaften:
Name Name der Workspace
Password
UserName
Bsp. für eine Standardzuweisung:
Dim WS0 as Workspace
Dim DB1 as Database
Set WS0 = DBEngine.Workspace(0)
Set DB1 = WS0.OpenDatabase(kunde.mdb")
Hinweis:
Transaktionen können die Verarbeitunsgeschwindigkeit steigern.
Für das Zuweisen einer Abfrage zu einer Objektvariablen.
Sie können dadurch Abfragen ausführen lassen, neue erstellen bzw. bestehende ändern.Diese Funktionalität wurde bereits im Zusammenhang mit der Methode OpenRecordset auf andere Art und Weise beschrieben.
Objekttyp TableDef und Fields :
Diese Objekttypen dienen zum erstellen neuee Tabellen von ACCESS BASIC aus.
Es muß zunächst eine neue Tabelle erzeugt werden, dann die dazugehörigen Felder.
Objektdatentypen - Programmierbeispiele
In diesem Abschnitt finden Sie zu den gängigsten Objektdatentypen einfache und leicht verständliche Beispiele.
Bespiel 1 : Microsft Access - Objektdatentypen Form, Report, Control
Beschreibung:
Microsoft-Access-Datentypen beziehen sich auf die Oberfläche.
Bei Betätigung eines Buttons soll der Text in einem Text-Feld geändert werden.
Dieses Beispiel setzt folgende setzt folgende MA-Objekte voraus:
Formular namens Form_MAO
Steuerelement Text mit der Eigenschaft Name=Text_Feld1
Steuerelement Schalftfläche mit der Eigenschaft Name=Schaltfläche_links
Steuerelement Schalftfläche mit der Eigenschaft Name=Schaltfläche_rechts
Beispiel:
Sub Schaltfläche_links_Click ()
Dim F As Form
Dim C As Control
Set F = Forms!Form_MAO
Set C = F!Text_Feld1
C.Caption = "Linker Button gedrückt"
End Sub
Sub Schaltfläche_rechts_Click ()
Dim F As Form
Dim C As Control
Set F = Forms!Form_MAO
Set C = F!Text_Feld1
C.Caption = "Rechter Button gedrückt"
End Sub
Bespiel 2: Einführung für die Objektdatentypen Database und Recordset
Beschreibung:
Es werden hier auf drei verschiedene Arten jeweils dasselbe Dynaset zur Verfügung gestellt.
Über die Ereignis-Methode Schaltfläche_Read_Click() kann man dieses Dynaset durchlaufen.
Dieses Beispiel setzt folgende setzt folgende Objekte voraus:
Steuerelement Text mit der Eigenschaft Name=Text_Database
Steuerelement Schalftfläche mit der Eigenschaft Name=Schaltfläche_datab
Steuerelement Schalftfläche mit der Eigenschaft Name=Schaltfläche_read
Steuerelement Schalftfläche mit der Eigenschaft Name=Schaltfläche4
Steuerelement Schalftfläche mit der Eigenschaft Name=Schaltfläche5
Tabelle Teile mit dem Attribut Bezeichnung
Beispiel:
Dim C As Control
Dim DB As Database
Dim RS As Recordset
Sub Schaltfläche_Datab_Click ()
Set C = Forms!Form_Database!Text_Database
Set DB = CurrentDB()
Set RS = DB.OpenRecordset("Teile", DB_OPEN_DYNASET)
If RS.BOF Then
C.Caption = "Beginn of File"
Else
C.Caption = RS("Bezeichnung")
End If
End Sub
Sub Schaltfläche_Read_Click ()
RS.MoveNext
If RS.EOF Then
C.Caption = "End Of File"
RS.Close
DB.Close
Else
C.Caption = RS("Bezeichnung")
End If
End Sub
Sub Schaltfläche4_Click ()
Set DB = DBEngine.Workspaces(0).Databases(0)
Set RS = DB.OpenRecordset("Teile", DB_OPEN_DYNASET)
If RS.BOF Then
C.Caption = "Beginn of File"
Else
C.Caption = RS("Bezeichnung")
End If
End Sub
Sub Schaltfläche5_Click ()
Set DB = DBEngine.Workspaces(0).Databases(0)
Set RS = DB.OpenRecordset("Select * From Teile;")
If RS.BOF Then
C.Caption = "Beginn of File"
Else
C.Caption = RS("Bezeichnung")
End If
End Sub
Beispiel 3: Verwendung der Move-Methoden des Objektdatentyps Recordset
Beschreibung:
Es werden hier alle Inhalte eines Attributes einer Tabelle im Direktfenster ausgegeben.
Dieses Beispiel setzt folgende setzt folgende Objekte voraus:
Tabelle Teile mit dem Attribut Bezeichnung
Beispiel:
Function endlosmove ()
Set db = dbengine.workspaces(0).databases(0)
Set rs = db.OpenRecordset("Teile", db_open_dynaset)
rs.MoveFirst
Do Until rs.eof
debug.print rs("Bezeichnung")
rs.MoveNext
Loop
rs.Close
db.Close
End Function
Beispiel 4: Verwendung der Sort-Eigenschaft eines Recordset-Objektes
Beschreibung:
Es soll gezeigt werden, daß man für die Nutzung der Sort-Eigenschaft ein zweites Recordset-Objekt bilden muß.
Dieses Beispiel setzt folgende setzt folgende Objekte voraus:
Tabelle Teile mit dem Attribut Bezeichnung
Beispiel:
Sub new_sort ()
Dim db As Database
Dim rs1 As Recordset
Dim rs2 As Recordset
Set db = CurrentDB()
Set rs1 = db.OpenRecordset("Teile", db_open_dynaset)
rs1.sort = "Bezeichnung asc"
Set rs2 = rs1.OpenRecordset()
rs2.MoveFirst
Do Until rs2.eof
Debug.Print rs2("Bezeichnung")
rs2.MoveNext
Loop
rs2.Close
rs1.Close
db.Close
End Sub
Beispiel 5: Verwendung der Filter-Eigenschaft eines Recordset-Objektes, sowie der Find-Methoden
Beschreibung:
Es soll gezeigt werden, daß man für die Nutzung der Filter-Eigenschaft ein zweites Recordset-Objekt bilden muß.
Desweiteren soll hier auf den Umgang mit den Find-Methoden hingewiesen werden.
Dieses Beispiel setzt folgende setzt folgende Objekte voraus:
Tabelle Teile mit den Attributen Teilenr, Bezeichnung
Beispiel:
Sub new_filter ()
Dim db As Database
Dim rs1 As Recordset
Dim rs2 As Recordset
Set db = CurrentDB()
Set rs1 = db.OpenRecordset("Teile", db_open_dynaset)
rs1.filter = "Teilenr > '150'"
Set rs2 = rs1.OpenRecordset()
rs2.MoveFirst
Do Until rs2.eof
Debug.Print rs2("Teilenr")
rs2.MoveNext
Loop
rs2.Close
rs1.Close
db.Close
End Sub
Beispiel 6: Methoden find, edit, update
Beschreibung:
Es werden hier bei einem bestimmten Datensatz Änderungen in der Datenbank-Tabelle vorgenommen.
Ein Edit ohne ein Update wird nicht wirksam !
Dieses Beispiel setzt folgende setzt folgende Objekte voraus:
Tabelle Teile mit den Attributen Teilenr, Bezeichnung
Beispiel:
Sub find_edit_update ()
Dim db As Database
Dim rs As Recordset
Dim krit As String
Set db = CurrentDB()
Set rs = db.OpenRecordset("Teile", db_open_dynaset)
krit = "Teilenr = '241'"
rs.FindFirst krit
If rs.nomatch Then
Debug.Print ("Datensatz nicht gefunden")
Else
Debug.Print ("Datensatz gefunden")
Debug.Print ("Bezeichnung wird geändert")
rs.Edit
rs("Bezeichnung") = "Stein 240"
rs.Update
Debug.Print ("Bezeichnung ist geändert")
rs.MovePrevious
Debug.Print rs("Bezeichnung")
rs.MoveNext
Debug.Print rs("Bezeichnung")
End If
rs.Close
db.Close
End Sub
Beispiel 7: Transaktionen in Access Basic
Beschreibung:
Es werden hier im Rahmen einer Transaktionen Datensätze gelöscht bzw. nicht gelöscht.
Verändern Sie den Wert für Benutzerfrage im Code und vergleichen Sie das Ergebnis der Prozedur in der Tabelle Artikel.
Man könnte anstelle der if-Bedingung für Benutzerfrage wirklich eine Benutzerabfrage codieren.
Dieses Beispiel setzt folgende setzt folgende Objekte voraus:
Tabelle Artikel mit mehreren Datensaätzen (ca. 20)
Beispiel:
Sub trans ()
Dim i As Integer
Dim benutzerfrage As Integer
Dim ws As WorkSpace
Dim db As Database
Dim rs As Recordset
benutzerfrage = 0
Set ws = dbengine.workspaces(0)
Set db = ws.databases(0)
Set rs = db.OpenRecordset("artikel", db_open_dynaset)
ws.BeginTrans
For i = 1 To 5
rs.Delete
Debug.Print ("gelöscht")
rs.MoveNext
Next i
If benutzerfrage = 1 Then
ws.CommitTrans
Else
ws.Rollback
End If
rs.Close
db.Close
End Sub
Beispiel 8: Objektdatentypen TableDef und Field
Beschreibung:
Es soll hier eine neue Tabelle mit zwei Feldern angelegt werden.
Beispiel:
Sub create_new_table ()
Dim db As Database
Dim td As TableDef
Dim f As Field
Set db = CurrentDB()
Set td = db.CreateTableDef("Tabellenname")
Set f = td.CreateField("Name", DB_TEXT, 10)
td.fields.Append f
Set f = td.CreateField("Vorname", DB_TEXT, 16)
td.fields.Append f
db.tabledefs.Append td
End Sub
Module, Sub-Prozeduren und Funktionen
Den ersten Kontakt mit der Programmierung bekommt man durch das Symbol Modul des Datenbankfensters. Das Modul stellt den Rahmen von Access-Basic-Programmen dar. Es ist damit der Aktenordner, der Funktionen und Sub-Prozeduren aufnehmen kann, die einen sinnvollen Zusammenhang besitzen.
Durch die Aufteilung in verschiedene Module entsteht keineswegs eine Einschränkung bezüglich des Zugriffs auf die einzelnen Prozeduren, da innerhalb einer Datenbank alle Programmteile erreichbar sind. Der Aufruf einer Prozedur ist daher nicht auf den Bereich innerhalb eines Moduls beschränkt, sondern von jedem Modul aus können alle Prozeduren aufgerufen werden.
Nach dem Öffnen eines Moduls befindet man sich zu Beginn im Deklarationssabschnitt dieses Moduls, innerhalb dessen die Festlegung der Datendefinitionen, auf die alle Prozeduren dieses Moduls zugreifen können, erfolgt. Im Deklarationsabschnitt werden daher alle globalen Variablen des Moduls definiert. Des weiteren können hier Variablen festgelegt werden, auf die auch von anderen Modulen aus ein Zugriff gestattet wird. Hierzu werden die Variablen mit dem Schlüsselwort Global versehen. Damit unterscheidet Access Basic zwischen Variablen, die global im Modul und global in der Datenbank verwendbar sind.
Sub-Prozeduren und Funktionen sind kleine Programmeinheiten, die sich dadurch voneinander unterscheiden, daß Funktionen immer einen Wert zurückliefern.
Während der folgenden Ausführungen werden die Begriffe Sub-Prozedur und Funktion unter dem Oberbegriff Prozedur zusammengefaßt, wenn dies inhaltlich möglich ist.
Sub-Anweisung:
[Static] [Private] Sub Prozedurname [(Argumentenliste)]
[Anweisungsblock]
[Exit Sub]
[Anweisungsblock]
End Sub
Function-Anweisung:
[Static] [Private] Function Funktionsname [(Argumentenliste)] [As Datentyp]
[Anweisungsblock]
[Funktionsname = Ausdruck]
[Exit Function]
[Anweisungsblock]
[Funktionsname = Ausdruck]
End Function
Argument | Beschreibung |
Static | Gibt an, daß die lokalen Variablen der Prozedur zwischen einzelnen Aufrufen erhalten bleiben. |
Private | Gibt an, daß auf die Prozedur nur von anderen Prozeduren im Modul zugegriffen werden kann, in dem sie implementiert ist. Prozeduren in anderen Modulen haben auf diese Prozedur keinen Zugriff. |
Sub-Prozedur-, Funktionsname | Für die Namen von Sub-Prozeduren und Funktionen gelten dieselben Regeln wie für die Namen anderer Variablen. |
Ausnahme! Namen von Sub-Prozeduren dürfen, im Gegensatz zu Funktionsnamen, keine Typenkennzeichen enthalten. | |
Argumentenliste | Liste von Variablen, die für die Argumente stehen, die bei Aufruf der Prozedur an diese übergeben werden. Mehrere Variablen werden durch Kommas voneinander getrennt. Einzelne Argumente werden, sofern kein reserviertes Wort ByVal vorhanden ist, als Referenz übergeben. Wird also der Wert eines Arguments innerhalb der Prozedur geändert, ändert sich auch sein Wert in der aufrufenden Prozedur. |
Ausnahme! Wenn ein Argument, das an eine Funktion übergeben wird, ein Ausdruck ist, wird es behandelt, als wäre es mit dem reservierten Wort ByVal deklariert worden. | |
Anweisungsblock | Eine beliebige Gruppe von Anweisungen, die innerhalb des Rumpfes der Sub-Prozedur ausgeführt werden. |
Ausdruck | Rückgabewert der Funktion. Eine Funktion gibt einen Wert aus, indem sie diesen Wert der Funktion Funktionsname zuordnet. An jeder beliebigen Stelle innerhalb der Prozedur können beliebig viele solcher Zuordnungen erscheinen. Wird Funktionsname kein Wert zugeordnet, gibt die Prozedur einen Standardwert aus: eine numerische Funktion gibt den Wert 0 aus, eine Funktion vom Datentyp "String" eine leere Zeichenfolge ("") und eine Funktion vom Datentyp "Variant" den Varianttyp "Leer". |
Exit Sub, Exit Function | Bewirkt das sofortige Verlassen einer Prozedur. Anweisungen Exit können an beliebig vielen Stellen einer Prozedur erscheinen. |
End Sub, End Function | Markieren das Ende einer Prozedur. |
Das Argument Argumentenliste hat folgende Syntax:
[ByVal] Variable[( )] [As Datentyp] [, [ByVal]Variable[( )] [ As Datentyp] ] . . .
Argument | Beschreibung |
ByVal | Gibt an, daß für das Argument ein Wert und keine Referenz übergeben wird. Das reservierte Wort ByVal kann nicht in Verbindung mit einer Variablen eines benutzerdefinierten Datentyps oder eines Objektdatentyps verwendet werden. |
Variable | Name der Variablen, die als Argument übergeben werden soll. Verwenden Sie bei Variablen eines Datenfeldes die Klammern, aber lassen Sie die Anzahl der Dimensionen weg. |
As Datentyp | Deklariert den Datentyp von Variable. Datentyp kann "Integer", "Long", "Single", "Double", "Currency", "String" (nur Zeichenfolgen variabler Länge),"Variant", ein benutzerdefinierter Datentyp oder ein Objektdatentyp (eine Variable mit einem Objektdatentyp darf nicht als Datenfeld deklariert werden) sein. Verwenden Sie für jedes Argument eine separate Klausel As Datentyp. |
Der gesamte ausführbare Code muß in einer Prozedur enthalten sein. Sie können eine Prozedur nicht innerhalb einer anderen Prozedur definieren.
Eine Sub-Prozedur ist genau wie eine Funktion eine eigene Prozedur, die Argumente annehmen, eine Reihe von Anweisungen ausführen und die Werte ihrer Argumente ändern kann. Im Gegensatz zu einer Sub-Prozedur kann eine Funktion in einem Ausdruck aber genau wie eine eingebaute Funktion wie z.B. QWurzel (Sqr), Cos oder Zchn (Chr) verwendet werden. Man kann eine Funktion aufrufen, indem man in einem Ausdruck den Funktionsnamen, gefolgt von der in Klammern gesetzten Argumentenliste, verwendet. Die Klammern muß man auch dann einbeziehen, wenn die Funktion keine Argumente hat.
Prozeduren können auch rekursiv sein, d.h. sie können sich selbst aufrufen, um eine vorgegebene Aufgabe auszuführen.
Sub-Prozeduren dürfen nur innerhalb von Access Basic aufgerufen werden. Eine Ausnahme bilden die automatischen Ereignis-Prozeduren, die durch das Auslösen eines Ereignisses aktiviert werden.
Sie können nicht GoSub, GoTo oder Return verwenden, um in eine Sub-Prozedur zu verzweigen oder sie zu verlassen.
Sub-Anweisung Beispiel
In diesem Beispiel deklariert die Anweisung Sub den Namen einer Sub-Prozedur, die mit zwei Eingabevariablen aufgerufen wird und das Ergebnis anzeigt.
A = InputBox("Länge?") ' Rechtecklänge abfragen.
B = InputBox("Breite?") ' Rechteckbreite abfragen.
SubDemo A,B ' Sub-Prozedur mit Argumenten
' aufrufen.
End ' Programmende.
Sub SubDemo(RLänge, RBreite) ' Sub-Prozedur mit 2
' Argumenten definieren.
Fläche = RLänge * RBreite ' Rechteckfläche berechnen.
MsgBox "Fläche = " & Fläche ' Ergebnis anzeigen.
End Sub ' Ende der Sub-Prozedur.
Function-Anweisung Beispiel
In diesem Beispiel deklariert die Anweisung Function den Namen einer Funktion. Exit Function beendet die Prozedur, bevor die Anweisung End Function erreicht wird.
Function Quadratwurzel (X As Double) As Double
Select Case Sgn(X) ' Vorzeichen des Arguments
' auswerten.
Case 1 ' OK, wenn Vorzeichen positiv.
Quadratwurzel = Sqr(X)
Exit Function
Case 0 ' Benutzer informieren, wenn 0.
Mldg = "Übergebener Wert gleich 0."
Case -1 ' Benutzer informieren, wenn
' Vorzeichen negativ.
Mldg = "Unzulässiger Wert."
End Select
MsgBox Mldg ' Meldung anzeigen.
End Function
Call-Anweisung:
Übergibt die Programmsteuerung an eine Sub-Prozedur in Access Basic oder eine Dynamic-Link Library (DLL)-Prozedur.
Call Name [(Argumentenliste)]
oder
Name [Argumentenliste]
Argument | Beschreibung |
Name | Name der aufzurufenden Prozedur |
Argumentenliste | Variablen, Datenfelder oder Ausdrücke, die an die Prozedur übergeben werden sollen. |
Das reservierte Wort Call muß zum Aufrufen einer Prozedur nicht unbedingt angegeben werden. Wenn Sie es jedoch zum Aufrufen einer Prozedur verwenden, für die Argumente erforderlich sind, müssen Sie die Liste der Argumente in Klammern hinzufügen. Wenn Sie das reservierte Wort Call weglassen, müssen Sie auch die Klammern um die Argumentenliste weglassen.
Argumente werden standardmäßig als Referenzen übergeben. Dies trifft nur dann nicht zu, wenn sie in Klammern oder unter Verwendung des reservierten Wortes ByVal deklariert werden.
Call-Anweisung Beispiel
siehe 4.2.4.3
Deklarieren eines Verweises auf eine externe Prozedur (DLL [Dynamic-Link Library])
Declare-Anweisung:
Deklariert Referenzen zu externen Prozeduren in einer Dynamic-Link Library (DLL).
Declare Sub GlobalerName Lib BibName [Alias Parallelname ] [([Argumentenliste])]
oder
Declare Function GlobalerName Lib BibName [Alias Parallelname ] [([Argumentenliste])] [As Datentyp]
Teil | Beschreibung |
Sub | Gibt an, daß die Prozedur keinen Wert ausgibt. |
Function | Gibt an, daß die Prozedur einen Wert ausgibt und in einem Ausdruck verwendet werden kann. |
GlobalerName | Name der aufgerufenen Sub-Prozedur oder Funktion. Für Prozedurnamen gelten dieselben Regeln wie für die Variablennamen von Access Basic. Die Namen von Funktionen können ein Typenkennzeichen enthalten, das den von der Prozedur ausgegebenen Datentyp angibt. Dieser Name darf in keiner anderen Prozedur auftreten. Bei Funktionen bestimmt derDatentyp der Prozedur den auszugebenden Datentyp. Hat die Funktion keinen Datentyp, können Sie im Anschluß an Argumentenliste eine As-Klausel verwenden, um ihr einen Datentyp zuzuordnen. |
Lib | Gibt an, daß die deklarierte Prozedur in einer DLL enthalten ist. Die Lib-Klausel ist bei allen Deklarationen erforderlich. |
BibName | Name der DLL, die die deklarierte Prozedur enthält. Wenn Sie keine Dateinamenerweiterung angeben, wird die Standarderweiterung .EXE verwendet. |
Alias | Gibt an, daß die aufgerufene Prozedur in der DLL einen anderen Namen hat. Dies ist zweckmäßig, wenn der Name einer externen Prozedur einem reservierten Wort von Access Basic entspricht. Sie können Alias ferner verwenden, wenn der Name einer DLL-Prozedur gleich dem Namen einer globalen Variablen oder Konstanten (mit Global deklariert) oder einer anderen Prozedurim selben Gültigkeitsbereich ist. Darüber hinaus ist Alias zweckmäßig, wenn der Name der DLL-Prozedur Zeichen enthält, die inAccess Basic-Namen nicht zulässig sind. |
Parallelname | Eine Textzeichenfolge, die den Namen der Prozedur in der DLL bezeichnet. |
Argumentenliste, As Datentyp | siehe Definieren einer Prozedur" (4.2.2.1) |
Man verwndet die Anweisung Declare, um externe (d.h. in einer DLL enthaltene) Prozeduren zu deklarieren. Eine Anweisung Declare für eine externe Prozedur kann nur im Deklarationsbereich eines Moduls erscheinen. DLL-Prozeduren, die in einem beliebigen Modul deklariert werden, sind für alle Prozeduren in sämtlichen Modulen verfügbar.
Anmerkung! In der Parameterliste einer Anweisung Declare kann man keine Zeichenfolgen fester Länge verwenden, da nur Zeichenfolgen variabler Länge an Prozeduren übergeben werden können. Zeichenfolgen fester Länge können zwar als Argumente einer Prozedur auftreten, werden aber vor der Übergabe in Zeichenfolgen variabler Länge umgewandelt.
Declare-Anweisung Beispiel
Dieses Beispiel zeigt zwei Möglichkeiten zum Aufrufen der Prozedur MessageBeep in der Datei USER.EXE, einer Microsoft Windows DLL. Der Name, unter dem wir diese Prozedur verwenden möchten, ist BBeep
Declare Sub BBeep Lib "User" Alias "MessageBeep" (ByVal N As
Integer)
Sub AufrufDemo ()
Call BBeep(0) 'Windows-Prozedur aufrufen.
For I = 1 To 1000: Next I 'Kurze Pause einfügen.
BBeep 0 'Erneuter Aufruf ohne das
'reservierte Wort Call.
End Sub
MS Access bietet eine Menge von Standardfunktionen, die in der nachstehenden Tabelle (sortiert nach dem englischen Begriff) aufgeführt werden. Um die Übersichtlichkeit zu gewährleisten, erfolgte eine Unterteilung in folgende Bereiche:
Datei
Datenfelder
Dynamischer Datenaustausch
Domäne (bestimmte Menge von Datensätzen)
Datum/Zeit
Fehlerbehandlung
Finanzmathematische Aufgaben
Grafiken in gedruckten Berichten
Inspektion von Variablen
Konvertierung
Mathematische Aufgaben
Objektmanipulation
Steuerung des Programmablaufs
SQL Aggregatoperationen
Zeichenfolgen
Sonstiges
Deutsch | Englisch | Bedeutung |
AktVerz | CurDir | Gibt das aktuelle Verzeichnis eines Laufwerks im Datentyp Variant aus |
AktVerz$ | CurDir$ | Gibt das aktuelle Verzeichnis eines Laufwerks im Datentyp String aus |
Verz | Dir | Ermittelt den Dateinamen im Datentyp Variant, der mit dem übergebenen String übereinstimmt |
Verz$ | Dir$ | Ermittelt den Dateinamen im Datentyp String, der mit dem übergebenen String übereinstimmt |
Dateiende | EOF | Ermittelt, ob das Dateiende erreicht wurde |
DateiAttr | FileAttr | Ermittelt den Dateimodus oder die Dateikennung einer geöffneten Datei |
FreieDatei | FreeFile | Ermittelt die nächste freie Dateinummer |
Eingabe | Input | Liest Zeichen aus einer Datei und gibt sie im Datentyp Variant aus |
Eingabe$ | Input$ | Liest Zeichen aus einer Datei und gibt sie im Datentyp String aus |
AktPos | Loc | Ermittelt die aktuelle Position in einer offenen Datei |
Dateigröße | LOF | Zeigt die Größe einer offenen Datei in Byte an |
DateiPosition | Seek | Ermittelt die aktuelle Dateiposition |
Spc | Fügt die angegebene Anzahl von Leerzeichen in eine Ausgabe durch die Methode Print oder die Anweisung Print# ein | |
Tab | Schaltet bei der Methode Print oder der Anweisung Print# um eine bestimmte Anzahl von Spalten weiter |
LBound | Ermittelt den kleinsten Index (untere Grenze) für die genannte Dimension eines Datenfeldes | |
UBound | Ermittelt den größten vorhandenen Index für die spezifizierte Dimension eines Datenfeldes |
DDE | DDE | Startet einen DDE-Dialog mit einem anderen Programm |
DDEInit | DDEInitiate | Startet einen DDE-Dialog mit einem anderen Programm |
DDEAnfrage | DDERequest | Fordert über einen offenen DDE-Kanal von dem anderen Programm ein Informationselement an |
DDESenden | DDESend | Sendet ein Informationselement an ein anderes Programm |
DomMittelwert | DAvg | Berechnet den arithmetischen Mittelwert einer Menge von Werten in einer Domäne |
DomAnzahl | DCount | Ermittelt die Zahl der markierten Datensätze in einer bestimmten Menge von Datensätzen (Domäne). |
DomErsterWert | DFirst | Ermittelt einen Feldinhalt aus dem ersten Datensatz einer Domäne |
DomLetzterWert | DLast | Ermittelt einen Feldinhalt aus dem letzten Datensatz einer Domäne |
DomWert | DLookup | Ermittelt einen Feldinhalt aus einer bestimmten Menge von Datensätzen |
DomMax | DMax | Gibt den größten Wert aus einer Menge von Werten einer Domäne an |
DomMin | DMin | Gibt den kleinsten Wert aus einer Menge von Werten einer Domäne an |
DomStdAbw | DStDev | Schätzt die Standardabweichung einer Populationsstichprobe, die aus einer Menge von Werten einer Domäne gebildet wird |
DomStdAbwG | DStDevP | Schätzt die Standardabweichung einer Gesamtpopulation, die aus einer Menge von Werten einer Domäne gebildet wird |
DomSumme | DSum | Ermittelt die Summe einer Menge von Werten aus der angegebenen Domäne |
DomVarianz | DVar | Schätzt die Varianz einer Populationsstichprobe, die aus einer Menge von Werten einer Domäne gebildet wird |
DomVarianzG | DVarP | Schätzt die Varianz einer Gesamtpopulation, die aus einer Menge von Werten einer Domäne gebildet wird |
Datum | Date | Ermittelt das aktuelle Systemdatum im Datentyp Variant |
Datum$ | Date$ | Ermittelt das aktuelle Systemdatum im Datentyp String |
DatAdd | DateAdd | Addiert oder subtrahiert zu einem Datum ein bestimmtes Zeitintervall |
DatDiff | DateDiff | Ermittelt einen Ausdruck vom Datentyp Variant, der die Zahl der Zeitintervalle zwischen zwei Datumsangaben festlegt |
DatTeil | DatePart | Ermittelt einen bestimmten Teil des Datums |
Jetzt | Now | Ermittelt die aktuellen Datums- und Uhrzeitangaben des Rechners |
Zeit | Time | Liefert die aktuelle Systemzeit im Datentyp Variant |
Zeit$ | Time$ | Liefert die aktuelle Systemzeit im Datentyp String |
Zeitgeber | Timer | Ermittelt die Anzahl der seit 00:00 vergangenen Sekunden |
FZeile | Erl | Ermittelt die Zeilennummer, bei der der letzte Fehler verursacht wurde |
FCode | Err | Ermittelt den Fehlercode |
FMeldung | Error | Liefert die Fehlermeldung im Datentyp Variant, die dem übergebenen Fehlercode entspricht |
FMeldung$ | Error$ | Liefert die Fehlermeldung im Datentyp String, die dem übergebenen Fehlercode entspricht |
GDA | DDB | Berechnet den Abschreibungswert für einen genannten Zeitraum und benutzt dazu das Verfahren der geometrisch degressiven Abschreibung |
ZW | FV | Ermittelt den zukünftigen Wert einer Investition, der auf regelmäßigen Zahlungen und auf einem konstanten Zinssatz basiert |
ZINSZ | IPmt | Berechnet den Betrag der Zinszahlungen für eine Investition über einen festgelegten Zeitraum basierend auf konstanten Zahlungen und konstantem Zinssatz |
IRR | Ermittelt den internen Zinsfuß für eine Folge regelmäßiger Zahlungsein- und -ausgänge | |
MIRR | Ermittelt den geänderten internen Zinsfuß für eine Reihe von regelmäßigen Zahlungsaus- und -eingängen | |
ZZR | NPer | Liefert die Anzahl der Zahlungszeiträume für eine Investition auf Basis konstanter Zahlungen und Zinsen |
NPV | Ermittelt den Nettobarwert einer Investition auf der Basis einer Folge regelmäßiger Zahlungsaus- und -eingänge und eines Abzinsungssatzes | |
RMZ | Pmt | Ermittelt die Zahlung für eine Investition, die auf regelmäßigen Zahlungen und auf einem konstanten Zinssatz basiert |
KAPZ | PPmt | Ermittelt den Kapitalbetrag für eine bestimmte Zeitdauer einer Investition basierend auf regelmäßigen Zahlungen und auf einem konstanten Zinssatz |
BW | PV | Ermittelt den aktuellen Wert einer Investition basierend auf regelmäßigen Zahlungen und auf einem konstanten Zinssatz |
ZINS | Rate | Berechnet den Zinssatz je Zeitraum für eine Investition |
LIA | SLN | Ermittelt den Wert einer linearen Abschreibung eines Anlageobjekts für eine bestimmte Zeitdauer |
DIA | SYD | Ermittelt den Wert der digitalen Abschreibung eines Anlagenobjekt für eine festgelegte Zeitdauer |
Grafiken in gedruckten Berichten
Farbe | QBColor | Gibt den RGB-Farbcode aus, der über einer Zahl zwischen 0 und 15 bestimmt wurde |
RGB | RGB | Ermittelt einen Wert vom Datentyp Long, der einen RGB-Farbwert definiert |
IstDatum | IsDate | Liefert einen Wert, der bestimmt, ob der übergebene Parameter vom Datentyp Variant in ein Datum umgewandelt werden kann |
IstLeer | IsEmpty | Liefert einen Wert, der bestimmt, ob der übergebene Parameter vom Datentyp Variant initialisiert wurde |
IstNull | IsNull | Liefert einen Wert, der bestimmt, ob der übergebene Parameter vom Datentyp Variant den Varianttyp Null enthält |
IstNumerisch | IsNumeric | Liefert einen Wert, der bestimmt, ob der übergebene Parameter vom Datentyp Variant in einen numerischen Typ umgewandelt werden kann |
VarTyp | VarType | Ermittelt einen Wert, der definiert, auf welche Weise eine Variable vom Datentyp Variant von Access Basic intern gespeichert wird |
Asc | Asc | Liefert den numerischen Wert, der dem ANSI-Code des ersten Zeichens der angegebenen Zeichenfolge entspricht |
ZCurrency | CCur | Wandelt einen gültigen Ausdruck in einen Currency-Datentyp um |
ZDouble | CDbl | Wandelt einen gültigen Ausdruck in einen Double-Datentyp um |
Zchn | Chr | Liefert eine einstellige Zeichenfolge des Datentyps Variant, deren ANSI-Code der Funktion übergeben wurde |
Zchn$ | Chr$ | Liefert eine einstellige Zeichenfolge des Datentyps String, deren ANSI-Code der Funktion übergeben wurde |
ZInteger | CInt | Wandelt einen gültigen Ausdruck in einen Integer-Datentyp um |
ZLong | CLng | Wandelt einen gültigen Ausdruck in einen Long-Datentyp um |
ZSingle | CSng | Wandelt einen gültigen Ausdruck in einen Single-Datentyp um |
ZString | CStr | Wandelt einen gültigen Ausdruck in einen String-Datentyp um |
ZVariant | CVar | Wandelt einen gültigen Ausdruck in einen Variant-Datentyp um |
ZVarDat | CVDate | Wandelt einen gültigen Ausdruck in einen Varianttyp 7 (Datum) des Datentyps Variant um |
DatSeriell | DateSerial | Ermittelt das serielle Datumsformat des genannten Jahres, Monats und Tages |
DatWert | DateValue | Ermittelt das Datum, das als String übergeben wurde |
Tag | Day | Liefert einen Integerwert, der den Tag innerhalb eines Monats darstellt, der als Datum übergeben wurde |
Format | Format | Formatiert ein Datum, eine Zeit, eine Zahl oder eine Zeichenfolge laut Angabe und gibt das Ergebnis im Datentyp Variant aus |
Format$ | Format$ | Formatiert ein Datum, eine Zeit, eine Zahl oder eine Zeichenfolge laut Angabe und gibt das Ergebnis im Datentyp String aus |
Hex | Hex | Gibt eine Zeichenfolge vom Datentyp Variant aus, die dem hexadezimalen Wert des dezimalen Übergabeparameters entspricht |
Hex$ | Hex$ | Gibt eine Zeichenfolge vom Datentyp String aus, die dem hexadezimalen Wert des dezimalen Übergabeparameters entspricht |
Stunde | Hour | Liefert einen Integerwert zwischen 0 und 23, der die Stunde darstellt, die als Uhrzeit übergeben wurde |
Minute | Minute | Liefert einen Integerwert im Bereich von 0 bis 59, die den Minuten der übergebenen Uhrzeit entspricht |
Monat | Month | Liefert einen Integerwert aus dem Bereich 1 bis 12, der dem Monat des übergebenen Datums entspricht |
Oktal | Oct | Liefert eine Zeichenfolge im Datentyp Variant, dem der Oktalwert des dezimalen Arguments entspricht |
Oktal$ | Oct$ | Liefert eine Zeichenfolge im Datentyp String, dem der Oktalwert des dezimalen Arguments entspricht |
Sekunde | Second | Liefert einen Integerwert zwischen 0 und 59, der die Sekunde darstellt, die als Uhrzeit übergeben wurde |
Str | Str | Wandelt einen numerischen Ausdruck in eine Zeichenfolge vom Datentyp Variant um |
Str$ | Str$ | Wandelt einen numerischen Ausdruck in eine Zeichenfolge vom Datentyp String um |
ZeitSeriell | TimeSerial | Liefert das serielle Zeitformat für die übergebene Uhrzeit |
ZeitSeriellStr | TimeValue | Liefert die Uhrzeit, die als String übergeben wurde |
Wert | Val | Wandelt eine Zeichenfolge in einen numerischen Wert um |
Wochentag | Weekday | Liefert einen Integerwert zwischen 1 und 7, der den Wochentag in dem übergebenen Datum darstellt |
Jahr | Year | Liefert einen Integerwert im Bereich zwischen 100 und 9999, der das Jahr in dem übergebenen Datum darstellt |
Abs | Abs | Berechnet den Absolutwert einer Zahl |
ArcTan | Atn | Berechnet den Arkustangens einer Zahl |
Cos | Cos | Berechnet den Kosinus eines Winkels |
Exponential | Exp | Berechnet mit der genannten Zahl die Potenz von e |
Fix | Fix | Zeigt den ganzzahligen Anteil einer Zahl an |
Int | Int | Ermittelt den ganzzahligen Anteil einer Zahl |
Log | Log | Berechnet den natürlichen Logarithmus einer Zahl |
ZZG | Rnd | Ermittelt eine Zufallszahl |
Vorzchn | Sgn | Liefert einen Wert, der das Vorzeichen der übergebenen Zahl darstellt |
Sin | Sin | Ermittelt den Sinuswert eines Winkels |
QWurzel | Sqr | Ermittelt die Quadratwurzel einer Zahl |
Tan | Tan | Berechnet den Tangens eines Winkels |
CreateControl | Erzeugt ein Steuerelement in dem angegebenen geöffneten Formular | |
CreateForm | Erzeugt ein Formular | |
CreateGroupLevel | Erzeugt eine Gruppierung im angegebenen Bericht | |
CreateObject | Erzeugt ein neues Objekt | |
CreateReport | Erzeugt einen Bericht | |
CreateReportControl | Erzeugt ein Steuerelement in dem angegebenen geöffneten Bericht | |
DeleteControl | Löscht das angegebene Steuerelement in einem Formular | |
DeleteReportControl | Löscht das angegebene Steuerelement in einem Bericht |
Wählen | Choose | Liefert aus einer Liste von Argumenten einen Eintrag |
Wenn | IIf | Gibt bei erfüllter Bedingung den ersten Ausdruck, ansonsten den zweiten Ausruck aus |
Schalter | Switch | Ermittelt aus einer Liste von Ausdrücken den Wert bzw. Ausdruck, der mit dem ersten Ausdruck in der Liste verbunden ist, der als Ergebnis True liefert |
Mittelwert | Avg | Berechnet den arithmetischen Mittelwert einer Menge von Werten in einem Feld, das sich in einer Abfrage, in einem Formular oder in einem Bericht befindet |
Anzahl | Count | Ermittelt die Zahl der derzeit markierten Datensätze in einem Bericht, einem Formular oder in einer Abfrage |
ErsterWert | First | Ermittelt den Inhalt eines Feldes des ersten Datensatzes einer Abfrage, eines Berichts oder eines Formulars |
LetzterWert | Last | Ermittelt den Inhalt eines Feldes des letzten Datensatzes einer Abfrage, eines Berichts oder eines Formulars |
Max | Max | Ermittelt den größten Wert aus einer Menge von Werten in einem bestimmten Feld |
Min | Min | Ermittelt den kleinsten Wert aus einer Menge von Werten in einem bestimmten Feld |
StdAbw | StDev | Schätzt die Standardabweichung einer Populationsstichprobe, die aus einer Menge von Werten aus einem Feld einer Abfrage, eines Formulars oder eines Berichtes gebildet wird |
StdAbwG | StDevP | Schätzt die Standardabweichung einer Gesamtpopulation, die aus einer Menge von Werten aus einem Feld einer Abfrage, eines Formulars oder eines Berichtes gebildet wird |
Summe | Sum | Berechnet die Summe einer Menge von Werten, die in einem Feld einer Abfrage, eines Berichts oder Formulars stehen |
Varianz | Var | Schätzt die Varianz einer Populationsstichprobe, die aus einer Menge von Werten aus einem Feld einer Abfrage, eines Formulars oder eines Berichts gebildet wird |
VarianzG | VarP | Schätzt die Varianz einer Gesamtpopulation, die aus einer Menge von Werten aus einem Feld einer Abfrage, eines Formulars oder eines Berichts gebildet wird |
InStr | InStr | Ermittelt die Position des ersten Auftauchens einer Zeichenfolge innerhalb einer anderen Zeichenfolge |
Kleinbst | LCase | Wandelt alle übergebenen Buchstaben in Kleinbuchstaben um und gibt sie im Datentyp Variant aus |
Kleinbst$ | LCase$ | Wandelt alle übergebenen Buchstaben in Kleinbuchstaben um und gibt sie im Datentyp String aus |
Links | Left | Liefert n Zeichen im Datentyp Variant von links betrachtet aus der genannten Zeichenfolge |
Links$ | Left$ | Liefert n Zeichen im Datentyp String von links betrachtet aus der genannten Zeichenfolge |
Länge | Len | Ermittelt die Anzahl der Zeichen in einer Zeichenfolge oder die Größe einer Variablen in Byte |
LGlätten | LTrim | Entfernt alle führenden Leerzeichen aus der Kopie einer Zeichenfolge vom Datentyp Variant |
LGlätten$ | LTrim$ | Entfernt alle führenden Leerzeichen aus der Kopie einer Zeichenfolge vom Datentyp String |
TeilStr | Mid | Ermittelt aus einer Zeichenfolge einen bestimmten Teil im Datentyp Variant |
TeilStr$ | Mid$ | Ermittelt aus einer Zeichenfolge einen bestimmten Teil im Datentyp String |
Rechts | Right | Liefert n Zeichen im Datentyp Variant von rechts betrachtet aus der genannten Zeichenfolge |
Rechts$ | Right$ | Liefert n Zeichen im Datentyp String von rechts betrachtet aus der genannten Zeichenfolge |
RGlätten | RTrim | Entfernt alle Leerzeichen am Ende aus der Kopie einer Zeichenfolge vom Datentyp Variant |
RGlätten$ | RTrim$ | Entfernt alle Leerzeichen am Ende aus der Kopie einer Zeichenfolge vom Datentyp String |
LeerZchn | Space | Liefert die spezifizierte Anzahl von Leerzeichen im Datentyp Variant |
LeerZchn$ | Space$ | Liefert die spezifizierte Anzahl von Leerzeichen im Datentyp String |
StrVgl | StrComp | Liefert einen Wert des Datentyps Variant, der das Ergebnis des Vergleichs zwischen zwei Zeichenfolgen darstellt |
String | String | Gibt ein Zeichen mehrfach, das zu einer Zeichenkette im Datentyp Variant zusammengesetzt wird |
String$ | String$ | Gibt ein Zeichen mehrfach, das zu einer Zeichenkette im Datentyp String zusammengesetzt wird |
Glätten | Trim | Entfernt alle führenden und alle nachfolgenden Leerzeichen aus der Kopie einer Zeichenfolge im Datentyp Variant |
Glätten$ | Trim$ | Entfernt alle führenden und alle nachfolgenden Leerzeichen aus der Kopie einer Zeichenfolge im Datentyp String |
Großbst | UCase | Wandelt alle Buchstaben in Großbuchstaben um und gibt sie als Zeichenfolge im Datentyp Variant aus |
Großbst$ | UCase$ | Wandelt alle Buchstaben in Großbuchstaben um und gibt sie als Zeichenfolge im Datentyp String aus |
CodeDB | Ermittelt das Database-Objekt, das sich auf die Datenbank bezieht, in der der Code abläuft | |
Befehl | Command | Ermittelt die Übergabeparameter im Datentyp Variant, die in der Befehlszeile beim Starten von MS-Access angegeben wurden |
Befehl$ | Command$ | Ermittelt die Übergabeparameter im Datentyp String, die in der Befehlszeile beim Starten von MS-Access angegeben wurden |
CurrentDB | CurrentDB | Ermittelt das Objekt Database für die aktuelle Datenbank |
Aktiver Benutzer | CurrentUser | Ermittelt den aktuellen Benutzer |
DoEvents | Hält die Ausführung des Moduls an, damit Windows auf Meldungen reagieren kann | |
Umgebung | Environ | Liefert die Zeichenfolge vom Datentyp Variant einer Umgebungsvariablen des Betriebssystems |
Umgebung$ | Environ$ | Liefert die Zeichenfolge vom Datentyp String einer Umgebungsvariablen des Betriebssystems |
Auswerten | Eval | Wertet einen Ausdruck aus und gibt das Ergebnis aus |
GetObject | Liefert ein OLE-Automatisierungsobjekt aus einer Datei | |
Eingabefeld | InputBox | Stellt ein Dialogfeld mit Aufforderung zur Eingabe im Datentyp Variant auf dem Bildschirm dar |
Eingabefeld$ | InputBox$ | Stellt ein Dialogfeld mit Aufforderung zur Eingabe im Datentyp String auf dem Bildschirm dar |
Meldung | MsgBox | Gibt ein Meldungsfenster aus, das der Anwender bestätigen muß |
OpenDatabase | Öffnet die genannte Datenbank | |
Bereich | Partition | Gibt eine Zeichenfolge aus, die definiert, an welcher Position innerhalb einer berechneten Folge von Bereichen eine Zahl erscheint |
Ausführen | Shell | Startet ein lauffähiges Programm |
SysCmd | Ermittelt Systeminformationen von Access | |
Benutzer | User | Liefert den Namen des aktuellen Datenbankbenutzers |
Achtung! Bei der Verwendung einer Funktion in einem Formular kann man mit dem deutschen Funktionsnamen arbeiten. Falls man jedoch eine Funktion mit Access Basic schreibt, muß man den englischen Namen verwenden.
EOF (Dateinummer)
Seek(Dateinummer)
LOF(Dateinummer)
Die Prozedur Datei() gibt den Inhalt der Datei c:\greser\test.txt zeilenweise aus und stellt die jeweils aktuelle "Cursor-Position" dar (Seek). Die Funktion LOF(..) bewirkt die Ausgabe der Größe der geöffneten Datei in Byte.
Sub Datei ()
Open "c:\greser\test.txt" For Input As #23
Do While Not EOF(23)
Input #23, tmp
Debug.Print tmp
a = Seek(23)
Debug.Print a
Loop
Debug.Print LOF(23)
Close #23
End Sub
DCount(Ausdruck,Domäne[,Kriterien])
DFirst(Ausdruck,Domäne[,Kriterien])
DLast(Ausdruck,Domäne[,Kriterien])
DMax(Ausdruck,Domäne[,Kriterien])
Argument | Beschreibung |
Ausdruck | Zeichenfolgenausdruck, der das Feld, welches die auszuwertenden Daten enthält, bezeichnet. Ausdruck kann auch Berechnungen ausführen, die Daten eines oder mehrerer Felder, Steuerelemente in einem Formular, Konstanten oder Funktionen als Operanden enthalten. Darunter darf allerdings keine andere Aggregatsfunktion für Domänen oder SQL sein |
Domäne | Zeichenfolgenausdruck, der die Quelle der Datensätze, aus der sich die Domäne zusammensetzt, angibt. Dies kann der Name einer Tabelle oder Abfrage oder ein SQL-Ausdruck sein. |
Kriterien | Bedingung als Zeichenfolgenausdruck, der den Datensatzbereich, d.h. die Domäne, einschränken kann. Wenn man dies wahlfreie Argument fortläßt, berechnet die Funktion den Ausdruck auf der Basis der gesamten Domäne. |
Die Funktion DCount(...) gibt die Anzahl von Datensätzen aus einem bestimmten Bereich (Domäne) aus, die in Ausdruck keinen Wert Null haben, es sei denn, man gibt für Ausdruck das Platzhalterzeichen * an, dann werden alle Datensätze der Domäne geliefert.
DCount("*", "Trainer") liefert 6
DCount("Verein", "Trainer") liefert 5
DCount("Nachname", "Trainer") liefert 6
Im Argument Ausdruck kann man mehrere Felder miteinander verbinden. Dies geschieht entweder durch das + Zeichen oder durch das & Zeichen. Die unterschiedliche Wirkung dieser beiden Arten von Verbindungen bezieht sich auf die Auswertung von Null-Werten in den Feldern. Wenn man Felder mit dem + Zeichen verbindet, werden nur Datensätze gezählt, die in keinem der verbundenen Felder eine Null enthalten. Wenn man Felder mit dem & Zeichen verbindet, werden alle Datensätze gezählt, die in wenigstens einem der verbundenen Felder keinen Null-Wert enthalten.
DCount("Verein&Nachname", "Trainer") liefert 6
DCount("Verein+Nachname", "Trainer") liefert 5
Die Funktionen DFirst("Nachname", "Trainer") und DLast("Nachname", "Trainer") geben den Wert des Feldes Nachname aus dem ersten bzw. letzten Datensatz der Tabelle "Trainer" an. Die Funktion DMax("Nachname", "Trainer") liefert den größten Wert des Feldes Nachname in der Tabelle "Trainer".
Sub Domäne ()
Debug.Print DCount("*", "Trainer")
Debug.Print DCount("Verein", "Trainer")
Debug.Print DCount("Nachname", "Trainer")
Debug.Print DCount("Verein&Nachname", "Trainer")
Debug.Print DCount("Verein+Nachname", "Trainer")
Debug.Print DFirst("Nachname", "Trainer")
Debug.Print DLast("Nachname", "Trainer")
Debug.Print DMax("Nachname", "Trainer")
End Sub
Datum/Zeit
Date()
Now()
Time()
DateAdd(Intervall,Anzahl,Datum)
DatePart(Intervall,Datum)
DateDiff(Intervall, Datum1, Datum2[, ErsterWochentag][, ErsteWoche])
Argument | Beschreibung |
Intervall | Zeichenfolge: yyyy(Jahr), q(Quartal), m(Monat), y(Kalendertag), d(Tag), w(Wochentag), ww(Woche), h(Stunde), n(Minute), s(Sekunde) |
Anzahl | Zahl oder numerischer Ausdruck, mit dem die Anzahl der Intervalle bestimmt wird. Wenn Anzahl negativ ist, wird der Wert Anzahl*Intervall vom Datum abgezogen, sonst dazugezählt. |
Datum | Datumswert, kann als kurzes (2.4.95) oder
langes Format (2.April 95) angegeben werden. Wenn Datum ohne Jahreszahl verwendet wird, setzt Access das aktuelle Jahr ein. #Datum# - beim ersten Aufruf der Funktion "Datum" - bei jedem Aufruf der Funktion neu |
ErsterWochentag | Eine Ganzzahl, die den ersten Tag der
Woche angibt. Sie können einen beliebigen der folgenden
Werte verwenden: 1 Sonntag (Standardeinstellung) 2 Montag 3 Dienstag 4 Mittwoch 5 Donnerstag 6 Freitag 7 Samstag |
ErsteWoche | Eine Ganzzahl, die die erste Woche des
Jahres angibt. Sie können einen beliebigen der folgenden Werte verwenden: 0 Verwendet die Einstellung für "Erste Woche des Jahres" im Dialogfeld Optionen 1 Beginnt am 1.Januar (Standardeinstellung) 2 Beginnt mit erster Woche mit 4 Tagen 3 Beginnt mit erster voller Woche |
Die Funktion Date() liefert das aktuelle Systemdatum, die Funktion Now() das aktuelle Systemdatum und Systemuhrzeit, die Funktion Time() die aktuelle Systemzeit.
Die Funktion DateAdd("m",2, "01.06.95") addiert zum 01.06.95 zwei Mal das Intervall "Monat" und liefert somit das Datum 01.08.1995.
Die Funktion DateAdd("yyyy", 10, "01.06.95") addiert zum 01.06.95 10 Mal das Intervall "Jahr" und liefert somit das Datum 01.06.2005.
Die Funktion DatePart("w", "7.Juni 95") gibt die Zahl 4 aus, weil der 7. Juni 1995 ein Mittwoch ist.
Die Funktion DateDiff("w", "6.06", "14.06", 4) gibt die Zahl 1 aus, weil zwischen dem 14.06. und dem 6.06. genau eine Woche Differenz besteht, wenn man als ersten Wochentag den Mittwoch nimmt.
Sub Datum ()
Debug.Print Date
Debug.Print Now
Debug.Print Time
Debug.Print DateAdd("m", 2,"01.06.95")
Debug.Print DateAdd("yyyy", 10, "01.06.")
Debug.Print DatePart("w", "7.Juni")
Debug.Print DateDiff("w", "6.06", "14.06", 4)
End Sub
Konvertierung
Hour(Zahl)
Minute(Zahl)
Second(Zahl)
Time Serial(Stunde,Minute,Sekunde)
TimeValue(Uhrzeit)
Die Funktion Hour(...) gibt eine ganze Zahl zwischen 0 und 23 für die Stunde aus. Entsprechend die Funktionen Minute(...) und Sekunde(...).
Hour("23:24:25") liefert die Zahl 23
Minute("23:24:25") liefert die Zahl 24
Second("23:24:25") liefert die Zahl 25
Die Funktion TimeSerial(...) gibt einen Zeitwert aus, der aus den Angaben Stunde, Minute und Sekunde ermittelt wird. (Achtung! Minus-Werte)
TimeSerial(2+3,70,45-46) liefert den Zeitwert 06:09:59
Die Funktion TimeValue(...) wandelt eine als Zeichenfolge angegebene Uhrzeit in die serielle Zahl um.
TimeValue("18:00:00") - .5 errechnet die serielle Zahl 0.25, gibt diese jedoch als Zeitangabe 06:00:00 aus.
Sub Konvert ()
Debug.Print Hour("23:24:25")
Debug.Print Minute("23:24:25")
Debug.Print Second("23:24:25")
Debug.Print TimeSerial(2 + 3, 70, 45 - 46)
Debug.Print TimeValue("18:00:00") - .5
End Sub
CreateReport([Datenbank [, Berichtsvorlage]])
Argument | Beschreibung |
Datenbank | Name der Datenbank "" steht für aktuelle Datenbank |
Berichtsvorlage | Berichtsname "" Einstellung Optionen Berichtsentwurf |
Mit Hilfe der Anweisung DoCmd kann man Microsoft Access Aktionen (Makros) aus Access Basic heraus ausführen. Der Befehl Restore stellt die ursprüngliche Größe eines auf Vollbild vergrößerten oder zum Symbol verkleinerten Fensters wieder her.
Die Prozedur Objekt () erstellt in der aktuellen Datenbank einen Bericht vom Typ des Berichts "B1".
Sub Objekt ()
Dim Bericht1 As Report
Set Bericht1 = CreateReport("", "B1")
DoCmd Restore
End Sub
Left(Zeichenfolgenausdruck, n)
Right(Zeichenfolgenausdruck, n)
UCase(Zeichenfolgenausdruck)
InStr([Start,]ZfolgenAusdr1,ZfolgenAusdr2[,Zeichenvergleich])
Argument | Beschreibung |
Start | Startposition für Suchlauf |
ZfolgenAusdr1 | der zu durchsuchende Ausdruck |
ZfolgenAusdr2 | Ausdruck, mit dem verglichen werden soll |
Zeichenvergleich | Vergleichsmethode: 0 Groß-/Klein beachten 1 Groß-/Klein nicht beachten 2 Methode DATABASE |
Die Funktionen Left(..) und Right(...) geben die ersten n Zeichen, beginnend von links bzw. rechts, des Zeichenfolgenausdruckes aus.
Debug.Print Left(b,6) liefert "Blumen"
Debug.Print Right(b,4) liefert "Erde
Die Funktion UCase(...) wandelt alle Buchstaben des Zeichenfolgendausdrucks in Großbuchstaben um.
Debug.Print UCase(b) liefert "BLUMENTOPFERDE"
Die Funktion InStr(...) liefert die Position des ersten Auftretens einer Zeichenfolge innerhalb einer anderen. Der Rückgabewert ist die Position der Übereinstimmung. Wird keine Übereinstimmung festgestellt, wird der Wert 0 zurückgegeben.
Debug.Print InStr(1, b, t, 1) liefert den Wert 7
Sub Zeichenfolge ()
b = "Blumentopferde"
t = "Topf"
Debug.Print Left(b, 6)
Debug.Print Right(b, 4)
Debug.Print UCase(b)
Debug.Print InStr(1, b, t, 1)
End Sub
MsgBox(Mldg[,Typ[,Titel]]
Argument | Beschreibung |
Mldg | Zeichenfolgenausdruck, dessen Inhalt im Dialogfeld als Meldetext angezeigt wird. Zeilenumbrüche erfolgen automatisch. Man kann außerdem einen Zeilenumbruch erzwingen, wenn man in den Zeichenfolgenausdruck ein Wagenrücklaufzeichen (Chr(13)) oder Zeilenvorschubzeichen (Chr(10)) einfügt. |
Typ | Schaltfläche + Symbolart + Standardschaltfläche; vgl. Übersicht weiter unten (Default: Typ 0) |
Titel | Titelleiste des Dialogfeldes (Default: "Microsoft Access") |
Schaltflächen
Wert | Bedeutung |
0 | Nur OK |
1 | OK und ABBRECHEN |
2 | ABBRECHEN; WIEDERHOLEN UND IGNORIEREN |
3 | JA, NEIN und ABBRECHEN |
4 | JA und NEIN |
5 | WIEDERHOLEN und ABBRECHEN |
Symbolart
Wert | Bedeutung |
0 | Ohne Symbol |
16 | STOP - Symbol |
32 | ? - Symbol (Frage) |
48 | ! - Symbol (Warnung) |
64 | i - Symbol (Information) |
Standardschaltfläche
Wert | Bedeutung |
0 | Erste Schaltfläche ist Standard |
256 | Zweite Schaltfläche ist Standard |
512 | Dritte Schaltfläche ist Standard |
Die Prozedur Sub Message gibt folgendes Meldungsdialogfeld aus, wobei sich der Typ (= 321) zusammensetzt aus 1 + 64 + 256:
Sub Message ()
R = MsgBox("Dies ist eine" & Chr(13) & "Meldung", 321, "Titel")
Debug.Print R
End Sub
Der Rückgabewert der Funktion MsgBox(...) gibt an, welche Schaltfläche gewählt wurde. Im einzelnen gilt:
Wert | Bedeutung |
1 | OK |
2 | ABBRECHEN |
3 | ABBRECHEN |
4 | WIEDERHOLEN |
5 | IGNORIEREN |
6 | JA |
7 | NEIN |
InputBox(Eingabeaufforderung[,[Titel][,Standard][,XPos,YPos]
Argument | Beschreibung |
Eingabeaufforderung | Zeichenfolgenausdruck |
Titel | Titelleiste |
Standard | Vorbesetzung für das Eingabefeld |
XPos | Abstand von rechts --> in Twip --> 1 cm = 567 Twips |
YPos | Abstand von oben |
Die Prozedur Einput bewirkt das Einblenden des folgenden Dialogfeldes. Die Funktion InputBox gibt den in das Eingabefeld eingegebenen Wert aus.
Sub Einput ()
W = InputBox("Bitte Namen eingeben","Name ?","Greser",0,0)
Debug.Print W
End Sub
Flexible Listenfelder und Kombinationsboxen
Sie sind durch die Beschreibungen in den vorherigen Kapiteln bereits in der Lage Listboxen bzw. Kombinationsfelder mit Daten zu füllen. Dies können Sie recht einfach interaktiv durch einen Assistenten unter Access erledigen. Sie sind damit aber in der Wahl Ihrer Daten sehr eingeschränkt. Diese Inflexibilität soll in diesem Kapitel genommen werden.
Es wird hier zunächst ein Musterbeispiel für flexibles Füllen von Listboxen besprochen. Dies gilt natürlich analog für Kombinationsfelder.
Anschließend finden Sie in diesem Abschnitt den Programmcode eines Formulars.
Hier sind einige wesentliche und durchaus nützliche Beispiele abgedruckt, die Sie auch sehr leicht veranschaulichen können. Sie müssen hierfür nur die Kurzbeschreibung des Musterbeispiels beachten. Desweiteren müssen Sie die Methode Feld13_AfterUpdate berücksichtigen, die als einzigste Funktion an Felder (Steuerelemente) durch die Nennung von Feldnamen gebunden ist. Das heißt Sie müssen ein paar Felder des Formulars mit den entprechenden Namen belegen.
Um die Beispiele auszutesten, müssen Sie ebenfalls noch eine Access-Tabelle Teile" mit einer Spalte Bezeichnung" anlegen, die Sie mit ein paar Beispiel-Werten füllen sollten.
Kurzbeschreibung eines Musterbeispiels:
Sie müssen zunächst eine Funktion anlegen, dessen Namen Sie beliebig wählen können. Die Schnittstellenparameter sind allerdings genormt, das heißt hier müssen Sie die Notation genau einhalten. Sie können die vom Access-System geforderte Norm den Funktionen des mitgelieferten Programmcodes (siehe unten) entnehmen.
Die für uns wichtigsten Parameter sind: Zeile, Spalte, Code
Ich werde jetzt diese Parameter anhand einer Listbox mit zwei Spalten vorstellen (Funktion neu_2).
Zunächst einmal ist wichtig, daß Access diese Funktion desöfteren mit verschiedenen Parametern aufruft. Die Anzahl der Aufrufe ist unbestimmt und kann nicht vorausgesagt werden.
Zeile" und Spalte" gibt bei den Aufrufen an, welche Zeile und Spalte Access nun mit Werten füllen will.
Code" ist ein von Access übergebener Parameter, der verschiedene Werte liefert. Wir können diese Werte interpretieren und demgemäß Access Werte über den Funktionsnamen zurürckliefern.
Werte für Code":
0 Þ Initialiserung möglich. Es ist sinnvoll hier ein Array mit den von Ihnen gewünschten Werten zu füllen. Sind Sie fertig, so geben Sie einen Funktionswert ungleich 0 an Access zurück.
1 Þ Access verlangt hier als Funktionswert eine eindeutige ID. Geben Sie hier zum Bsp. Timer" zurück.
3 Þ Funktionswert = Anzahl der gweünschten Zeilen (Array-Größe)
4 Þ Funktionswert = Anzahl der gewünschten Spalten
5 Þ Funktionswert = Spaltenbreite in Twips (-1=Standardwert)
6 Þ Funktionswert = Datenwert, der in der Listbox dargestellt werden soll. Hier können auch die Parameter Zeile" und Spalte" von Ihnen ausgwertet werden.
7 Þ Formatangabe möglich. Es wird jedoch empfohlen diesen Parameter nicht zu verwenden. Arbeiten Sie vorzugsweise mit dem Befehl Format$, und formatieren Sie so das von Ihnen gefüllte Array.
Die eigentliche Arbeit ist jetzt geschehen. Sie müssen nun nur noch in einem Formular eine Listbox anlegen, dessen Herkunftstyp" (siehe Eigenschaften) den Wert neu2" enhält.
Mitgelieferter Programmcode
Option Compare Database
Dim db As Database
Dim rs As Recordset
Dim daten(200) As String * 30
Dim datei(200) As String * 30
Dim datei1(200) As String * 30
Dim datei2(200) As String * 30
Dim menge As Integer
Dim menge1 As Integer
Dim menge2 As Integer
Dim menge3 As Integer
Dim i As Integer
Function fktfüllen1 (fld As Control, id As Variant, zeile As Variant, spalte As Variant, code As Variant)
Select Case code
Case 0
fktfüllen1 = True
Case 1
fktfüllen1 = 10
Case 3
fktfüllen1 = menge
Case 4
fktfüllen1 = 1
Case 5
fktfüllen1 = -1
Case 6
fktfüllen1 = daten(zeile)
Case 7
fktfüllen1 = Null
End Select
End Function
Function neu (fld As Control, id As Variant, zeile As Variant, spalte As Variant, code As Variant)
Dim i As Integer
Select Case code
Case 0 'init
Set db = dbengine.workspaces(0).databases(0)
Set rs = db.OpenRecordset("Teile", db_open_dynaset)
rs.MoveFirst
i = 0
Do Until rs.eof
daten(i) = rs("Bezeichnung")
i = i + 1
rs.MoveNext
Loop
menge = i - 1
rs.Close
db.Close
neu = True 'Rückgabewert != 0
Case 1 'eindeutiger ID
neu = Timer
Case 3 'Zeilenzahl
neu = menge
Case 4 'Spaltenzahl
neu = 1
Case 5 'Spaltenbreite in Twips (-1 => Standard)
neu = -1
Case 6 'Übertragung der Daten
neu = daten(zeile)
Case 7 'Formatierungsangabe möglich (Null => Standard)
neu = Null
End Select
End Function
Function neu_2 (fld As Control, id As Variant, zeile As Variant, spalte As Variant, code As Variant)
Select Case code
Case 0 'init
'init der ersten Spalte
Set db = dbengine.workspaces(0).databases(0)
Set rs = db.OpenRecordset("Teile", db_open_dynaset)
rs.MoveFirst
i = 0
Do Until rs.eof
daten(i) = rs("Bezeichnung")
i = i + 1
rs.MoveNext
Loop
menge1 = i - 1
rs.Close
db.Close
'init der zweiten Spalte
i = 0
datei(i) = Dir("c:\dos\*.*")
i = i + 1
Do
datei(i) = Dir
i = i + 1
Loop Until datei(i - 1) = ""
i = i - 1
If (i > menge1) Then
menge1 = i
End If
neu_2 = True 'Rückgabewert != 0
Case 1 'eindeutiger ID
neu_2 = Timer
Case 3 'Zeilenzahl
neu_2 = menge1
Case 4 'Spaltenzahl
neu_2 = 2
Case 5 'Spaltenbreite in Twips (-1 => Standard)
neu_2 = -1
Case 6 'Übertragung der Daten
If spalte = 0 Then
neu_2 = daten(zeile)
Else
neu_2 = datei(zeile)
End If
Case 7 'Formatierungsangabe möglich (Null => Standard)
neu_2 = Null
End Select
End Function
Function neu3 (fld As Control, id As Variant, zeile As Variant, spalte As Variant, code As Variant)
Select Case code
Case 0 'init
i = 0
datei1(i) = Dir("c:\dos\*.*")
i = i + 1
Do
datei1(i) = Dir
i = i + 1
Loop Until datei1(i - 1) = ""
i = i - 1
menge2 = i
neu3 = True 'Rückgabewert != 0
Case 1 'eindeutiger ID
neu3 = Timer
Case 3 'Zeilenzahl
neu3 = menge2
Case 4 'Spaltenzahl
neu3 = 1
Case 5 'Spaltenbreite in Twips (-1 => Standard)
neu3 = -1
Case 6 'Übertragung der Daten
neu3 = datei1(zeile)
Case 7 'Formatierungsangabe möglich (Null => Standard)
neu3 = Null
End Select
End Function
Function neu4 (fld As Control, id As Variant, zeile As Variant, spalte As Variant, code As Variant)
Select Case code
Case 0 'init
i = 0
'Beim aller ersten mal enthält feld13 NULL => Fehler !!
'Vorbeugung durch folgendes if !
If IsNull(feld13) Then
auswahl = "c:\windows\" + Left$(Dir("c:\dos\*.*"), 1) + "*.*"
Else
auswahl = "c:\windows\" + Left$(feld13, 1) + "*.*"
End If
datei2(i) = Dir(auswahl)
If datei2(i) <> "" Then
i = i + 1
Do
datei2(i) = Dir
i = i + 1
Loop Until datei2(i - 1) = ""
i = i - 1
End If
menge3 = i
neu4 = True 'Rückgabewert != 0
Case 1 'eindeutiger ID
neu4 = Timer
Case 3 'Zeilenzahl
neu4 = menge3
Case 4 'Spaltenzahl
neu4 = 1
Case 5 'Spaltenbreite in Twips (-1 => Standard)
neu4 = -1
Case 6 'Übertragung der Daten
neu4 = datei2(zeile)
Case 7 'Formatierungsangabe möglich (Null => Standard)
neu4 = Null
End Select
End Function
Sub Feld13_AfterUpdate ()
feld15.Requery
End Sub
Im Direktfenster können einzelne Zeilen von Access Basic-Code ausgeführt werden und es kann in den folgenden Situationen verwenden werden :
Testen und Debuggen von Funktionen und Sub-Prozeduren.
Überprüfen des Wertes eines Feldes, eines Steuerelements oder der Einstellungen einer Eigenschaft
Anzeigen des Wertes einer Variablen oder eines Ausdrucks, wenn die Ausführung des Codes angehalten wurde.
Das Direktfenster kann aus dem Modulfenster über die entsprechende Schaltfläche oder dem Menü Ansicht erreicht werden.
Testen von Funktionen und Sub-Prozeduren
Sub-Prozeduren können im Direktfenster unter der Angabe ihres Namens oder mit Hilfe der Call-Anweisung gestartet werden. Die Klammern für Parameter können bei Prozeduren weggelassen werden, sobald diese keine Argumente benötigen. Funktionen können mit der Anweisung "Debug.Print" getestet werden. Da innerhalb des Direktfensters standardmäßig das Systemobjekt Debug verwendet wird, kann auch nur die Anweisung "Print" genutzt werden. Zusätzlich gilt, wie in Access-Basic üblich, auch das (?) als Ersatz für die Print-Anweisung.
Zum Testen der parmeterlosen Funktion bzw. Prozedur "DeckungsbeitragBerechnen" müßte z.B. folgendes eingeben werden :
Funktion: Debug.Print DeckungsbeitragBerechnen()
Prozedur: DeckungsbeitragBerechnen
Call DeckungsbeitragBerechnen
Access Basic führt die Funktion (Prozedur) aus und zeigt das Ergebnis im Direktfenster an. Wurde eine Funktion (Prozedur) schon mal ausgeführt, kann dieses durch die Positionierung des Cursors auf die entsprechende Zeile und Betätigung der EINGABE-Taste jederzeit wiederholt werden.
Durch die Anweisung "Print" gefolgt von einem Bezeichner für ein Feld, ein Steuerelement oder eine Eigenschaft, das bzw. die einem geöffneten Formular oder Bericht zugeordnet ist, kann dessen Wert im Direktfenster überprüft werden..
Beispiel:
Bei geöffnetem Formular "Produkte", kann durch den Befehl
? Forms![Produkte]![Bezeichnung]
der aktuelle Wert des Feldes "Bezeichnung" ausgegeben werden.
Anzeigen des Werts einer Variablen oder eines Ausdrucks, während der Ausführung
In den Source-Code muß die Anweisung Debug.Print, mit der entsprechenden Variable oder dem entsprechendem Ausdruck, hinzugefügt werden. Jedesmal, wenn die Prozedur mit der Anweisung Debug.Print aufgerufen wird, erscheint der Wert der Variablen oder des Ausdrucks im Direktfenster.
Beispiel:
Sub test1 ()
Dim a As Integer
MsgBox "Hallo World": Debug.Print "Hallo world"
a = 6
While a
a = a - 1
Debug.Print "a = ", a
Wend
End Sub
Nach der Anzeige der Message-Box wird im Direktfenster auch Hallo World" ausgegeben. Anschließen erfolgt innerhalb der While-Schleife bei jedem Schleifendurchlauf die Anzeige des Wertes der Variablen a".
Wenn im Direktfenster eine Prozedur mit einem Haltepunkt ausgeführt wird, kann während der Ausführungspause der Inhalt einer Variablen oder eines Ausdrucks mit dem Befehl Debug.Print abgefragt werden. Dabei ist die Sichtbarkeit der Variablen und Prozeduren zu beachten.
Schrittweises Ausführen von Prozeduren und Verwendung von Haltepunkten
Die Wirkung jeder Anweisung der aktuellen Prozedur kann, durch schrittweise (zeilenweise) Ausführung des Codes, beobachtet werden.
Es existieren zwei Arten der schrittweisen Ausführung , die sich beim Aufruf von Prozeduren unterscheiden. Mit dem Befehl Einzelschritt wird bei einem Prozeduraufruf in diese gesprungen und zeilenweise durchlaufen. Mit dem Befehl Prozedurschritt wird bei einem Prozeduraufruf die Prozedur als Einheit ausgeführt und dann mit der nächsten Anweisung der aktuellen Prozedur fortgefahren.
Damit eine Prozedur schrittweise ausgeführt werden kann, muß zuerst ein Haltepunkt gesetzt werden und anschließend die Prozedur über das Direktfenster gestartet werden. Ein Haltepunkt wird durch anklicken des entsprechenden Schaltzeichens für die aktuelle Zeile der Prozedur gesetzt. Sobald der Haltepunkt erreicht wurde, kann die Prozedur entweder schrittweise oder bis zum nächsten Haltepunkt ausgeführt werden.
Ereignisprozeduren können über ihr Entwurffenster getestet werden. Soll eine Ereignisprozedur in Einzelschritten ausgeführt werden, muß zuerst in der Entwurfsansicht ein geeigneter Haltepunkt gesetzt werden (vgl. 7.2.1). Anschließend muß zu dem zugehörigen Formular gewechselt werden, ohne das Entwurfsfenster zu beenden. Nun wird das gewünschte Ereignis ausgelöst und die Prozedur wird an dem gesetztem Haltepunkt angehalten. Es stehen nun alle Funktionen für den Test einer Prozedur zur Verfügung (s.o.).
1 Objekte, Eigenschaften und Methoden Torsten Simon
2 Bilden von Ausdrücken Mario Gans
3 Erstellen von Abfragen Arndt Blumenthal
4 Verwenden von SQL Johannes Greser
5 Makros Mario Gans
1 Datentypen Mario Gans
2 Kontrollstrukturen Arndt Blumenthal
3 Objekttypen und Objektvariablen Torsten Simon
4 Module, Sub-Prozeduren und Funktionen Johannes Greser
5 Standardfunktionen Johannes Greser
6 Flexible Listenfelder und Kombinationsboxen Torsten Simon
7 Debugger Arndt Blumenthal