Dienstag, 27. Juni 2017

Home
Tipps
Bücher
Software
News / Links
Hilfe
Impressum

Sponsored by
QualityHosting

  

Befehlsschaltflächen fassen meistens mehrere Arbeitsschritte zusammen und erleichtern damit die Bedienung eines Formulars. Damit eine Schaltfläche bestimmte Aufgaben übernehmen kann, müssen Sie sie mit einem Makro oder einer VBA-Prozedur verknüpfen.

Schaltflächen für die wichtigsten Aufgaben können Sie einfach und schnell mit dem Befehlsschaltflächen-Assistenten von Access anlegen.

Zum Start des Befehlsschaltflächen-Assistenten gehen Sie wie folgt vor:

Öffnen Sie ein Formular in der Entwurfsansicht. Markieren Sie in der Toolbox die Symbole Steuerelementassistenten und Befehlsschaltfläche.

Klicken Sie auf die Position des Formulars, an der Sie eine Befehlsschaltfläche anordnen wollen.

Der erste Dialog des Befehlsschaltflächen-Assistenten enthält eine Liste von Kategorien, nach denen die Schaltflächen organisiert sind. Nachdem Sie beispielsweise die Kategorie Datensatzoperationen markiert haben, erscheinen die Aktionen dieser Kategorie in der rechten Liste. Markieren Sie beispielsweise den Eintrag Datensatz duplizieren.

Über die Schaltfläche Weiter öffnen Sie weitere Dialogseiten des Assistenten, mit denen Sie unter anderem ein Symbol für die neue Schaltfläche auswählen können. Alternativ können Sie aber auch auf Fertigstellen klicken, um die Schaltfläche direkt anlegen zu lassen.

Der Assistent erstellt die Schaltfläche und Sie können sie gleich nach dem Wechsel in die Formularansicht testen. Probieren Sie ruhig einmal verschiedene Schaltflächen nacheinander aus. Sie werden sehen, dass Sie Ihre Formulare damit aufwerten können.

 
Access-Paradies ist eine Site von Microsys-Kramer. Ein Office-Forum mit derzeit über 4000 Beiträgen zu Access. 
Sie müssen lediglich folgende Regeln beachten:

Vermeiden Sie den Einsatz von Variablen des Typs Variant. Variant-Variablen belegen viel Speicherplatz (mindestens 16 Byte) und haben bei mathematischen Berechnungen einen deutlichen Geschwindigkeitsnachteil.

Vermeiden Sie bei zeitkritischen Prozeduren den Aufruf anderer Prozeduren. Durch den Aufruf und die eventuelle Übergabe von Parametern entsteht ein erheblicher Verwaltungsaufwand, der natürlich Zeit kostet.

Wenn Sie mehrfach auf Eigenschaften und Methoden von Objekten (z.B. Formulare oder Steuerelemente) zugreifen, sollten Sie das betreffende Objekt in einer Objektvariablen zwischenspeichern.

Beim Einsatz der IIF-Funktion (Immediate If, deutsch Wenn-Funktion) werden immer sowohl der zweite als auch der dritte Ausdruck ausgewertet, obwohl dies nur bei einem der beiden Ausdrücke notwendig wäre. Besonders negativ wirkt sich dies aus, wenn in beiden Ausdrücken zeitaufwendige Funktionen ausgeführt werden. In diesem Fall sollten Sie lieber das normale If...Then...Else-Kontrukt einsetzen, bei dem in Abhängigkeit von der If-Bedingung immer nur ein einzelner Anweisungsblock ausgeführt wird.

Verweisen Sie auf Objekte, die von OLE-Servern stammen, stets zusammen mit dem Namen des Objektservers.

Access braucht so nicht alle Objektbibliotheken nach dem Bezeichner Database zu durchsuchen, sondern kann direkt auf den richtigen Objektdatentyp zugreifen.

 

In der Spalte Bedingung, die Sie jedem Makro über den Menüpunkt Ansicht/Bedingungen hinzufügen können, lässt sich die Ausführung einer oder mehrerer Aktionen vom Ergebnis einer Bedingung abhängig machen.

Mit Hilfe der Aktion StopMakro lässt sich auch ein If-Then-Else-Konstrukt realisieren. Hierbei werden bestimmte Aktionen nur dann ausgeführt, wenn der in der Spalte Bedingung angegebene Ausdruck das Ergebnis Wahr hat. Andernfalls wird ein zweiter Aktionsblock ausgeführt. Ein entsprechendes Makro könnte folgenden Aufbau haben:

Bedingung

Aktion

Bedingung

Aktion 1

...

Aktion 2

...

StopMakro

 

Elde-Aktion 1

 

Else-Aktion 1

In diesem Beispiel werden die Aktionen 1 und 2 nur dann ausgeführt, wenn die Bedingung Wahr zum Ergebnis hat. Als letztes wird in diesem Fall die Aktion StopMakro ausgeführt, was zur Beendigung des kompletten Makros führt. Sollte die Bedingung dagegen Falsch zum Ergebnis haben, werden die Aktionen 1 und 2 inklusive der StopMako-Aktion übersprungen. Access führt ausschließlich die Else-Aktionen 1 und 2 aus. Siehe Abbildung 1.

Die drei Punkte vor der ersten ÖffnenBericht- und der StopMakro-Aktion bewirken, dass die Ausführung dieser Aktionen von der vorhergehenden Bedingung abhängig ist. In dem obigen Beispiel werden damit die ersten drei Aktionen zu einem Aktionsblock zusammengefasst, dessen komplette Ausführung von der Bedingung abhängt.

 

Wählen Sie den Menübefehl Format>Schriftart. Es öffnet sich der gleichnamige Dialog. Im Listenfeld Schriftart stehen Ihnen alle unter Windows installierten Schriftarten zur Auswahl. Außerdem können Sie den Schriftschnitt und die Schriftgröße festlegen. In der Sektion Darstellung läßt sich eine zum Layout passende Schriftfarbe festlegen. Wie gewohnt gibt es auch im Schriften-Dialog eine Vorschau.

Wenn Sie mit der neuen Schrift zufrieden sind, können Sie die Änderungen mit OK aktivieren. Die Veränderungen beziehen sich nur auf das aktuelle Datenblatt und werden mit ihm gespeichert.

Stellen Sie zu diesem Zweck in der Druckereinrichtung eine niedrigere Druckqualität ein. Nachdem Sie die Druckereinrichtung mit Datei>Drucken geöffnet haben, klicken Sie auf die Schaltfläche Eigenschaften. Hier werden für jeden Drucker individuelle Optionen angezeigt. Bei einigen Druckern zählt dazu auch die Druckqualität. Von Makros oder VBA aus kann die Druckqualität ebenfalls bestimmt werden:

  • In Makros: Die Aktion Drucken enthält das Argument Druckqualität, welches Sie auf Hoch, Mittel, Niedrig oder Entwurf einstellen können.
  • In VBA: Das vierte Argument des Befehls DoCmd.PrintOut bestimmt die Druckqualität, welche durch die Konstanten acHight (Hochqualität), acMedium (mittel), acLow (niedrig) und acDraft (Entwurfsqualität) vertreten wird.

Das folgende Beispiel druckt den momentan aktiven Bericht in Entwurfsqualität aus:

DoCmd.PrintOut , , , acDraft

Stört es Sie auch, wenn Sie eine Datenbank öffnen wollen, im Öffnen-Dialog aber nie Ihr persönlicher Datenbankordner, sondern der Ordner Eigene Dateien erscheint? Sie müssen also immer erst in Ihren Ordner wechseln.

Definieren Sie Ihr eigenes Verzeichnis als Standardverzeichnis für den Öffnen-Dialog.

Wählen Sie den Menüpunkt Extras / Optionen aus. Dazu muss allerdings eine Datenbank geöffnet sein. Wechseln Sie dann in das Register Allgemein. Im Eingabefeld Standarddatenbankverzeichnis können Sie jetzt den Pfad angeben, der im Öffnen-Dialog standardmäßig erscheint.

Damit diese Einstellung aktiv wird, müssen Sie Access verlassen. Beim nächsten Start erscheint dann im Öffnen-Dialog der eingestellte Ordner.

 

Wählen Sie den Menüpunkt Datensätze>Filter>Spezialfilter/Sortierung. Es öffnet sich dann ein dem Abfrageentwurf ähnliches Fenster. Definieren Sie alle Kriterien und klicken Sie auf das Symbol Filter Sortierung anwenden, um das Filterergebnis zu sehen.

Mit einem Spezialfilter können Sie generell die gleichen Operationen durchführen, wie mit einem formularbasierten Filter. Der einzige Unterschied besteht darin, dass Sie bei einem Spezialfilter zusätzlich Sortierreihenfolgen festlegen können.

Der Unterschied zu einer Abfrage ist, dass immer alle Felder im Datenblatt angezeigt werden, auch wenn Sie im Entwurfsraster des Filters nur ein Feld eingefügt haben.

 

Kombinationsfelder enthalten standardmäßig nur diejenigen Datensätze, die die zugrunde liegende Abfrage als Ergebnis zurückliefert. Die richtige Option verschafft Ihnen bei jeder Abfrage Einblick in alle Daten.

Das folgende Beispiel geht von einer Tabelle namens tblStädte aus, die die beiden Datenfelder StadtID und Stadt beinhaltet. Mit einer Union-Abfrage wird der Eintrag Städte hinzugefügt:

(SELECT 0 AS StadtID, "" AS Stadt FROM tblStädte) UNION (SELECT StadtID, Stadt
FROM tblStädte) ORDER BY Stadt;

Der erste Teil dieser Abfrage ergibt die Werte 0 und "". Dazu wird der zweite Teil hinzugefügt, nämlich alle Stadtnummern  (StadtID) und -namen (Stadt). Die gesamte Abfrage liefert also folgendes Ergebnis zurück:

StadtID Stadt
0
1 Aachen
2 Bielefeld

Diese Abfrage wird dann mit einem beliebigen Listen- oder Kombinationsfeld verknüpft. Siehe Abb. 1 unten.

Wählt man im Kombinationsfeld den Eintrag aus, so hat das Feld den Wert 0. Andernfalls hat das Feld die entsprechende StadtID, wie in der folgenden AfterUpdate-Ereignisprozedur demonstriert:

Private Sub cmbStadtFilter_AfterUpdate()

    'Datensätze neu filtern 
    If Me!cmbStadtFilter = 0 Then 
        ' "Alle" wurde ausgewählt 
        Me.FilterOn = False Else 
        ' ID-Wert des Kombifeldes als Filter einsetzen 
        ' und Filter einschalten 
        Me.Filter = "StadtID=" & 
        Me!cmbStadtFilter 
        Me.FilterOn = True 
    End If

End Sub

 

 

Ich bin gerade dabei, ein kleines Fahrradverwaltungsprogramm zu erstellen. Zum einen habe ich die Tabelle "Daten Fahrräder", in der einem neuen Fahrrad eine fortlaufende Nummer zugeordnet wird.

Diese Tabelle enthält auch die dazugehörigen Daten zu einem Fahrrad. Nun will ich ein Fahrrad, wenn es verkauft ist, nicht einfach löschen, sondern diesen Datensatz in eine Tabelle gleicher Struktur namens "Verkaufte Fahrräder" verschieben (mit dem Verkaufsdatum).

Das heißt, per Knopfdruck und vorheriger Abfrage des Verkaufsdatums soll dieser Datensatz automatisch verschoben werden.

Anstatt einer zusätzlichen Tabelle der verkauften Fahrräder anzulegen, würden wir Ihnen empfehlen, ein zusätzliches Ja/Nein-Feld namens "Verkauft" sowie ein Datumsfeld namens "Verkaufsdatum" in der Haupt-Tabelle anzulegen. Wenn Sie nun auf die Schaltfläche "Fahhrad verkauft" klicken, können Sie folgende VBA-Prozedur ausführen:

Private Sub btnFahrrad_Click()

    Me!Verkauft = True
    Me!Verkaufsdatum = Now

End Sub

Der Vorteil dieser Methode ist, daß die Datensätze sehr übersichtlich sind. Sie können beispielsweise auf einem Blick sehen, welche Fahrräder schon verkauft worden sind.

Beim direkten Ausdruck eines Berichts auf einem Drucker kann es schon einmal ärgerlich sein, wenn aufgrund eines falschen Filterkriteriums keine Datensätze gedruckt werden. Der Ausdruck war damit umsonst.

Setzen Sie die Bei Ohne Daten-Eigenschaft ein, um die Ausgabe leerer Berichte zu verhindern.

Die folgende Beispielprozedur zeigt eine Meldung an, falls der Bericht keine Daten enthält. Der Ausdruck wird nach entsprechender Bestätigung vom Benutzer durch Setzen der Variablen Cancel auf den Wert True abgebrochen.

Private Sub Report_NoData(Cancel As Integer)

    If MsgBox("Dieser Bericht enthält keine Daten." & vbCrLf & "Möchten Sie den Vorgang abbrechen?", _
       vbYesNo Or vbExclamation) = vbYes Then
       Cancel = True
    End If

End Sub

 

Bei der Anlage neuer VBA-Ereignisprozeduren ist es für den eingefleischten VBA-Programmierer oft lästig, nach einem Klick auf die Editor-Schaltfläche der betreffenden Eigenschaft, das nachfolgende Dialogfenster stets noch mit der Option Code Editor bestätigen zu müssen.

Einfacher geht es, wenn Sie vorher doppelt auf den Namen der Ereigniseigenschaft klicken.

Access trägt hierdurch automatisch den Text [Ereignisprozedur] ein. Anschließend führt ein Klick auf die Editor-Schaltfläche sofort und ohne Umweg über das Dialogfenster zum Öffnen des betreffenden Moduls.

 
Codekabinett ist eine Site von Philipp Stiefel. 

Die Funktion GetFileExtension liefert nur das Datei-Suffix (im Beispiel exe) zurück. Dies ist zum Beispiel sinnvoll, wenn eine bestimmte Datei-Operation nur auf eine definierte Dateimenge anzuwenden ist, oder nur bestimmte Dateien in eine Datenbank eingetragen werden sollen.

Sie benötigen hierzu auch die Funktion ReverseInStr aus dem Tipp
Stringmanipulation - Parsen - Textmanipulation (Link siehe unten)

Public Function GetFileExtension(strPath As String) As String

Dim intPos As Integer

intPos = ReverseInStr(strPath, ".")
GetFileExtension = Right(strPath, Len(strPath) - intPos)

End Function

 

Leider steht bei Formularen keine solche Ereigniseigenschaft zur Verfügung, so das die beschrieben Formatierungen bei Endlosformularen nicht möglich sind. Auch der Versuch, die Hintergrundfarbe des Detailbereichs während der Laufzeit zu verändern, schlägt fehl. Die Änderung wirkt sich nämlich stets auf alle angezeigten Datensätze aus.

Um trotzdem einzelne Datensätze farbig hervorzuheben, verwenden Sie farbige OLE-Objekte, die relational mit einer Datentabelle verknüpft werden.
Die unten aufgeführte Abbildung zeigt, wie so etwas bei einer Rechnungsübersicht aussehen kann.

Voraussetzung für das Beispiel ist eine Tabelle mit dem Namen Status, in der die einzelnen OLE-Objekt zur Markierung der Datensätze angelegt werden. Die Tabelle enthält die beiden folgenden Datenfelder:

Datenfeld Felddatentyp
StatusNr Zahl
SatusGrafik OLE-Objekt

Das Feld StatusNr dient als Primärschlüssel der Tabelle.

In diesem Beispiel sollen die einzelnen Datensätze durch farbige Punkte markiert werden. Je nach Fälligkeit der Rechnung erscheint neben dem Datensatz ein grüner, gelber oder roter Punkt. Diese Punkte erstellen Sie am einfachsten mit Hilfe des Zeichenprogramms Paint, das zum Lieferumfang von Windows gehört. Das Einfügen der Objekt in das Feld StatusGrafik der Tabelle erledigen Sie über die Zwischenablage. Beachten Sie außerdem die folgende Zuordnung der Farbigkeit zu einer Statusnummer:

Statusnummer Farbe Bedeutung
1 Rot Zahlung ist überfällig
2 Geld Zahlung muss innerhalb der nächsten neun Tage erfolgen
3 Grün Zahlung erst in mehr als neun Tagen

Die zweite für das Beispiel erforderliche Tabelle heißt Rechnungen. Sie speichert einige für die zu bezahlenden Rechnungen interessante Daten. Für das Beispiel kommt es nur auf das Feld Zahlungsdatum an, da die Dringlichkeit einer Zahlung durch das Verhältnis vom Tages- zum Zahlungsdatum ermittelt wird.

Die Bewertung der Zahlungsdringlichkeit übernimmt eine VBA-Funktion namens StatusBestimmen. Die Prozedur erwartet das Zahlungsdatum als Parameter und gibt einen der Stati 1 bis 3 nach obiger Tabelle zurück. Geben Sie die VBA-Funktion in ein beliebiges Standardmodul ein:

Public Function StatusBestimmen(Zahlungsdatum As Variant) As Integer

Dim DifferenzInTagen As Integer

    If IsNull(Zahlungsdatum) Then Exit Function

    DifferenzInTagen = DateDiff("d", Date, Zahlungsdatum)

    If DifferenzInTagen < 0 Then StatusBestimmen = 1 'Rot
    If DifferenzInTagen >= 0 And DifferenzInTagen < 10 _ 
       
        Then StatusBestimmen = 2 'Gelb
    If DifferenzInTagen >= 10 Then StatusBestimmen = 3 'Grün

End Function

Bevor Sie die Tabellen Rechnungen und Status in einer Abfrage miteinander verknüpfen können, benötigen Sie in der Tabelle Rechnungen ein entsprechendes Datenfeld, dessen Werte mit der Statusnummer aus der Tabelle Status übereinstimmen. Der Entwurf eines solchen Datenfeldes erfolgt am einfachsten in einer Abfrage. Fügen Sie einer neuen Abfrage die Tabelle Rechnungen hinzu, und ziehen Sie das Sternchen aus der Feldliste in den Entwurfsbereich. Fügen Sie dann die folgende Spalte hinzu:

Status: StatusBestimmen([Zahlungsdatum])

Dieser Ausdruck definiert das neue Feld Status, dessen Wert sich aus der Berechnung der VBA-Funktion StatusBestimmen und dem aktuellen Zahlungsdatum ergibt. Speichern Sie die Abfrage unter dem Namen Rechnungen mit Status.

In einer zweiten Abfrage führen Sie die Tabellen Rechnungen und Status nun zusammen. Entwerfen Sie eine Abfrage und fügen Sie die Tabelle Status und die Abfrage Rechnungen mit Status hinzu. Die Verknüpfung der beiden Feldlisten erfolgt über eine Linie, die Sie vom Feld StatusNr der Tabelle Status auf das Feld Status der Abfrage Rechnungen mit Status ziehen. Um die Abfrage zu vervollständigen, ziehen Sie das Sternchen aus der Abfrage Rechnungen mit Status und das Feld StatusGrafik aus der Tabelle Status in den Entwurfsbereich.

Nachdem Sie die Abfrage unter dem Namen Formular Rechnungsübersicht gespeichert haben, können Sie sie als Datenherkunft für ein neues Endlosformular verwenden. Der Entwurf des Formulars erfolgt am einfachsten mit einem der Formularassistenten von Access. Als Ergebnis erhalten Sie eine Ansicht von mehreren Datensätzen, die jeweils gemäß der Dringlichkeit der Zahlung farbig markiert sind.

Aufgrund der Konzeption als relationale Verknüpfung von Tabellen, läßt sich dieses Beispiel problemlos erweitern. Sie müssen lediglich weitere farbige Objekte in der Tabelle Status speichern und die VBA-Funktion StatusBestimmen entsprechend erweitern.

 

Die Datenbank - Sprachversion Deutsch
Microsoft; Euro 429,00

 

Auf dieser Site präsentiert Ihnen Reinhard Kraasch unter der Rubrik Downloads eine Vielzahl von Beispieldatenbanken, die in Access 97 erstellt wurden.

Unter "Links" finden Sie eine Auflistung von Deutsch- und Englischsprachigen Access Websites. Auch die Access-Forum-Bereiche sind sehr Interessant. Hier können Sie sich mit anderen Access-Programmierern austauchen und so direkt von den Erfahrungen anderer profitieren.

Zu den folgenden Themenbereichen finden Sie Tipps & Tricks sowie Praxisbeispiele:

  • Allgemeine und Konversionsfunktionen
  • Datumsfunktionen
  • Numerische Operationen
  • Windows: Fenster, GDI (API-Funktionen)
  • Windows: Prozesssteuerung
  • Formulare, Berichte
  • Datenmodell, Tabellen
  • Module, Utilities zur Code-Verwaltung
  • Anwendungsbeispiele
  • Dateien, Verzeichnisse
  • Netzwerkfunktionen
  • Sonstige Algorithmen
 

In diesem Buch werden Ihnen anhand anschaulicher Beispiele praxisnahe Lösungsschritte vermittelt.

Von Benno Brudermanns; Rowohlt (1997); Euro 11,50; ISBN: 3499198703

 

Um das Schließen solcher Formulare durch den Benutzer zu verhindern, brechen Sie einfach das Entladen-Ereignis ab.

Alles was Sie benötigen, ist folgende Ereignisprozedur, die Sie mit der BeimEntladen-Ereigniseigenschaft des betreffenden Formulars verknüpfen:

Private Sub Form_Unload(Cancel As Integer)

  Cancel=True

End Sub

Beim Beenden der Datenbank tritt allerdings ein Problem auf: Access muß das Formular auch beim Beenden der Datenbank schließen. Da dies nicht funktioniert, kann die Datenbank nicht geschlossen werden. Zur Lösung dieses Problems legen Sie in einem Standardmodul einfach eine globale Boolean-Variable mit dem Namen SchließenErlaubt an. Vor dem Beenden der Datenbank setzen Sie diese einfach auf den Wert True damit die Datenbank ordnungsgemäß geschlossen werden kann.

Die Ereignisprozedur muß lediglich folgendermaßen ergänzt werden:

Private Sub Form_Unload(Cancel As Integer)

  If SchließenErlaubt = False Then

    Cancel = True

  End If

End Sub

 

Zu den folgenden Themenbereichen finden Sie Praxisbeispiele:

  • Erstellen einer Datenbank
  • Erstellen der Tabellen und Felder
  • Festlegen der Beziehungen
  • Abfragen
  • Formulare
  • Eigenschaften der Objekte
  • Programmierung eines Makros
  • Formular im Formular
  • Filter
  • Umschalten zwischen Formularen
  • Das Ausdrucken von Daten-Berichte
  • Ein Formular als Startbildschirm
  • Abfragearten
  • Ex- und Import von Daten

Diese Beispiele dienen Ihnen als Hilfestellung, um Fehler bei der Access-Programmierung zu vermeiden.

 

Der Ausdruck Screen.ActiveForm.hwnd stellt beispielsweise das Handle des aktiven Fensters dar. Das folgende Beispiel übergibt der Funktion GetWindowText das Handle des aktuellen Fensters, um den Fenstertitel zu ermitteln:

Declare Function GetWindowText Lib "user32" Alias _
        "GetWindowTextA" (ByVal hwnd As Long, _
        ByVal lpString As String, ByVal cch As Long) As Long

Dim ret As Long
Dim strFensterText As String, length As Long

strFensterText = String$(50, 0)
length = Len(strFensterText)

ret = GetWindowText(Screen.ActiveForm.hwnd, strFensterText, length)

Um das Handle des Hauptfensters von Access zu übergeben, verwenden Sie die Eigenschaft hWndAccessApp des Objekts Application:

ret = GetWindowText(Application.hWndAccessApp, _
                                    strFensterText, length)

Vielen Grafik-Funktionen müssen beispielsweise die Koordinaten eines Rechtecks übergeben werden. Diesen Datentyp können Sie in einem Access-Modul wie folgt deklarieren:

Type RECT

Left As Long
Top As Long
Right As Long
Bottom As Long

End Type

Einen Parameter dieses Typs können Sie beispielsweise der API-Funktion GetWindowRect als Referenz (ByRef) übergeben, die die Koordinaten des angegebenen Fensters ermittelt und im RECT-Parameter zurückgibt:

Declare Function GetWindowRect Lib "user32" _
(ByVal hwnd As Long, ByRef lpRect As RECT) As Long

Das Schlüsselwort ByRef können Sie übrigens auch weglassen, denn ByRef ist der Standardwert für alle Parameter.

Benutzerdefinierte Datentypen an API-Funktionen übergeben

Es verwendet wieder die Beispiel-Datenbank Nordwind.

Ziehen Sie die Tabellen Kunden, Bestellungen und Bestelldetails in den Abfrageentwurf.

Wählen Sie für das Feld Firma der Tabelle Kunden folgende Einstellungen aus:

Funktion: Gruppierung
Kreuztabelle: Zeilenüberschrift

Geben Sie in das nächste Feld folgenden Ausdruck ein:

Expr1: Jahr([Bestelldatum]) & " " & " Bestellsumme pro Jahr"

Wählen Sie für dieses Feld folgende Einstellungen aus:

Funktion: Gruppierung
Kreuztabelle: Spaltenüberschrift Geben

Sie in das letzte Feld folgenden Ausdruck ein:

Expr2: Summe(ZCurrency([Einzelpreis]*[Anzahl]*(1-[Rabatt])))

Wählen Sie für dieses Feld folgende Einstellungen aus:

Funktion: Ausdruck
Kreuztabelle: Wert

 

Genauso, wie Sie Daten anderer Anwendungen aus der Registratur einlesen und wieder speichern können, so können Sie auch eigene Daten in der Registratur speichern.

Benötigt werden hierzu die beiden API-Funktionen RegCreateKey und RegSetValue.

Die Funktionen werden folgendermaßen deklariert werden:

Declare Function RegCreateKey Lib "advapi32.dll" Alias _
"RegCreateKeyA" (ByVal hKey As Long, _
ByVal lpSubKey As String, phkResult As Long) As Long

Declare Function RegSetValue Lib "advapi32.dll" Alias _
"RegSetValueExA" (ByVal hKey As Long, _
ByVal lpValueName As String, ByVal Reserved As Long, _
ByVal dwType As Long, lpData As Any, _
ByVal cbData As Long) As Long

Der Funktion RegCreateKey übergeben Sie als Parameter einen neuen Schlüssel der Form

HKEY_CURRENT_USER\Software\[Hersteller]\[Produkt]\[Version]

Anschließend legen Sie diesem Schlüssel mit der Funktion RegSetValue einen Eintragnamen sowie dessen Wert an. Die neuen Daten geben Sie der Registratur frei, indem Sie die Funktion RegCloseKey aufrufen.

Folgendes Beispiel erzeugt einen neuen Schlüssel namens Software\MeineFirma\MeinProgramm\DieVersion, den Eintrag DatenEintrag und einen EintragWert:

Public Function DatenSpeichern()

Dim NeuerSchlüssel As Long

If RegCreateKey(HKEY_CURRENT_USER, _
"Software\MeineFirma\MeinProgramm\DieVersion", _
NeuerSchlüssel) = ERROR_SUCCESS Then

If RegSetValue(NeuerSchlüssel, "DatenEintrag", _
REG_SZ, ByVal "EintragWert", 15) _
= ERROR_SUCCESS Then

Debug.Print "Daten erfolgreich angelegt."
Else
Debug.Print "Vorgang mißlungen"

End If
RegCloseKey NeuerSchlüssel
End If
End Function

 
Eine ausführliche FAQ-Datei mit Hinweisen zu weiterführender Literatur, Links, konkreten Problemlösungen und Downloads ab Access 2.0. Außerdem bietet die Firma Beratung zu Auswahl und Einsatz verschiedener Software bis hin zur individuellen Anwendungsentwicklung.  
Die deutsche Benutzeroberfläche für die Access 2003 Developer Extensions bietet die Tools und Ressourcen, die Entwickler zum schnellen und problemlosen Erstellen, Testen und Bereitstellen von anspruchsvollen Access-Lösungen benötigen. Die Developer Extensions enthalten ein lizenzfreies Paket mit Access-Lösungen, mit dem die Access-Laufzeit aktiviert wird. Die Developer Extensions enthalten außerdem Tools mit Quellcode zum Erstellen professioneller Setup-Routinen, Lösungen für eine globale Suche nach benutzerdefinierten Zeichenfolgen sowie Lösungen zum Erstellen von Lösungen, aus denen der gesamte Quellcode entfernt wurde.  

Öffnen Sie zusätzlich zur aktuellen Datenbank die Datenbank, in die Sie ein Objekt kopieren möchten. Platzieren Sie die beiden Accessfenster so, dass beide Datenbankfenster sichtbar sind. Jetzt können Sie beliebig Objekte zwischen den Datenbanken austauschen, indem Sie ein Objekt aus dem einen Datenbankfenster in das andere Datenbankfenster ziehen. Der Kopiervorgang ist in beide Richtungen möglich.

Sie können Objekte auch verschieben. Betätigen Sie dazu beim Ablegen eines Objekts gleichzeitig die SCHIFT-Taste. Aus Sicherheitsgründen wird in der Ursprungsdatenbank vor dem Löschen der Tabelle nachgefragt, ob diese wirklich entfernt werden soll.

 
Mit dieser kleinen Access 2002/XP-Datenbank ist es möglich Überweisungsvorlagen (DIN-A-4) wie man sie im Schreibwarenladen erhält zu bedrucken. Einfach Auftraggeber- und Empfängerdaten eingeben, Betrag und Verwendungszweck dazu und drucken. WICHTIG: Diese Version bedruckt Vorlagen mit dem DM/Euro-Feld!! ("EUR"-Ausgabe) -> siehe hier Auftraggeber- und Empfängerdaten werden in der Datenbank gespeichert, so dass man wiederkehrende Daten einfach direkt auswählen kann. Durch das Speichern dieser Daten kann man diese Datenbank auch zum Speichern und - wenn notwendig - zum Drucken der Bankverbindungen nutzen. Auch die Überweisungsliste kann gedruckt werden. 

Der Dateiname und des Verzeichnis, in dem sich die aktuelle Datenbank befindet, sind häufig benötigte Informationen.

Verwenden Sie die Prozedur DateinameZerlegen aus dem vorherigen Tipp, um beide Informationen zu ermitteln.

Den kompletten Dateinamen der Datenbank erhalten Sie über die Name-Eigenschaft der aktuellen Datenbank, wie das folgende Beispiel demonstriert:

Sub Dateiinfo()

    Dim Name As String
    Dim Pfad As String
    Dim DB As Database
    Set DB = CurrentDb()

    DateinameZerlegen DB.Name, Pfad, Name
    'Ergebnis im Testfenster ausgeben
    Debug.Print Pfad
    Debug.Print Name

End Sub

Beim Start übergeben Sie der Prozedur den kompletten Namen der Datei inklusive dem Pfad. Außerdem übergeben Sie zwei leere Variablen, die anschließend das Ergebnis aufnehmen.
 
Der TriniDat Tab-Assistent ermöglicht Ihnen die Einstellung der Tab- bzw. Aktivierungsreihenfolge der Steuerelemente Ihres Formulars. Er erzeugt zu diesem Zweck eine identische Kopie des Formulars, in der alle Steuerelemente durch Schaltfläche ersetzt sind. Durch Anklicken dieser Schaltflächen in der richtigen Reihenfolge ändern Sie die Tab-Reihenfolge nach Ihrem Wunsch. Besonders effektiv ist der Assistent, wenn Sie die Tab-Reihenfolge eines Formulars Spaltenweise setzen möchten. Vollversion 
Wir beraten Sie kompetent in allen Fragen der Konzeption, Entwicklung und Einführung individueller Software zum günstigen Festpreis. Falls Sie einen Kontakt wünschen, klicken Sie Bitte links oben auf Impressum. 

Berichte in der Seitenansicht lassen sich auf den Bildschirm nur schwer entziffern. Hier kommt es auf den richtigen Einsatz der Zoom-Funktion an.

Verwenden Sie den Menüpunkt Ansicht / Zoom, um eine individuelle Vergrößerung einzustellen.

Als Vergrößerungs- bzw. Verkleinerungsfaktoren stehen hierbei die Menüpunkte 200% bis 10% sowie An Fenster anpassen zur Verfügung.

 

In der Seitenansicht eines Berichts können Sie mit dem Menübefehl Ansicht / Seiten bestimmen, wieviele Seiten auf dem Bildschirm gleichzeitig angezeigt werden. Die Zuordnung und Reihenfolge der dargestellten Seiten übernimmt allerdings Access.

Wenn Sie hier etwas mehr Flexibilität wünschen, verwenden Sie einfach den Menüpunkt. Mehrere Seiten des Kontextmenüs.

Hier können Sie nämlich neben der Anzahl der darzustellenden Seiten auch die Anordnung festlegen.

Bei der Eingabe von Texten ist es in vielen Fällen erforderlich, die Anzahl der eingegebenen Buchstaben auf eine bestimmte Anzahl festzulegen.

Um die Textlänge zu prüfen, setzen Sie die Länge-Funktion innerhalb der Gültigkeitsregel-Eigenschaft ein.

Wenn Sie beispielsweise die Länge des Textfeldes Versandkürzel auf drei Zeichen festlegen wollen, geben Sie in die Gültigkeitsregel-Eigenschaft des Textfeldes den folgenden Ausdruck ein:

Genau die gleichen Schritte erledigt die folgende VBA-Prozedur:

Länge([Versandkürzel])=3

Unter Gültigkeitsmeldung geben Sie zusätzlich einen Text ein, der den Benutzer über eine ungültige Eingabe informiert:

Geben Sie bitte genau drei Zeichen ein!

Nach einer Eingabe wird die Gültigkeitsregel beim Verlassen des Textfeldes ausgewertet und ggf. die Fehlermeldung angezeigt.

 
Mit Access ab Version 95 können Sie synchronisierte Formulare mit dem in Access integrierten Formularassistenten erstellen. Das Geheimnis besteht darin, daß Sie auf der ersten Dialogseite des Assistenten Felder aus mehreren Tabellen oder Abfragen auswählen müssen. Nur dann haben Sie auf der zweiten Dialogseite die Möglichkeit, zwischen einer Kombination aus Haupt- und Unterformular oder zwei verknüpften Formularen zu wählen. 
In diesem Artikel wird beschrieben, wie Sie Common Dialog API in Microsoft Office Access 2003 und in Microsoft Office Access 2007 anstelle der Common Dialog Box-Funktionen verwenden, die nur in der Microsoft Office 2000 Developer Edition und in der Microsoft Office XP Developer Edition enthalten sind. 
Auf dieser Site gibt es News, Messageboard, Downloads, Mailing Listen, Links etc. 

Wenn Sie eine Tabelle, eine Abfrage oder ein Formular in der Datenblattansicht öffnen, haben Sie in allen Fällen die Möglichkeit, die Formatierung für jedes Objekt separat zu verändern und zu speichern. Rufen Sie den Menübefehl Format>Felder auf. Mittels des Dialogs Feldformatierungen können Sie für das aktuelle Datenblatt die Hintergrund- und Rasterlinienfarbe sowie einen von drei Spezialeffekten auswählen. Beim Spezialeffekt Flach können Sie zusätzlich entscheiden, ob die vertikalen oder horizontalen Rasterlinien angezeigt werden sollen.

In der Sektion Vorschau des Dialogs können Sie sich vorab ein Bild davon machen, wie das Datenblatt nach der Veränderung aussehen wird. Mit dem Speichern des Datenblattes wird auch die neue Formatierung gespeichert.

Jede Audio CD hat eine eindeutige Nummer, über die beispielsweise die CD in der CDDB-Datenbank (www.CDDB.com) registriert ist; Die meisten CD-Player (Software) benutzen diese Funktion, um dem Anwender möglichst bequem die Informationen wie CD-Titel, Interpret und Tracktitel zu liefern. Die Routine GetCDNumber liest diese Nummer aus und gibt sie als INTEGER - Wert zurück. Danach steht sie für eine weitere Bearbeitung (Abfrage an CDDB oder Integration in eine Datenbank) zur Verfügung.

Function GetCDNumber(Drive As String) As String

    On Error GoTo CDNum_Err

    Dim cdfile As String * 44 
    Dim i As Integer

    If Dir$(Drive & "\Track01.CDA") = "" Then 
        MsgBox "Keine Audio-CD!", 64 
        Exit Function 
    End If

    Open Drive & "\Track01.CDA" For Binary Shared As #1 
    Get 1, , cdfile 

    GetCDNumber = Format$(Asc(Mid$(cdfile, 25, 1)), "000") & Format$(Asc(Mid$(cdfile, 26, 1)), "000")  Format$(Asc (Mid$(cdfile, 27, 1)), "000") 

    Close 1

CDNum_Err: 
    If Err = 71 Then 
        If MsgBox("Bitte CD einlegen und Laufwerk schliessen.", 1 + 64) = 1 Then 
            Resume 
         Else 
            CDNum = "" 
            Exit Function 
        End If 
    Else 
        Exit Function 
    End If

End Function

 

Wenn eine Abfrage innerhalb von VBA als SQL-Text vorliegt, und diese mehrmals hintereinander aufgerufen wird, muss Access bei jedem Aufruf eine Übersetzung der SQL-Anweisungen vornehmen. Dies kostet natürlich Zeit.

Um eine temporäre Abfrage mit Hilfe der CreateQueryDef-Abfrage anzulegen, geben Sie einfach keinen Namen an. Die Abfrage wird dadurch nicht gespeichert, was die Performance weiter erhöht.

Der folgende Programmausschnitt legt eine solche temporäre Abfrage an:

Dim Abfrage As QueryDef
Dim DB As Database

    Set DB = CurrentDb
    Set Abfrage = DB.CreateQueryDef("", "DELETE * FROM Adressen")
   
    Abfrage.Execute

Wichtig: Wenn Sie diesen Tipp mit Access 2000 oder höher einsetzen möchten, müssen Sie vorher die "Microsoft DAO 3.x Object Library" einbinden. Öffnen Sie zu diesem Zweck ein beliebiges VBA-Modul und wählen Sie den Menüpunkt Extras/Verweise aus. Anschließend kreuzen Sie den Eintrag "Microsoft DAO 3.x Object Library" an, wobei das "x" für eine Versionsnummer zwischen 0 und 6 steht. 

 

Um diese Probleme zu verhindern ist es sehr wichtig, dass Sie den Standarddrucker aktivieren und den Bericht dann abspeichern. Diese Einstellung wird dann im Bericht mitgespeichert und beim Öffnen des Berichtesautomatisch aktiviert.

Um den Standarddrucker als Voreinstellung zu aktivieren, gehen sie wie folgt vor:

  1. Öffnen Sie den Bericht in der Entwurfsansicht 
  2. Wählen Sie den Menübefehl Datei>Seite einrichten aus 
  3. Klicken Sie die Registerkarte Seite an 
  4. Wählen Sie die Option Standarddrucker aus und klicken Sie auf OK 
  5. Speichern Sie den Bericht ab
 
Mit TriniDat Adressen 95 und TriniDat Adressen 97 verwalten Sie Firmen, Gruppen und Personen mit mehreren Anschriften und beliebig vielen Kommunikationsarten (Telefon, Telefax, e-Mail, usw.). Sie können die Beziehungen zwischen Firmen, Gruppen und Personen einfach und schnell in Ihrer Datenbank abbilden. Darüber hinaus verwaltet Adressen vergangenheits- und zukunftsbezogene Aktivitäten inkl. ToDo-Liste und Historie-Funktion. Ein besonderes Highlight sind die Funktionen zum Schreiben von Briefen. Damit erledigen Sie Ihre Korrespondenz im Handumdrehen. Natürlich ist auch eine Anbindung an Microsoft Word vorhanden.  

Im Tipp "Abfrage mit Forderungen" haben Sie eine Abfrage entwickelt, mit der Sie die Forderungen aus einer Rechnungstabelle ermitteln. Für die Finanzplanung sind aber nicht nur Forderungen, sondern zusätzlich auch geplante Zahlungseingänge interessant.

Es handelt sich hierbei um zu erwartende Zahlungseingänge, für die Sie noch keine Rechnung geschrieben haben. Da es sich hierbei nicht um Rechnungen im eigentlichen Sinne, sondern eher um Projekte handelt, basiert das folgende Beispiel auf einer Projekttabelle.

Um alle geplanten Zahlungseingänge abzufragen, erweitern Sie die Abfrage für Forderungen um eine zusätzliche Kriterien-Zeile.

Zu den geplanten Zahlungseingängen gehören zunächst einmal alle Forderungen. Es bietet sich daher an, die neue Abfrage auf der Abfrage für Forderungen basieren zu lassen. Öffnen Sie diese Abfrage, und wählen Sie den Befehl Datei>Speichern unter aus der Menüzeile. Geben Sie beispielsweise Geplante Zahlungseingänge als neuen Namen ein. Ersetzen Sie dann die Rechnungs- durch die Projekttabelle.

Neben den Forderungen muss die Abfrage zusätzlich solche Projekte berücksichtigen, die bereits abgegeben aber noch nicht berechnet wurden. Es handelt sich folglich um eine Oder-Verknüpfung von zwei Kriterien, denen für Forderungen und denen für nicht berechnete Projekte.

Um diesen Zusammenhang umzusetzen, klicken Sie in der Zeile oder des Abfrageentwurfs, und geben Sie folgende Kriterien ein:

Spalte Krtiterium
Abgabedatum Ist Nicht Null
Rechnungsdatum Ist Null

Wenn Sie die Abfrage nun ausführen, zeigt das Datenblatt sowohl Forderungen als auch abgegebene aber nicht berechnete Projekte an.

Für die Anzeige des Abfrageergebnisses ist ein tabellarisches Formular gut geeignet, das Sie per Assistent erstellen. Ordnen Sie im Formularfuß dieses Formulars ein ungebundenes Steuerelement mit dem Ausdruck

=Summe([Nettobetrag])

an, um Ihre geplanten Zahlungseingänge aufzusummieren.

SELECT RechnungsNr FROM tblRechnungen WHERE (Rechnungsdatum Is Not Null AND
Zahlungsdatum Is Null) OR (Abgabedatum Is Not Null AND Rechnungsdatum Is Null);

 

Wertelisten sind für feste Werte, die nur selten ergänzt oder geändert werden, vollkommen ausreichend. Ein Beispiel für eine Werteliste ist der Mehrwertsteuersatz. Sobald aber umfangreiche Listen im Kombinationsfeld zur Auswahl bereitgestellt werden sollen, die wohlmöglich noch nach Kriterien gefiltert und sortiert sein sollen, sind Wertelisten unbrauchbar.

Verwenden Sie eine Tabelle oder das Ergebnis einer Abfrage als Datensatzherkunft für ein Kombinationsfeld.

Wählen Sie als Herkunftstyp im Register "Nachschlagen" den Eintrag "Tabelle/ Abfrage" aus. Wenn Sie jetzt das Kombinationsfeld der Eigenschaft "Datensatzherkunft" aufklappen, werden dort alle in der Datenbank vorhandenen Tabellen und Abfragen aufgeführt, von denen Sie eine auswählen können. Sie können aber auch über die Assistentenschaltfläche den Abfrageentwurf starten und eine neu, genau auf das Problem abgestimmte Abfrage erzeugen. Wenn Sie diese Abfrage speichern, wird der Name der Abfrage in der Datensatzherkunft eingetragen.

Die übrigen Eigenschaften, wie "Spaltenanzahl", "Gebundene Spalten" usw. sind, wie im vorangegangenen Tipp (Mehrspaltige Wertelisten), bei einer Werteliste zu handhaben.

**********************************************************************************
Auch in diesem Fall können Sie wieder ein Listenfeld als Steuer-Element auswählen. Die Einschränkungen sind die gleichen, wie bei den Wertelisten.
**********************************************************************************

 

Beim relationen Datenbankentwurf sollten alle Informationen so weit wie möglich aufgeteilt werden, damit jedes Feld nur Informationen zu einem einzigen Gegenstand enthält. Ein typischer Verstoß gegen diese Regel ist die Erfassung von Postleitzahl und Ort in einem einzigen Feld. Nach einem umfangreichen Datenimport können Sie also mit einem solchen Problem gegenüberstehen.

Trennen Sie nicht zusammengehörende Feldinhalte mit Hilfe einer Aktualisierungsabfrage auf.

Abbildung 1 unten zeigt solch ein Beispiel.

Dieses Beispiel ist noch relativ einfach zu lösen, weil Sie es hier mit einer festen Anzahl von Zeichen zu tun haben: fünf Zeichen für eine deutsche Postleitzahl. Gehen Sie wie folgt vor.

Legen Sie in der Tabelle die beiden Felder Plz und Ort zur Speicherung der getrennten Feldinhalte an.

Erstellen Sie eine Aktualisierungsabfrage und stellen Sie für die Felder Plz und Ort im Feld Aktualisieren folgende Eigenschaften ein:

Links([PlzUndOrt];5)
Teil([PlzUndOrt];7)

Die Funktion Links bzw. Left gibt die ersten fünf und die Funktion Teil bzw. Mid gibt alle Zeichen ab dem siebten Zeichen zurück.

Führen Sie die Abfrage aus. Überprüfen Sie das Ergebnis und löschen Sie anschließend das nun nicht mehr benötigte Feld PlzUndOrt.

 

Bei der Fehlersuche in Programmen ist es oftmals wichtig zu wissen, von welcher Prozedur aus die aktuelle Prozedur (die eventuelle einen Laufzeitfehler ausgelöst hat) aufgerufen wurde.

Die Informationen zu den aktuellen Prozeduraufrufen entnehmen Sie dem Dialogfenster Extras / Aufrufe.

In diesem Dialogfenster werden alle Prozeduren aufgelistet, die letztendlich zum Start der Prozedur geführt haben. Beachten Sie, dass der Menüpunkt nur im Debug-Modus (also beispielsweise nach dem Auftreten eines Laufzeitfehlers) verfügbar ist.

 

Wir suchen nach der Eigenschaft, die Feldbeschreibungen (Deskription) von Access-Tabellenfeldern per Programm auslesen kann. Feldnamen, Typen oder Längen können problemlos ausgelesen werden.

TabName.Fields(i).Description

funktioniert nicht.

Die Description-Eigenschaft lässt sich nur über die Property-Auflistung eines Feldes ermitteln. Der folgende VBA-Code enthält ein einfaches Beispiel, das Sie aus dem Debug-Fenster von Access starten können:

Public Sub test1()

    Dim PropertyCounter As Integer
    Dim FieldCounter As Integer
    Dim tdf As DAO.TableDef
    Dim fld As DAO.Field
    Dim dbs As Database

    Set dbs = CurrentDb
    Set tdf = dbs.TableDefs("tblTabellenname")

    For FieldCounter = 0 To tdf.Fields.Count - 1
        Set fld = tdf.Fields(FieldCounter)
        For PropertyCounter = 0 To tdf.Fields(FieldCounter).Properties.Count - 1
            If tdf.Fields(FieldCounter).Properties(PropertyCounter).Name="Description" Then

                Debug.Print "Description: ", PropertyCounter, _
                    tdf.Fields(FieldCounter).Properties(PropertyCounter).Name, _
                    tdf.Fields(FieldCounter).Properties(PropertyCounter).Value

            End If

        Next PropertyCounter
   
Next FieldCounter

End Sub

Diese Site enthält Infos rund um das Thema Access mit einigen Links, Code Beispielen u.v.m.  

Berichte mit vielen Spalten bieten oftmals nicht genügend Platz für die einzelnen Spaltenüberschriften.

Abhilfe schaffen hier vertikale Spaltenüberschriften.

Zur Anzeige der vertikalen Texte eignet sich ein OLE-Objekt der Tabellenkalkulation Excel besonders gut, da Excel die Ausgabe vertikaler Texte generell unterstützt.

Nach dem Start von Excel schreibe Sie die einzelnen Spaltenüberschriften nebeneinander in die erste Zeile des Arbeistblattes und markieren diese. Im Register "Ausrichtung" des Dialogfensters "Format" > "Zellen" können Sie nun insgesamt zwischen drei vertikalen Textausrichtungen wählen. Am besten geeignet ist die mittlere Option. Nach dem Sie Ihre Auswahl mit "ok" bestätigt haben, wird der vertikale Text im Arbeitsblatt angezeigt.

Nun passen Sie die Spaltenbreite optimal an Ihre Überschriften an. Anschliessend markieren Sie diese und kopieren sie in die Zwischenablage. Aus der Zwischenablage können Sie die Spaltenüberschriften nun in einen beliebigen Bericht (oder auch in ein Formular) einfügen.

 

Ich möchte an eine vorhandene Tabelle leere Datensätze anfügen.

Ein Beispiel: Der letzte Datensatz hat die ID 1202 daran sollen 800 Datensätze angehängt werden. Der letzte Datensatz sollte also die ID 2002 haben und die andern Felder, wie z.B "Name" sollen leer bleiben. 

Wie lässt sich dieses Problem mit einer Schleifenfunktion in VB realisieren? 

Sie können eine Anfügeabfrage 800 mal ausführen:

For I = 1 TO 800

    CurrentDB.Execute("INSERT ...")

Next I

Eine Site mit vielen Tipps, News, Downloads und einem Forum u.a. zu VB. Der Gratis-Newsletter kommt 2mal im Monat heraus, mit News, Buchvorstellungen und Schnäppchen, inkl. einem extra VB-Tipp. Ältere Ausgaben lagern im Newsarchiv.  

Mit Firmenlogos und persönlichen Briefköpfen geben Sie Ihren Berichten den letzten Schliff. Wenn Sie nachträglich einmal eine Änderung vornehmen müssen, kann das Anpassen aller Berichte allerdings eine mühselige Aufgabe werden.

Verwenden Sie in diesem Fall einen Unterbericht, um ein Firmenlogo in mehrere Berichte einzufügen.

Platzieren Sie zu diesem Zweck alle Elemente des Firmenlogos wie beispielsweise Grafiken oder Texte im Detailbereich eines neuen Berichts. Die Fuß- und Kopfbereiche deaktivieren Sie.

Speichern Sie den Bericht unter dem Namen Logo und fügen Sie ihn als Unterbericht in die gewünschten Berichte ein. Anschließend ändern Sie noch die Rahmenart-Eigenschaft in Transparent ab, damit der Unterbericht nicht als solcher zu erkennen ist.

Bei Änderungen müssen Sie von nun an ausschließlich den Logo-Bericht anpassen.

 

In einigen Fällen macht sich beim Öffnen eines formularbasierten Filters eine deutliche Zeitverzögerung bemerkbar. Der Grund dafür ist, dass Access zu jedem Feld einer Liste mit allen verfügbaren Eingaben füllt.

Sollte die Performance eines formularbasierten Filters zu schlecht sein, schränken Sie das Füllen der Listen- und Kombinationsfelder ein.

Im Register Bearbeiten/Suchen des Dialogfenster Extras>Optionen können Sie zu diesem Zweck folgende globale Einstellungen vornehmen

  • Deaktivieren Sie das Kontrollkästchen Lokalen nicht-indizierten Feldern. Die betreffenden Listen werden dadurch nur dann gefüllt, wenn Sie an indizierte Datenfelder gebunden sind.
  • Reduzieren Sie den Wert im Feld Keine Liste anzeigen, wenn mehr als diese Anzahl Zeilen gelesen wird. Dadurch bricht Access das Füllen der Listen bei Erreichen der angegebenen Datensatzanzahl ab.

In der Entwurfsansicht von Formularen können Sie zusätzlich für jedes Feld individuelle Einstellungen treffen. Wenn Sie das Füllen der Liste für ein spezielles Feld verhindern möchten, stellen Sie einfach die Filter anwenden-Eigenschaft auf Nie ein.

 
Office 97 SR-2b ist ein kostenloses Update für Office 97, das eine Reihe aktueller Problembehebungen enthält. Damit soll Kunden die Bereitstellung von Office 97 weiter erleichtert werden. Service Release 2b mit umfangreichen Bugfix. 

Die relationale Datenbank Access bietet eine nahezu unüberschaubare Fülle an Möglichkeiten. Das Einsteigerseminar ermöglicht Ihnen einen Einblick in die Funktionsvielfalt dieses Datenbankprogramms.

Anhand zahlreicher Praxisbeispiele werden Sie Schritt für Schritt in die Arbeit mit der neuen Access-Version 2002 eingeführt. Sie erfahren alles Wissenswerte, um eigene Datenbanken zu erstellen und Daten in strukturierter Form zu verwalten, aufzubewahren und auszuwerten.
Darüber hinaus werden auch anspruchsvollere Themen wie die Erstellung von Makros und der Datenaustausch mit anderen Office-Programmen behandelt. Am Ende jedes Kapitels finden Sie zudem eine kurze Zusammenfassung und Übungsaufgaben, mit denen Sie das Erlernte sofort überprüfen können.

Von Winfried Seimert;vmi-Buch, Berlin (Juni 2001); Euro 9,95; ISBN: 3826671554

 

In einer Abfrage sollen alle Datensätze zwischen zwei bestimmten Tagen angezeigt werden. Diese Abfrage funktioniert schon. Diese Abfrage soll in einer Kreuztabelle dargestellt werden. Beim Aufrufen der Kreuztabelle wird eine Meldung angezeigt, dass das "Microsoft Jet Modul" die "Datumsfelder" nicht als "gültigen Feldnamen oder -ausdruck" erkennt.

Woran kann das liegen und was kann ich dagegen machen?

Probieren Sie einmal, die Datumsangaben mit Hilfe der Format-Funktion in einen Text umzuwandeln. Danach sollte die Kreuztabelle funktionieren.
LiteRat ist eine kostenlose wissenschaftliche Literaturverwaltung, die für Studierende und Dozenten gleichermaßen geeignet ist. Zur Verfügung gestellt von der Philosophischen Fakultät der Universität Düsseldorf. 

Um dieses Problem zu beheben, müssen Sie entweder die fehlerhafte Zeile im Code-Fenster korrigieren und den Programmablauf fortsetzen, oder den Programmablauf beenden.

Letzteres erledigen Sie mit dem Menübefehl Ausführen>Beenden, oder mit dem entsprechenden Symbol auf der Symbolleiste. Das Formular sollte jetzt wieder aktiviert werden können.

 
Ich möchte z.B. für die Unterstützung eines sportlichen Wettkampfes Access nutzen. In allen Bereichen bis auf die Erstellung von Ranglisten ergeben sich keine Probleme, die nicht schon gelöst wären. Nehmen wir ein einfaches Beispiel, einen Hochsprung-Wettbewerb. Ich habe 5 Teilnehmer mit Namen, Startnummern und gesprungener Höhe in der Datenbank und will nun via Report eine Rangliste erstellen. Zwei Punkte werfen immer wieder Fragen auf: Automatische Generierung des Ranges, Behandlung zweier ranggleicher Teilnehmer (z.B. beide im 2. Rang, wobei der nächste nicht im 3. sondern im 4. Rang ist).

Die ZLong-Funktion (CLng in VBA) kann Null-Werte nicht konvertieren und löst stattdessen einen Fehler aus. Setzen Sie daher besser die Nz-Funktion ein, um gegen das Auftreten von Null-Werten Vorsorge zu treffen:

=(ZLong(Nz(([Menge]*[Preis]);0)*20)/20)

Das Ergebnis dieser Funktion ist 0, wenn entweder das Feld Menge oder das Feld Preis den Wert Null enthält.

Anhand zahlreicher Praxisbeispiele wird der Leser Schritt für Schritt in die Arbeit mit der neuen Access-Version 2003 eingeführt. Er erfährt alles Wissenswerte, um eigene Datenbanken zu erstellen und Daten in strukturierter Form zu verwalten, aufzubewahren und auszuwerten.

Darüber hinaus werden auch anspruchsvollere Themen wie die Erstellung von Makros und der Datenaustausch mit anderen Office-Programmen behandelt. Am Ende jedes Kapitels befinden sich zudem eine kurze Zusammenfassung und Übungsaufgaben, mit denen das Erlernte sofort überprüft werden kann.

Von Winfried Seimert; Vmi Buch (2004); Euro 9,95; ISBN: 3826672720

 

Einige API-Funktionen verlangen einen NULL-Zeiger als Parameter, den VBA allerdings nicht zur Verfügung stellt. Diese Art Parameter darf leider nicht durch einen einfachen leeren String ("") ersetzt werden, denn ein leerer String ist lediglich ein gültiger Wert vom Typ String.

Um einen NULL-Zeiger zu übergeben, deklarieren Sie zunächst die Funktion mit einem ByVal-Parameter vom Typ Long bzw. Any. Als Funktionargument geben Sie dann ByVal 0& bzw. die VBA-Konstante vbNullString an.

Der API-Funktion MessageBox übergeben Sie beispielsweise einen NULL-Wert als erstes Parameter, wenn das Meldungfenster keinem aktiven Fenster zugeordnet werden soll:

Declare Function MessageBox Lib "user32" _
Alias "MessageBoxA" (ByVal hwnd As Any, _
ByVal lpText As String, ByVal lpCaption As String, _
ByVal wType As Long) As Long

Dim ret As Long
ret = MessageBox(vbNullString, "Guten Morgen!", "Testmeldung!", 0)

 

 

Ich bin Vogelzüchter und möchte mir gern ein Auswertungsprogramm erstellen.

Bin auch schon sehr weit, aber jetzt hänge ich fest. Es gibt bei einer Ausstellung viele Züchter:

Diese Züchter können viele Vögel Bewerten lasse. Jeder Vogel bekommt eine Punktzahl. Ich brauche aber nur die besten vier Vögel eines Züchters. Ich habe schon Sortiert nach Punktzahl und Gruppen, kann aber weder bei der Abfrage noch im Bericht nur die vier besten Datensätze eines Züchters anzeigen.

Wie kann ich dieses Problem beheben?

Zur Lösung Dieses Problems können Sie das TOP-Schlüsselwort der SELECT-Anweisung einsetzen.

Ein Beispiel:

SELECT TOP 4 * FROM tblVögel ORDER BY PunkteAnzahl DESC

Mit dieser Abfrage erhalten Sie die Vögel mit den vier höchsten Punktezahlen. Wenn Sie kein DESC angeben, erhalten die die vier schlechtesten Vögel.

Sie aktivieren den Objektkatalog von jedem beliebigen Modulfenster aus über den Menüpunkt Ansicht / Objektkatalog (F2-Taste). Im oberen Kombinationsfeld wählen Sie anschließend den Eintrag Access aus. Sofort darauf werden in der rechten Liste alle Objekt aufgelistet, die Access zur Verfügung stellt.

Klicken Sie hier beispielsweise auf das DoCmd-Objekt, um die einzelnen Methoden in der rechten Liste zu begutachten. Hier können Sie nun eine beliebige Methode markieren, zu der Access im unteren Teil des Objektkatalogs die komplette Syntax inklusive den Argumentnamen anzeigt.

 

 

Abfragen können nicht nur zum Ausfindigmachen von Informationen genutzt werden, sondern auch dazu, um Lücken im Datenbestand zu ermitteln. In einer Adreßverwaltung haben Sie sicherlich nicht zu jeder Person das Geburtsdatum gespeichert? Sie würden aber gerne heraus bekommen, von wem Sie das Datum nicht wissen, ohne die ganze Tabelle durchzugehen. Erstellen Sie eine Abfrage, die nach leeren Datenfeldern sucht.

Genau für diesen Zweck gibt es den Ist Null-Ausdruck. Fügen Sie das Feld, das Sie überprüfen wollen im Entwurfsraster ein und geben Sie als KriteriumMit dem Zwischen-Operator können Sie einen Wertebereich festlegen.

Mit Hilfe der Vergleichsoperatoren wie größer, kleiner, gleich, ungleich usw. können Sie gezielt Wertebereiche einschränken, wenn Sie diese in Kriterien verwenden. Um einen Bereich mit einer oberen und einer unteren Grenze einzuschränken, wählen Sie normalerweise ein Größerzeichen und ein Kleinerzeichen, kombiniert mit einem Und. Verwenden Sie den Zwischen-Operator, um einen Wertebereich festzusetzen.

Anstelle der Zeile

>=#01.12.00# Und <=#01.03.01#

können Sie das folgende Kriterium verwenden:

Zwischen #01.12.00# Und #01.03.01#

Die Bedeutung der beiden Zeilen ist die gleiche. Die Verwendung des Zwischen-Operators entspricht allerdings dem normalen Sprachgebrauch und lässt sich deshalb besser anwenden und verstehen.

 

Das Access Konverter Add-in ist speziell für die Organisationen von Access Anwendungen entworfen wurden und ist Ihnen beim konvertieren von Access nach Java behilflich, wobei Berichte in Crystal Reports umgesetzt werden.

Informationen zu Access 2003

Access 2003 ist die neueste Version des relationalen Datenbankmanagementprogramms zur Speicherung und Abfrage umfangreicher Datenmengen. Mit Access 2003 können Sie u. a. Daten auch mit Microsoft Windows® SharePoint™ Services bearbeiten, die Vorteile der erweiterten XML-Unterstützung nutzen und Smarttags zu Formularen und Berichten hinzufügen.

Erfahren Sie, wie leicht das Update auszuführen ist, und lesen Sie Informationen zu neuen Sicherheitsfeatures.

 

Grundsätzlich gilt für Abfragen:

Bei der Erstellung werden die Einstellungen der zugrunde liegenden Tabellen übernommen.

Es ist allerdings möglich, diese Einstellungen im Abfrageentwurf zu verändern, in dem im Dialogfenster Eigenschaften der betreffenden Spalte ein anderes Format für das Ausgabefeld ausgewählt wird.

Es bleibt Ihnen also nichts anderes übrig, als Ihre Abfragen auf solche Felder hin zu überprüfen und eventuell anzupassen.

 

 

Manchmal ist es von Interesse die Feldnamen einer Tabelle auszulesen. Mit nachfolgender Funktion ist dies möglich; sie gibt als Ergebnis die Stelle des Feldes sowie den Feldnamen zurück.

Public Function OPTabFeldnamen(ByVal OPTable) As String

    Dim x
    Dim meldung As String

    For x = 0 To CurrentDb.TableDefs(OPTable).Fields.Count - 1

        MsgBox CurrentDb.TableDefs(OPTable).Fields(x).Name

        meldung = meldung & "Field Number: " & x & " Name: " & _
          CurrentDb.TableDefs(OPTable).Fields(x).Name & Chr(10) & Chr(13)

    Next

    MsgBox meldung

End Function

SYNTAX: OPTabFeldnamen("Tabellenname")

 

Access stellt zwar eine Möglichkeit zur Verfügung, eine Formular auf den Drucker auszugeben; wenn das Aussehen aber nicht 100%ig dem gewünschten Ausdruck entspricht, ist trotzdem ein Bericht erforderlich.

Speichern Sie das Formular in diesem Fall einfach als Bericht.

Markieren Sie zu diesem Zweck das gewünschte Formular im Datenbankfenster und wählen Sie aus dem Kontextmenü den Befehl. Als Bericht speichern aus (Access 97). Unter Access 2000 bzw. XP wählen Sie aus dem Kontextmenü den Befehl Speichern unter und im nachfolgenden Dialogfenster als Bericht aus.

Nach der Eingabe des Berichtsnamens können Sie den neuen Bericht nach Ihren Wünschen anpassen.

 

 

In einem Access-Bericht werden meine Feldinhalte in jeweils zwei Zeilen ausgegeben. In der zweiten Zeile steht nur ein Feld (OLE-Objekt), das aber bei manchen Datensätzen leer ist.

Wie kann ich die Ausgabe der leeren Objekte im Bericht verhindern, wobei die entsprechenden Datensätze dann nur eine Zeile benötigen sollen?

Die leeren OLE-Felder können Sie einfach aus Ihrem Abfrage-Resultat weglassen, indem Sie Kriterien auf das Feld setzen.

In der Abfrage-Definition setzen Sie die Kriterien auf Ist Nicht Null im OLE-Feld.

Die Access 2003 Developer Extensions bietet die Tools und Ressourcen, die Entwickler zum schnellen und problemlosen Erstellen, Testen und Bereitstellen von anspruchsvollen Access-Lösungen benötigen. Die Developer Extensions enthalten ein lizenzfreies Paket mit Access-Lösungen, mit dem die Access-Laufzeit aktiviert wird. Die Developer Extensions enthalten außerdem Tools mit Quellcode zum Erstellen professioneller Setup-Routinen, Lösungen für eine globale Suche nach benutzerdefinierten Zeichenfolgen sowie Lösungen zum Erstellen von Lösungen, aus denen der gesamte Quellcode entfernt wurde.

 

Drei Bücher im Paket:

1) Das Nachschlagewerk
2) Das Programmierbuch
3) Referenz für Anwender und Programmierer.

Für Datenbank-Entwickler und solche die es werden wollen. Auf der beigefügten CD finden Sie alle Beispiele und wertvolle Tools.

Von Manfred Hoffbauer und Christoph Spielmann; Sybex (1999); Euro 65,95; ISBN: 3815502918

 

Wichtige Daten verdienen natürlich besondere Aufmerksamkeit.

Um bestimmte Daten hervorzuheben, invertieren Sie einfach die Vorder- und Hintergrundfarbe des Feldes.

Ein Textfeld mit schwarzer Schrift auf weißem Hintergrund würde nach der Invertierung also mit weißer Schrift auf schwarzem Hintergrund erscheinen.

Die folgende Beim Formatieren-Ereignisprozedur des Detailbereichs eines Berichts wertet das Feld Anzahl aus und invertiert es, wenn der Wert 0 oder negativ ist:

Const vbSchwarz = 0
Const vbWeiss = 16777215

Private Sub Detailbereich_Format(Cancel As Integer, FormatCount As Integer)

    ' Wenn weniger als 1 Artikel bestellt wurde,
    ' dann die Anzahl mit weiß auf schwarz drucken
    If Me!Anzahl <= 0 Then
        Me!Anzahl.BackColor = vbSchwarz
        Me!Anzahl.ForeColor = vbWeiss
    Else
        Me!Anzahl.BackColor = vbWeiss
        Me!Anzahl.ForeColor = vbSchwarz
    End If

End Sub

Damit die Hintergrundfarbe sichtbar wird, stellen Sie sicher, dass die Eigenschaft Hintergrundart des Textfeldes auf Normal gesetzt ist.

Steht Ihnen ein Farbdrucker zur Verfügung, können Sie anstelle des schwarzen Hintergrunds natürlich auch jede andere Farbe einsetzen (z.B. rot). Achten Sie nur darauf, dass Sie für positive Werte die üblichen Farbwerte wiederherstellen, damit Access nicht alle restlichen Datensätze ebenfalls hervorgehoben darstellt.

 

 

Ich möchte ein OLE-Feld in einem Formular so gestalten, dass niemand den sensiblen Inhalt in die Zwischenablage kopieren kann.

Geht das irgendwie?

Um das Kopieren des OLE-Feldes zu verhindern, setzen Sie folgende Eigenschaften des Steuerelements:

Aktiviert: Nein
Gesperrt: Ja

Diese Eigenschaften sperren das OLE-Feld, so dass auf den Inhalt nicht zugegriffen werden kann.

Tabellenfelder sind normalerweise Eingabefelder, in die Sie Werte eingeben müssen. Wenn diese Werte aber aus einer Werteliste stammen, ist die Eingabe über ein Kombinationsfeld, in dem die möglichen Werte vorgegeben und nur noch ausgewählt werden müssen, wesentlich einfacher. Solche Kombinationsfelder werden üblicherweise in Formularen erstellt, deren Inhalt dann in einem Datenfeld der Tabelle gespeichert wird. Wenn Sie aber das Datenblatt der Tabelle öffnen, haben Sie das Kombinationsfeld nicht zur Verfügung. Dem kann Abhilfe geschaffen werden.

Definieren Sie für ein Datenfeld beim Tabellenentwurf eine Werteliste. Auf diese Weise können Sie auch im Datenblatt die Tabelle der Werte komfortabel auswählen.

Ein weiterer Pluspunkt für eine solche Definition ist, dass Sie in Formularen kein zusätzliches Kombinationsfeld erzeugen müssen. Wenn Sie das Datenfeld einem Formular hinzufügen, wird automatisch ein Kombinationsfeld angezeigt.

Um eine Werteliste für ein Datenfeld anzulegen, markieren Sie das Datenfeld und klicken auf das Register "Nachschlagen". Bei der Eigenschaft "Steuerelement Anzeigen" wählen Sie den Eintrag "Kombinationsfeld" aus, im darunter liegenden Feld "Herkunftstyp" den Eintrag "Werteliste".

Sie können jetzt die Werte, die im Kombinationsfeld zur Auswahl stehen sollen, eingeben. Die Werte müssen durch Semikolon getrennt werden. Die Werteliste hat also die Form

Wert1; Wert2; Wert3;...; Wert n

In den Feldern "Spaltenbreite" und "Listenbreite" können Sie die für Ihre Werte passenden Zahlen angeben. Die Maßeinheit ist in diesem Fall "cm".

 

Wenn Sie schon einmal eine Adresse in die Zwischenablage befördert und von hier aus in ein Textdokument eingefügt haben, dürften Sie sich wahrscheinlich auch schon einmal über die schlechte Funktionalität des Menüpunkts Bearbeiten/Kopieren geärgert haben. Es ist nämlich nur möglich, entweder einen einzelnen Feldinhalt oder gleich einen kompletten Datensatz (mit allen für die Adresse überflüssigen Feldern) in die Zwischenablage zu kopieren.

Für den Assistenten benötigen Sie zunächst einmal ein neues leeres Formular mit dem Namen Zwischenablage-Assistent. Platzieren Sie auf der linken Seite ein Listenfeld namens lstFeldliste und rechts daneben ein etwa gleich großes Textfeld mit dem Namen txtText. Unterhalb beider Steuerelemente ordnen Sie dann noch zwei Schaltflächen mit den Namen btnOK und btnAbbrechen an. 

Um dem Formular ein für Dialogfenster typisches Aussehen zu verleihen, stellen Sie folgende Formulareigenschaften entsprechend ein:

Eigenschaft Einstellungen
Standard-Ansicht Einzelnes Formular
Bildlaufleisten Nein
Datensatzmarkierer Nein
Navigationsschaltflächen Nein
Rahmenart Dialog
Beschriftung Zwischenablage-Assistent

Die linke Liste des Formulars soll die Namen aller Felder eines bestimmten Formulars auflisten. Stellen Sie zu diesem Zweck die HerkunftsTyp-Eigenschaften des Steuerelements lstFeldliste auf Feldliste ein. Auf welches Formular der Assistent beim Füllen der Liste zurückgreift, wird mittels einer VBA-Ereignisprozedur festgelegt, die Sie für die BeimÖffnen-Ereigniseigenschaft anlegen. Die Prozedur enthält lediglich die folgende Anweisung:

Me!lstFeldliste.RowSource = Forms(OpenArgs).RecordSource

Bei Start des Assistenten wird der Name des betreffenden Formulars als Öffnungsargument OpenArgs übergeben. Die obige Anweisung liest nun die Datenquelle des Formulars aus und weist sie der RowSource-Eigenschaft des Listenfeldes zu. Da die HerkunftsTyp-Eigenschaft auf Feldliste eingestellt ist, werden hier keine Datensätze, sondern lediglich die Feldnamen der Datenquelle aufgelistet.

Um den Benutzer des Assistenten die Möglichkeit zu geben, bestimmte Feldinhalte auzuwählen, soll er mit einem Doppelklick auf einen Feldnamen den aktuellen Feldinhalt in das rechte Textfeld befördern. Dies erledigt eine zweite Ereignisprozedur, die mit der BeimDoppelklicken-Eigenschaft der Feldliste verknüpft ist:

Private Sub lstFeldliste_DblClick(Cancel As Integer)

Dim Feldname As String
Dim Feldinhalt As Variant

    Feldname = Me!lstFeldliste
    Feldinhalt = Forms(OpenArgs)(Feldname)

    If IsNull(Feldinhalt) Then
        Beep
        MsgBox "Das ausgewählte Feld hat keinen Inhalt!"
    Else
        If Not IsNull(Me!txtText) Then
            Me!txtText = Me!txtText & vbCrLf & Feldinhalt
        Else
            Me!txtText = Feldinhalt
        End If
    End If

End Sub

Die Prozedur ermittelt den Namen des angeklickten Datenfeldes und fügt ihn zusammen mit einem Zeilenumbruch (Konstante vbCrLf) dem Textfeld hinzu.

Nachdem der Benutzer mehrere Feldinhalte auf diese Weise übernommen hat, muss der Inhalt des Textfeldes in die Zwischenablage kopiert werden. Dafür ist die BeimKlicken-Ereignisprozedur der OK-Schaltfläche zuständig:

Private Sub btnOk_Click()

    Me!txtText.SetFocus

    'Text markieren
    SendKeys "^{HOME}"
    SendKeys "+^{END}"

    'Bearbeiten>Kopieren auswählen
    DoCmd.DoMenuItem acFormBar, acEditMenu _
                ,acCopy, , acMenuVer70

    DoCmd.Close

End Sub

Die Ereignisprozedur der Abbrechen-Schaltfläche enthält nur eine einzelne Anweisung:

Private Sub btnAbbrechen_Click()

    DoCmd.Close

End Sub

Der Start des Zwischenablage-Assistenten erfolgt über die DoCmd.OpenForm-Methode:

DoCmd.OpenForm FormName:="Zwischenablage-Assistent" _
                                    ,WindowMode:=acDialog _
                                    ,OpenArgs:=Screen.ActiveForm.Name

Der Ausdruck übergibt dem Zwischenablage-Assistenten direkt den Namen des momentan aktiven Formulars. Sollte kein Formular aktiv sein, tritt hierbei allerdings ein Laufzeitfehler auf. Die folgende Prozedur zeigt, wie Sie Ihn abfangen können. Zusätzlich wird auch gleich der Datensatz des aktuellen Formulars gespeichert, damit der Assistent stets auf die aktuellen Daten zugreift:

Sub ZwischenablageKopieren()

On Error Resume Next

    DoCmd.DoMenuItem acFormBar, acRecordsMenu _
                    ,acSaveRecord, , acMenuVer70

     DoCmd.OpenForm FormName:="Zwischenablage-Assistent" _
                    ,WindowMode:=acDialog _
                    ,OpenArgs:=Screen.ActiveForm.Name

End Sub


Wenn Sie die Prozedur ZwischenAblageKopieren in ein Standardmodul platzieren, können Sie sie von jedem beliebigen Formular aus aufrufen. Legen Sie innerhalb des Formulars einfach eine Schaltfläche mit einer BeimKlicken-Ereignisprozedur an und rufen Sie von hier aus die Prozedur ZwischenAblageKopieren auf.

Bei einer Adresse ist es beispielsweise erforderlich, dass die Postleitzahl und der Ort in einer einzelnen Zeile erscheinen. Um dies zu bewerkstelligen, legen Sie dem Adressenformular einfach eine Abfrage zugrunde und definieren hier ein neues, berechnetes Feld, über das Sie die Postleitzahl mit dem Ort verknüpfen. Nach dem Start des Assistenten wird das berechnete Feld wie alle anderen Datenfelder in der Feldliste aufgeführt und steht zur Auswahl bereit. Das Anlegen eines Steuerelements für das berechnete Feld ist hierbei nicht erforderlich, da der Assistent direkt auf die Datenquelle zugreift.

 

Manchmal ist es erforderlich, die Anzahl der Tage bis zu einem bestimmten Datum zu ermitteln.

Subtrahieren Sie einfach zwei Datumswerte voneinander.

Vielleicht haben Sie in Ihrem Formular ein Steuerelement, das das Zieldatum speichert. Es könnte sich hierbei beispielsweise um den Abgabetermin für ein Projekt handeln. Ein weiteres Steuerelement berechnet nun die Anzahl der Tage bis zu diesem Datum.

Geben Sie dazu folgenden Ausdruck als Steuerelementinhalt ein:

=[Plan Abgabe]-Datum()

Da Access den Unterschied zwischen zwei Datumswerten standardmäßig in Tagen berechnet, können Sie sie einfach voneinander subtrahieren.
Wenn das Abgabedatum bereits verstrichen ist, liefert die Berechnung einen negativen Wert.

 

Jedes Formular hat eigene Netzwerkeigenschaften, die Vorrang vor den Standardeinstellungen haben. So können Sie in jedem Formular festlegen, ob die Daten dort pessimistisch oder optimistisch gesperrt werden.

Wählen Sie für jedes Formular eine Sperrmethode aus, damit dass eine Formular mit pessimistischer Sperrung für Datensicherheit sorgt, während das andere mit optimistischer Sperrung schnell arbeitet.

Um eine Sperrmethode für Formulare festzulegen, öffnen Sie das Formular in der Entwurfs-Ansicht und wählen im Eigenschaftsfenster die Registerkarte "Daten" aus. Wählen Sie das Formular mit dem Befehl Bearbeiten > Formular auswählen aus.

Die Datensatzeigenschaft "Datensätze sperren" erlaubt dieselben Optionen, wie die Standardsperrung: "keine Sperrung, "Alle Datensätze" und "Bearbeiteter Datensatz". Diese Einstellung gilt nur für das Hauptformular. Die Sperrmethode eines Unterformulars wird in der Entwurfs-Ansicht des Unterformulars eingestellt.

Programm gesteuert erreichen Sie die Sperrmethode eines Formulars mit Hilfe der Eigenschaft "RecordLocks"

Forms![Name].Properties.RecordLocks=2

Dieser Befehl aktiviert die pessimistische Datensatzsperrung für das Formular. Die Werte 0 bis 2 entsprechen den Optionen "Keine Sperrung", "Alle Datensätze" und "Bearbeiteter Datensatz"

 

Bei mehrseitigen Rechnungen ist es in vielen Fällen erforderlich, dass auf jeder Seite eine Zwischensumme der einzelnen Positionen ausgegeben wird.

Verwenden Sie das Drucken-Ereignis, um solche Seitensummen zu berechnen.

Grundlage für diese Lösung ist ein ungebundenes Textfeld namens ZwischSumme, das Sie im Seitenfuß der Rechnung plazieren. Hier wird später die Zwischensumme ausgegeben. Alles weitere wird von zwei Ereignisprozeduren erledigt.

Die erste Prozedur ist an die BeimDrucken-Ereigniseigenschaft des Seitenkopfes gebunden:

Private Sub Seitenkopf0_Print(Cancel As Integer, PrintCount As _Integer)

    Me!ZwischSumme = 0

End Sub

Diese Prozedur sorgt dafür, dass das Feld ZwischSumme zum Beginn jeder neuen Seite auf 0 initialisiert wird. Die zweite Prozedur ist an das BeimDrucken-Ereignis des Datailbereichs geknüpft:

Private Sub Detail1_Print(Cancel As Integer, _PrintCount As Integer)

    If PrintCount = 1 Then
        Me!ZwischSumme = Me!ZwischSumme + Me!Gesamtpreis
   
End If

End Sub

Bei jedem einzelnen Datensatz wird die Zwischensumme um den Betrag der aktuellen Rechnungsposition (in diesem Beispiel Gesamtpreis) erhöht. Vorher wird jedoch noch die PrintCount-Eigenschaft auf den Wert 1 untersucht. Dies ist erforderlich, da Access das Print-Ereignis bei Rechnungspoitionen, die sich über mehrere Seiten erstrecken, mehrmals aufruft. Die PrintCount-Eigenschaft gibt hierbei an, wie oft das Ereignis für den aktuellen Bereich bereits aufgerufen wurde.

Damit bestimmte Positionen nicht mehrmals hinzuaddiert werden, darf die Berechnung nur beim Auftreten des ersten Ereignisses erfolgen.

 

 
Diese Site ist für Einsteiger, Fortgeschrittene und Profi-Programmierer. Mit Suchmaschine.  

Wie Sie Dateien kopieren, wissen Sie. Wie aber können Sie beispielsweise eine Tabelle aus einer Datenbank in eine andere kopieren?

Öffnen Sie zusätzlich zur aktuellen Datenbank die Datenbank, in die Sie ein Objekt kopieren möchten. Platzieren Sie die beiden Accessfenster so, dass beide Datenbankfenster sichtbar sind. Jetzt können Sie beliebig Objekte zwischen den Datenbanken austauschen, indem Sie ein Objekt aus dem einen Datenbankfenster in das andere Datenbankfenster ziehen.

Der Kopiervorgang ist in beide Richtungen möglich.

Sie können Objekte auch verschieben. Betätigen Sie dazu beim Ablegen eines Objekts gleichzeitig die [SHIFT]-Taste. Aus Sicherheitsgründen wird in der Ursprungsdatenbank vor dem Löschen der Tabelle nachgefragt, ob diese wirklich entfernt werden soll.

 
Der TriniDat Währungs-Assistent rechnet Währungsfelder in beliebige andere Währungen um. Dazu erzeugt er von dem gewünschten Formular eine identische Kopie, und trägt dort die neuen Beträge ein. Durch diese Technik kann der Assistent mit nahezu jedem Formular eingesetzt werden, ohne dass Sie Änderungen innerhalb des Formulars vornehmen müssen. Während der Assistent geöffnet ist, können Sie mit Ihrem Formular problemlos weiterarbeiten. Er verfolgt alle Änderungen an den Währungsfeldern Ihres Formulars und rechnet diese automatisch um. Auch auf einen Datensatzwechsel reagiert der Assistent ohne Verzögerung. Vollversion 
Hier finden Sie zahlreiche Informationen und Tipps zum Umgang mit der Oracle-Datenbank. Schauen Sie doch einfach mal vorbei. Es lohnt sich! 

Für den Felddatentyp gilt Ähnliches wie für die Feldgröße. Nachdem Sie einen Feldnamen eingegeben haben und in die Spalte Felddatentyp wechseln, wird dort der Datentyp Text eingetragen. Wenn Sie aber beispielsweise fast ausschließlich mit Zahlen zu tun haben, ist das ständige Ändern des voreingestellten Wertes lästig. Bestimmen Sie, welcher Felddatentyp beim Wechsel in die gleichnamige Spalte eingetragen wird.

Im Dialogfenster Optionen, das Sie über das Menü Extras erreichen, haben Sie im Register Tabellen/Abfragen die Möglichkeit, den Standardfelddatentyp auszuwählen, der für Sie die meiste Eingabeersparnis bringt.

Das entsprechende Kombinationsfeld zur Auswahl des Felddatentyps ist in der Rubrik

 

Im vorigen Tipp haben Sie eine Gültigkeitsregel und ein Anzeigeformat zur Eingabe von Bankleitzahlen definiert.

Der Schwachpunkt dieser Variante besteht darin, dass der Anwender während der Eingabe nicht sehen kann, dass er gerade eine Bankleitzahl eingibt.

Um die Bankleitzahl schon während der Eingabe zu formatieren, definieren Sie ein Eingabeformat.

Zur Definition des Eingabeformats geben Sie folgenden Ausdruck in die gleichnamige Eigenschaft des Tabellenentwurfs ein:

000" - "000" - "00;;#

Die Nullen in diesem Ausdruck markieren die Stellen, an die der Anwender nur Ziffern eingeben kann. Dazwischen befinden sich einige Textliterahle, die die Eingabe als Bankleitzahl formatieren.

Das Eingabeformat erzwingt die Eingabe von 8 Ziffern und zwar ohne Vorzeichen oder andere Sonderzeichen. Die Eingabe von weniger als 8 Ziffern ist nicht möglich.

Wenn Sie nur das Eingabeformat verwenden, kann der Anwender auch Bankleitzahlen wie 000 000 00 eingeben. Wenn Sie dies unterbinden wollen, definieren Sie zusätzlich eine Gültigkeitsregel.

Außerdem sollten Sie die Eigenschaft Format auf folgenden Ausdruck ändern, um die Bankleitzahl im passenden Format anzeigen zu lassen:

@@@ @@@ @@

 

Datenbankentwurf
Teilen Sie beim Datenbankentwurf die Informationen so weit wie möglich auf einzelne Tabellenfelder auf. Häufig gemachte Fehler dabei sind beispielsweise die Zusammenfassung von Vor- und Nachname, sowie Postleitzahl und Ort in einem einzigen Tabellenfeld.

Beachten Sie beim Datenbankentwurf auch die Performance-Tipps zu Tabellen.

Der Assistent zur Leistungsanalyse
Bei einer bestehenden Datenbank sollten Sie als erstes einmal den Assistenten zur Leistungsanalyse ausprobieren.

Dieser Assistent kann entweder die gesamte Datenbank oder einzelne Datenbankobjekte analysieren und Optimierungsvorschläge machen. Falls Sie es wünschen, kann der Leistungsanalyse-Assistent außerdem einige Änderungen automatisch vornehmen.

Der Assistent zur Leistungsanalyse wird über den Menübefehl Extras / Analyse / Leistung aufgerufen.

Datenbanken aufteilen
Teilen Sie Ihre Datenbank in ein so genanntes Frontend und ein Backend auf. Das Prinzip einer solchen Aufteilung ist simpel:

- Das Frontend enthält alle Datenbankobjekte außer den Tabellen.
- Das Backend enthält nur die Tabellen.

Die Tabellen aus dem Backend werden dann mit dem Frontend verknüpft und verhalten sich dann im Prinzip genau so wie lokale Tabellen.

Bei Datenbankaufteilung können Sie sich durch einen Assistenten unterstützen lassen. Der Assistent wird mit den Menübefehl Extras / Datenbank-Dienstprogramme / Assistent zur Datenbankaufteilung (Access 2000/XP) bzw. Extras / Add-Ins / Assistent zur Datenbankaufteilung (Access 97) aufgerufen.

Alleiniger Zugriff auf Datenbanken
Falls Sie an einem Einzelplatzrechner arbeiten oder in einer Netzwerkumgebung nur alleine auf eine Access-Datenbank zugreifen, sollten Sie die Datenbank Exklusiv öffnen. Klicken Sie dazu im Dialogfenster Öffnen auf das nach unten gerichtete Dreieck neben der Schaltfläche Öffnen und markieren Sie den Eintrag Exklusiv öffnen.

Dieser Öffnungsmodus kann auch dauerhaft für alle Datenbanken in Access eingestellt werden. Öffnen Sie mit Extras / Optionen das Dialogfenster Optionen und aktivieren Sie dann das Register Weitere. Markieren Sie dann die Option Exklusiv und klicken Sie auf Übernehmen.

Datenbank regelmäßig komprimieren
Eine weitere effektive Möglichkeit zur Leistungsverbesserung ist das regelmäßige Komprimieren einer Datenbank, so wie es hier schon in einem früheren Tipp beschrieben wurde.

 

Um diese Probleme zu verhindern ist es sehr wichtig, dass Sie den Standarddrucker aktivieren und den Bericht dann abspeichern. Diese Einstellung wird dann im Bericht mitgespeichert und beim Öffnen des Berichtesautomatisch aktiviert.

Um den Standarddrucker als Voreinstellung zu aktivieren, gehen sie wie folgt vor:

  1. Öffnen Sie den Bericht in der Entwurfsansicht 
  2. Wählen Sie den Menübefehl Datei>Seite einrichten aus 
  3. Klicken Sie die Registerkarte Seite an 
  4. Wählen Sie die Option Standarddrucker aus und klicken Sie auf OK 
  5. Speichern Sie den Bericht ab
 

Access unterstützt Sie während des Formularentwurfs mit einer Symbolleiste, die speziell für die Formatierung von Steuerelementen geschaffen ist. Bei einem Klick mit der rechten Maustaste auf die Symbolleiste zeigt Access den Text Format (Formular-/Berichtsentwurf) als Namen an. Die Format-Symbolleiste enthält Schaltflächen, mit denen Sie Schriften, Schriftattribute und eine Reihe weiterer Eigenschaften einstellen können.

Die Einstellung der Eigenschaften Hintergrundfarbe, Textfarbe, Rahmenfarbe, Rahmenbreite und Spezialeffekt erfolgt über einen neuen Typ von Symbolen. Wenn Sie auf den nach unten zeigenden Pfeil eines dieser Symbole klicken, öffnet Access eine Palette, in der Sie den gewünschten Wert anklicken können.

Wenn Sie viel mit diesen Eigenschaften arbeiten, dann empfinden Sie es nach einer Weile wahrscheinlich als hinderlich, daß Sie jedesmal zuerst auf den Pfeil klicken müssen. Sie können Ihre Arbeit optimieren, indem Sie die Paletten aus der Symbolleiste lösen. Öffnen Sie dazu eine Palette, und klicken Sie mit der linken Maustaste auf einen grauen Bereich. Ziehen Sie die Palette dann bei festgehaltener, linker Maustaste an die gewünschte Bildschirmposition.

 

Ein klassisches Beispiel für eine Aktualisierung von Daten ist die Änderung des Mehrwertsteuersatzes. Die Erhöhung um ein Prozent wirkt sich auch auf Ihre Datenbestände negativ aus. Sie müssen nämlich bei allen Datensätzen beispielsweise in einer Artikelverwaltung den Mehrwertsteuersatz ändern. Eine unzumutbare Aufgabe.

Erstellen Sie eine Aktualisierungsabfrage, die diese lästige Arbeit für Sie übernimmt.

Erstellen Sie eine neue Auswahlabfrage und fügen Sie die zu aktualisierende Tabelle hinzu. Ziehen Sie das Aktualisierungsfeld in das Entwurfsraster, zum Beispiel das Feld MwSt.

Soll die Mehrwertsteuer von 15 % auf 16 % angehoben werden, müssen Sie über ein Kriterium erst alle Sätze mit 15 % selektieren. Der Steuersatz 7 % soll ja erhalten bleiben. Geben Sie also als Kriterium

0,15

ein.

Wandeln Sie die Auswahlabfrage in eine Aktualisierungsabfrage um, indem Sie den Menüpunkt Abfrage/Aktualisieren wählen. Im Entwurfsraster wird nun die Zeile Sortierung durch die Zeile Aktualisieren ersetzt. Tragen Sie in dieser Zeile in der Spalte MwSt den Wert

0,16

ein.

Dies ist der Wert, der bei den Datensätzen, die das Kriterium erfüllen, anstelle des alten Wertes eingesetzt wird.

Wechseln Sie in die Datenblattansicht, um noch einmal zu prüfen, ob die richtigen Datensätze selektiert wurden. Durch den Wechseln in die Datenblattansicht wird die Aktualisierung noch nicht durchgeführt. Die Datenblattansicht ist in diesem Fall nur eine Kontrollansicht.

Um die Aktualisierung zu vollziehen müssen Sie zurück in die Entwurfsansicht wechseln und auf das Symbol Ausführen in der Symbolleiste klicken. Damit die versehentliche Aktualisierung vermieden wird, fragt Access noch einmal ab, ob Sie die Daten wirklich aktualisieren möchten.

 
Office 2000 SP-2 ist ein auf Benutzer in einem Unternehmen zugeschnittenes Update. Darin sind die neuesten Produktupdates für Office 2000-Programme enthalten. Service Release 2 mit umfangreichen Bugfix. 

Oft wird anstelle einer Sub-Prozedur eine Function-Prozedur eingesetzt, damit die Prozedur auch außerhalb von VBA aufgerufen werden kann. Das Ergebnis solcher Funktionen ist in der Regel unwichtig.

Bei der Nutzung solcher Prozeduren von VBA aus rufen Sie die Function-Prozedur einfach wie eine Sub-Prozedur auf und ignorieren damit den Rückgabewert.

Ein gutes Beispiel hierfür ist die in Access eingebaute MsgBox-Funktion, die ein Meldungsfenster auf den Bildschirm bringt. Der Rückgabewert der Funktion gibt an, mit welcher Schaltfläche (z.B. OK oder Abbrechen) das Meldungsfenster vom Benutzer bestätigt wurde.

Wenn die Meldung ausschließlich mit einer einzelnen OK-Schaltfläche angezeigt wird, ist der Rückgabewert der MsgBox-Funktion uninteressant. Schließlich gibt es abgesehen von dieser Schaltfläche keine andere Möglichkeit, das Dialogfenster zu bestätigen

Ältere Access-Versionen haben zu diesem Zweck eine spezielle Anweisung zur Verfügung gestellt, die ebenfalls den Namen MsgBox trug. Da sich ab Access 7.0 allerdings alle Funktionen genauso wie Anweisungen aufrufen lassen, ist die MsgBox-Anweisung nun überflüssig. Die beiden folgenden Programmfragmente sind vom Ergebnis her vollkommen identisch. Im zweiten Beispiel wird das Ergebnis der Funktion allerdings ignoriert. Beachten Sie bei der zweiten Variante, dass Sie die Argumente nicht einklammern dürfen.

Dim Ergebnis As Variant

Ergebnis = MsgBox("Dies ist ein Test")
MsgBox "Dies ist ein Test"

Natürlich können Sie auch Ihre selbsterstellten Funktionen wie Sub-Prozeduren aufrufen. Die Vorgehensweise ist hierbei mit dem obigen Beispiel identisch.

 

Access bietet diverse Möglichkeiten, die Eingaben von Daten zu erleichtern. Vor allem in verknüpften Tabellen werden bei der Auswahl eines existierenden Datensatzes die dazugehörigen Daten automatisch angezeigt.

Ein Beispiel für das automatische Füllen von Feldern ist eine Abfrage, in der die beiden Tabellen Artikel und Lieferanten miteinander verknüpft werden. Zwischen den beiden Tabellen besteht eine 1-zu-N-Beziehung, die über das Feld Lieferanten-Nr beider Tabellen realisiert wird: siehe Abbildung 1.

Wenn Sie nun das verknüpfte Feld Lieferanten-Nr der Tabelle Artikel ändern, ermittelt Access die Feldinhalte Kontaktperson und Telefon aus der Tabelle Lieferanten und zeigt sie an.

Auf der Basis dieser Abfrage können Sie nun ein Formular anlegen. Plazieren Sie auf dem Formular ein Kombinationsfeld, das an das Datenfeld Lieferanten-Nr gebunden ist. Die Datensatzherkunft des Kombinationsfeldes sollte aus einer Abfrage mit den Feldern Firma und Lieferanten-Nr bestehen, wobei Sie das Feld Lieferanten-Nr an das Kombinationsfeld binden. Die Breite der Spalte Lieferanten-Nr setzen Sie im Kombinationsfeld auf 0, damit diese nicht angezeigt wird.

Nach der Auswahl eines Lieferanten im Formular ergänzt Access nun automatisch die übrigen Daten wie in Abbildung 2.

 

Bereits beim "Öffnen" einer MDB-Datei können Sie festlegen, wie sich Access im Mehrbenutzerbetrieb verhalten soll. Access öffnet Datenbanken standardmäßig exklusiv, so dass nur ein Anwender die MDB-Datei bearbeiten kann. Wenn mehrer Anwender gleichzeitig eine MDB-Datei bearbeiten wollen, müssen alle die Datenbank im Modus "Nicht exklusiv" öffnen.

Sie können alternativ auch die Standardeinstellungen von Access ändern, um die Datenbank grundsätzlich "Nicht exklusiv" zu öffnen.

Wie Access eine MDB-Datei öffnet, können Sie mit Hilfe von Optionen beeinflussen. Rufen Sie dazu den Befehl Extras>Optionen in der Menüzeile auf, und wählen Sie die Registerkarte "Weitere". Daraufhin können Sie in der Optionsgruppe "Standard-Öffnungsmodus festlegen, ob Access Ihre Datenbanken standardmäßig exklusiv oder für die gemeinsame Nutzung öffnet.

In VBA erreichen Sie den Öffnungsmodus für Datenbanken mit den Methoden GetOption und SetOption:

    Application.GetOption ("Öffnungsmodus für Datenbanken")
    Application.SetOption "Öffnungsmodus für Datenbanken", 0

Sofern Sie keine Änderungen an der Datenbank vornehmen, können Sie die MDB-Datei schreibgeschützt öffnen. Die lesenden Datenbankzugriffe sind etwas schneller.

Rufen Sie den Befehl Datei>Datenbank öffnen auf, klicken Sie auf die MDB-Datei im Dialog "Öffnen" mit der rechten Maustaste an, und wählen Sie im "Kurzmenü" den Befehl "Schreibgeschützt Öffnen" aus. In diesem Fall können Änderungen in der MDB-Datei nicht gespeichert werden. Eine entsprechende Meldung macht auf diesen Umstand aufmerksam

 

Diese spezielle Software für die Versicherungsbranche importiert Dateien im GDV-Format (Gesamtverband der Deutschen Versicherungswirtschaft e.V., GDV-Format Stand 7/2001) in eine Access-Datenbank. Die eingelesenen Daten (Kunden, Verträge, Tarifinformationen, Schadendaten usw.) werden sachgerecht aufbereitet und stehen dann in verschiedenen Tabellen zur Verfügung.

 

Klicken Sie auf den Start-Button und wählen Sie den Menüpunkt Einstellungen>Task-Leiste aus. Aktivieren Sie anschließend das Register Programme im Menü „Start“ und klicken Sie auf Erweitert. Daraufhin wird der Explorer geöffnet, in dem nur die Struktur des Startmenüs dargestellt wird. Öffnen Sie den Ordner Programme>Autostart. In diesem Ordner können Sie nun eine Verknüpfung mit Access erstellen. Sie können bei der Verknüpfung zusätzlich eine Datenbank oder Befehlszeilenoptionen angeben.

Alternativ zu einer Verknüpfung mit Access können Sie auch direkt die passende Datenbankdatei oder eine Verknüpfung zu der Datenbankdatei in den Autostart-Ordner ziehen.
 

Beide Funktionen werden in einem Access-Modul wie folgt deklariert:

Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" _
        (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long

Declare Function GetTempFileName Lib "kernel32" Alias _
        "GetTempFileNameA" (ByVal lpszPath As String, _
        ByVal lpPrefixString As String, ByVal wUnique As Long, _
        ByVal lpTempFileName As String) As Long

Der erste Parameter der Funktion GetTempFileName enthält den Pfadnamen des Temp-Verzeichnisses, den die Funktion GetTempPath zurückgibt. Der zweite Parameter lpPrefixString ist eine kleine Zeichenkette mit zwei bzw. drei Zeichen, die den Beginn des Dateinames bestimmt. Wenn Sie eine 0 als dritten Parameter übergeben, wird dem Dateinamen ein Wert im Hexadezimalformat vervollständigt. Der vierte Parameter nimmt das Ergebnis der Funktion auf.

Die folgende Beispielprozedur ermittelt zunächt das Temp-Verzeichnis und erzeugt dort einen Temp-Dateinamen:

Private Sub TempDateiErzeugen ()

Dim ret As Long, length As Long
Dim strTempVerz As String, strTempDatei As String

    ' Verzeichnis ermitteln 
    strTempVerz = String$(255, 0)
    length = Len(strTempVerz)
    ret = GetTempPath(length, strTempVerz)

    If ret <> 0 Then
        strTempVerz = Left$(strTempVerz, ret)
    Else
        Debug.Print "Verzeichnis konnte nicht ermittelt werden!"
        Exit Sub
    End If

    ' Dateinamen erzeugen
    strTempDatei = String$(255, 0)
    ret = GetTempFileName(strTempVerz, "TJ", 0, strTempDatei)

    If ret <> 0 Then
        strTempDatei = Left$(strTempDatei, InStr(1, strTempDatei,
                                  ".TMP") + 3) ' Nullen abschneiden
    Else
        Debug.Print "Datei wurde nicht erzeugt!"
    End If

End Sub

Diese Beispielprozedur sowie die API-Funktion GetTempFileName erzeugt nicht die Datei selber, sondern nur einen Dateinamen, den Sie verwenden können.

Um die Datei zu erzeugen bzw. öffnen, benutzen Sie die Open-Anweisung:

Open strTempDatei For Output As #1

    ' Daten in die Temp-Datei schreiben

Close #1

Dateien, die Sie vorübergehen anlegen, sollten Sie nach ihrem Einsatz auch wieder löschen. Dies bewerkstelligen Sie beispielsweise mit Hilfe der Kill-Anweisung.

 

Bevor Access eine VBA-Prozedur ausführen kann, muss diese zunächst kompiliert und damit in einem Zwischencode übersetzt werden. Abgesehen von einer Zeitverzögerung merken Sie hiervon bei der Entwicklung einer Datenbank nichts. Bei großen Modulen kann sich der Vorgang jedoch über mehrere Sekunden hinziehen. Unglücklicherweise nimmt Access diese Kompilierung immer zum ungünstigsten Zeitpunkt vor - nämlich beim Öffnen der Datenbank. Wer möchte hierbei schon gerne eine längere Wartezeit in Kauf nehmen?

Sie sollten daher alle VBA-Module im kompilierten Zustand speichern, um die Performance Ihrer Datenbank zu erhöhen.

Dies bewerkstelligen Sie folgendermaßen: Öffnen Sie ein beliebiges Modul Ihrer Datenbank. Die kann entweder ein Standardmodul oder aber ein Objektmodul (also ein Formular- oder Berichtsmodul) sein.

Wählen Sie den Menüpunkt Ausführen / Alle Module kompilieren und direkt danach den Menüpunkt Datei / Alle Module speichern aus.

In der Datenbank wird dadurch zusätzlich zum normalen Programmcode ein Kompilat gespeichert, das Access beim nächsten Öffnen der Datenbank direkt und ohne erneute Kompilierung ausführen kann.

Damit Access die Datenbank im kompilierten Zustand speichern kann, darf sie nicht gleichzeitig von anderen Benutzern (z.B. im Netzwerk) geöffnet sein. Wenn Sie hierbei auf Nummer Sicher gehen wollen, öffnen Sie die Datenbank im exklusiven Modus. Kreuzen Sie dazu im Öffnen-Dialogfenster das Kontrollkästchen Exclusiv an.

Der kompilierte Status der Datenbank geht verloren, sobald Sie irgendeine Änderung an der Struktur der Datenbank vornehmen, die auch den VBA-Code betrifft. Dazu gehören Änderungen an Formularen, Berichten, Steuerelementen und Modulen. Es genügt z.B. schon das Verschieben eines Steuerelements innerhalb eines Formulars. Sobald Sie das geänderte Formular speichern, geht der kompilierte Status verloren. Auch das Löschen eines der oben aufgeführten Objekte hat die gleichen Folgen.

Da Access den Dateinamen der Datenbank zusammen mit dem VBA-Code in der Datenbank speichert, bewirkt auch eine Änderung des Dateinamens eine Dekompilierung der kompletten Datenbank. Besonders betroffen sind Sie hiervon, wenn Sie beim Komprimieren der Datenbank aus Sicherheitsgründen einen anderen Dateinamen angeben.

Um auch hierbei den kompilierten Zustand beizubehalten, gibt es folgende Alternativen:

Komprimieren Sie die Datenbank über die aktuelle Datenbank. Um eventuellen Datenverlust vorzubeugen, sollten Sie vorher auf jeden Fall eine Sicherheitskopie der Datenbank anlegen.

Komprimieren Sie die Datenbank unter dem gleichen Namen in ein neues Verzeichnis. Nur der Name der Datenbank, nicht jedoch das Verzeichnis ist bei der Aufrechterhaltung des kompilierten Zustands relevant.

Komprimieren Sie die Datenbank unter einem neuen Namen und geben Sie ihr nach dem Vorgang wieder den ursprünglichen Namen. Das Umbenennen können Sie beispielsweise vom Windows-Explorer aus vornehmen.

 

Die parameterlose Funktion wird in einem VBA-Modul deklariert:

Declare Function GetVersion Lib "kernel32" () As Long

Die Funktion gibt einen Wert zurück, mit dem Sie unter Zuhilfenahme verschiedener Hex-Werten die Versionnummer von Windows ausrechnen:

Public Function WinVersionAnzeigen()

Dim ret As Long
Dim iVersionGross As Integer, iVersionKlein As Integer

    ret = GetVersion()

    iVersionGross = ret And &HFF&
    iVersionKlein = (ret And &HFF00&) / &H100&

    Debug.Print "Versionnummer: " & iVersionGross & "." & iVersionKlein

    If ret And &H80000000 Then
        Debug.Print "Windows 95"
    Else
        Debug.Print "Windows NT"
    End If

End Function

 

Die Überwachung einer bestimmten Variablen aktivieren Sie, indem Sie die gewünschte Variable im Modulfenster markieren und anschließend den Menüpunkt Debugging/Überwachung hinzufügen auswählen. Access öffnet daraufhin das gleichnamige Dialogfenster.

In der Sektion Art der Überwachung markieren Sie anschließend die Option Unterbrechen wenn der Wert True ist. Diese Einstellung bewirkt, dass Access in den Unterbrechungsmodus wechselt, sobald der im Textfeld Ausdruck angegebene Ausdruck den Wert True hat. Um nun beispielsweise den Unterbrechungsmodus zu aktivieren, wenn die Variable i den Wert 5 aufweist, geben Sie unter Ausdruck einfach den folgenden Text ein:

i = 5

 
Auf der Seite finden Sie Downloads, News und Antworten auf FAQ, sowie Links zu anderen MVPs. 

Ich habe ein Formular mit einem Textfeld und einem Listenfeld. Die Datensatzherkunft des Listenfeldes ist eine Abfrage mit den Feldern Name und TelefonNr. Als Bedingung vom Name-Feld habe ich

Wie[Formulare]![TelnrSuchen]![txtName] & "*"

eingegeben. Wenn ich nun im Name-Feld den ersten Buchstaben des Namens eingebe, werden im Listenfeld nur die Namen angezeigt, dessen erster Buchstabe mit der Eingabe übereinstimmt. Als Ereigniseigenschaft des Textfeldes BeiTasteAuf habe ich

Forms![TelnrSuchen]![lstNamesliste].Requery

eingegeben damit nach Eingabe jedes weiteren Buchstaben das Listenfeld aktualisiert wird. Diese Aktualisierung funktioniert aber nur, wenn ich kurz in die Entwurfsansicht und wieder in die Formularansicht wechsle.

Wie kann das Listenfeld nach Eingabe jedes Buchstaben aktualisiert werden? Die Einfügemarke sollte dabei das Textfeld nicht verlassen.

Access-97-Datenbank mit Demo-Datenbank

Das Problem mit der Lösung mit BeiTasteAuf ist, dass der Wert des Textfeldes nicht nach jedem Tastendruck aktualisiert wird, obwohl Sie die eingebenden Buchstaben im Feld sehen. Das Feld wird erst dann aktualisiert, wenn Sie das Feld verlassen.

Auch das BeiÄnderung-Ereignis nutzt uns nichts, weil die Listenfeld-Abfrage keinen aktuellen Textfeldwert erhält. Sie müssten also die NachAktualisierung-Ereignisprozedur implementieren, die das Listenfeld nach dem vollständigen Eingabewert filtert und aktualisiert.

Um das Listenfeld wirklich nach jedem Tastendruck zu aktualisieren, verwenden Sie eine statische Variable innerhalb der BeiTasteAuf-Prozedur. Dieser Variable wird jedem eingegebenen Buchstaben hinzugefügt. Die Variable behält auch ihren aktuellen Wert bei jedem Aufruf der Prozedur:

Static strLikeText As String

Je nach Buchstaben können Sie die neuen Zeichen in der BeiTasteAuf-Prozedur hinzufügen bzw. löschen:

Select Case KeyCode

    Case vbKeyBack ' Ein Zeichen löschen

        If Len(strLikeText) > 0 Then
            strLikeText = Left$(strLikeText, Len(strLikeText) - 1)
        End If

    Case vbKeyEscape ' Auswahl löschen
        strLikeText = ""

    Case 65 To 90 ' Das Zeichen (A-Z) hinzufügen

        strLikeText = strLikeText & Chr$(KeyCode)

End Select

Diese Variable können Sie dann als Where-Klausel für die Listenfeld-Abfrage verwenden:

Me!lstFirmen.RowSource = "SELECT Firma, Telefon FROM Kunden
WHERE Firma Like '" & strLikeText _ & "*';"

Von Andreas Blasberg; Econ (1997); EUR 5,48; ISBN: 3612281496  

Die Berichte einer Datenbank weisen in Praxis oft ein ähnliches Layout auf.

Beschleunigen Sie den Entwurf ähnlicher Berichten durch den Einsatz von Autoformaten.

Mit dem Menübefehl Format / Autoformat weisen Sie einem Bericht ein bestimmtes Format zu. Dazu zählen die Schriftart, die Farbgebung und die Formatierung von Linien.

Die Schaltfläche Anpassen des AutoFormat-Dialogs ermöglicht Ihnen die Definition neuer Automformate, die auf dem aktuellen Bericht basieren.

 
FAQ zu verschiedenen Themen in englischer Sprache. Freeware und Demo-Versionen im eigenen Downloadbereich, sowie umfangreiche Linksammlung für weitere Downloads. 

Ich möchte eine Seriennummer ermitteln, die sich aus Jahreszahl und fortlaufender Nummer zusammensetzt.

Wie kriege ich Access dazu, zum einen bei jedem Datensatz weiterzuzählen und vorher zu ermitteln, ob noch immer das gleiche Jahr läuft, oder ob es sich um ein neues Jahr handelt und dann wieder bei 1 zu beginnen?

Eine fortlaufende Nummer mit Jahreszahl, die sich beim neuen Jahr wieder zurücksetzt, kann man mit einer VBA-Funktion relativ leicht realisieren.

Legen Sie zunächst ein Textfeld mit einer Länge von mindestens 8 Zeichen in Ihrer Rechnungs-Tabelle (beispielsweise tblRechnungen) an. Für die Rechnungsnummern könnte dieses Feld folgendes Format haben: 00023-99 Diese Nummer stellt also die dreiundzwanzigste Rechnung im Jahr 1999 dar. Um die letzte Rechnungsnummer im aktuellen Jahr zu ermitteln, setzen wir die Max-Funktion in einem Recordset ein:

Dim db As Database
Dim rstLetzteRechNr As Recordset
Dim strJahr As String

strJahr = Right$(Year(Date), 2) ' Aktuelles Jahr, z.b. "99"
Set db = CurrentDb

Set rstLetzteRechNr = db.OpenRecordset("SELECT Max(Left([RechnungNr],5)) AS LetzteRechNr FROM tblRechnungen HAVING Right([RechnungNr],2)='" & strJahr & "';", dbOpenSnapshot)

Im Recordset-Feld LetzteRechNr befindet sich die allerletzte Rechnungsnummer des laufenden Jahres, z.B. "23". Wenn noch keine Rechnungsnummer in diesem Jahr vorhanden ist, enthält LetzteRechNr den Wert Null. Um die nächste Rechnungsnummer zu ermitteln, addieren Sie 1 zur letzten Rechnung und formatieren Sie das Ergebnis zusammen mit dem Jahr:

If IsNull(rstLastRechNr!LastRechNr) Then

    'erste Rechnung hat die Nummer 1
    NeueRechnungNr = Format$(1, "00000-") & strJahr

Else

    'nächste Rechnung wird um 1 erhöht
    NeueRechnungNr = Format$(rstLetzteRechNr!LetzteRechNr + 1, "00000-") & strJahr

End If

Die Variable NeueRechnungNr enthält dann die formatierte Nummer Ihrer nächsten Rechnung. Diese Paar Zeilen VBA-Code können Sie wunderbar in eine Funktion beispielsweise mit dem Namen GetNeueRechnungNr einwickeln. Sobald Sie eine neue Rechnung anlegen, lassen Sie die Rechnungsnummer automatisch generieren, z.B. im Ereignis Vor Eingabe Ihres Rechnungformulars:

Private Sub Form_BeforeInsert(Cancel As Integer)

    Me!RechnungNr = GetNeueRechnungNr()

End Sub

Wenn Sie bei dem Entwurf von Unterformularen einige Regeln beachten, können Sie diese universell einsetzen.

Die wichtigste Regel ist hierbei, dass Sie beim Verweis vom Unterformular aus auf das Hauptformular nie den Namen des Hauptformulars angeben dürfen. Dies ist erforderlich, da der Name natürlich davon abhängig ist, wo Sie das Unterformular einfügen. Als Ersatz stellt Access die Parent-Eigenschaft zur Verfügung, die zu einem bestimmten Unterformular einen Verweis auf das Hauptformular zurückliefert.

Ein gutes Beispiel für ein universelles Unterformular sind selbsterstellte Navigationsschaltflächen. Legen Sie einfach ein neues leeres Formular an, bei dem Sie die Navigationsschaltflächen, den Datensatzmarkierer sowie die beide Bildlaufleisten ausblenden. Platzieren Sie auf dem Formular zwei Schaltflächen mit den Namen btnNächster und btnVorheriger. Der BeimKlicken-Ereigniseigenschaft der ersten Schaltfläche weisen Sie folgende Prozedur zu:

Private Sub btnNächster_Click()

    On Error Resume Next
    Dim R As DAO.Recordset

    'Auf Hauptformular verweisen
    Set R = Me.Parent.RecordsetClone

    'Gleichen Datensatz auswählen
    R.Bookmark = Me.Parent.Bookmark

    R.MoveNext
    Me.Parent.Bookmark = R.Bookmark

End Sub

Die Ereignisprozedur der zweiten Schaltfläche hat einen identischen Aufbau. Ersetzen Sie lediglich die MoveNext-Eigenschaft durch die MovePrevious-Eigenschaft. Speichern Sie das fertige Formular unter den Namen Navigationsschaltflächen.

Sie können das neue Formular nun in jedes beliebige Hauptformular per Drag&Drop aus dem Datenbankfenster einfügen. Wenn Sie im Hauptformular die Rahmenart-Eigenschaft des Unterformular-Steuerelements auf Transparent einstellen, ist das Unterformular noch nicht einmal als solches zu erkennen. Nach dem Umschalten in die Formularansicht können Sie die Navigationsschaltflächen direkt einsetzen.

 

Viele Formulare belegen bekanntlich viel Platz auf dem Bildschirm. Wenn sie nicht benötigt werden, können sie aber auch Platz sparend verkleinert werden.

Besonders geeignet ist diese Vorgehensweise bei Formularen, die als Toolbox verwendet werden sollen. Positionieren Sie am oberen Rand des Formulars nebeneinander zwei neue Schaltflächen mit den Namen btnEinfahren und btnAusfahren.

Die erste Schaltfläche verknüpfen Sie mit folgender Ereignisprozedur:

Private Sub btnEinfahren_Click()

DoCmd.MoveSize Height:=850

End Sub

Die zweite Ereignisprozedur hat den gleichen Aufbau, nur dass Sie hier eine Höhe von ca. 2000 angeben. Die genauen Angaben ermitteln Sie am einfachsten durch etwas experimentieren.

Sobald Sie nun auf Einfahren klicken, wird die Formularhöhe soweit reduziert, dass nur noch die beiden Schaltflächen sichtbar sind. Mit Ausfahren bringen Sie das Formular wieder auf die ursprüngliche Höhe.

 

Geben Sie dem Primärschlüsselfeld und auch allen anderen Feldern möglichst Namen ohne Sonderzeichen. Sie können dann beim Zugriff auf die Felder die eckigen Klammern weglassen.

Theoretisch können Sie dem Primärschlüsselfeld jeden beliebigen Namen geben, der den Konventionen von Access entspricht. Häufig werden für dieses Feld Namen wie Adresse-Nr oder Person-Nr verwendet. Diese Namensgebung hat den Nachteil, dass Sie in VBA beim Zugriff auf dieses Feld den Namen immer in eckige Klammern setzen müssen. Das gleiche gilt auch für alle anderen Felder der Tabelle. Sie sollten daher auf Sonderzeichen verzichten und lieber zusammenhängende Namen vergeben, beispielsweise AdresseNr oder PersonNr. Sie können dann bei der Programmierung und auch bei SQL-Texten die eckigen Klammern weglassen.

Zu den folgenden Themenbereichen finden Sie Tipps & Tricks, Hinweise und Vorschläge:

  • Konzept, Entwurf 
  • Tabellen, Abfragen 
  • Formulare, Berichte 
  • VBA, Makros 
  • Anwendung

Diese Tipps stehen auch als Datenbank zum kostenlosen Download zur Verfügung. Sie dient Ihnen als Hilfestellung, um Fehler bei der Access-Programmierung zu vermeiden.

Ein besonderer Leckerbissen auf dieser Seite ist die Beispieldatenbank "Stoppuhr.mdb", mit der Sie eine Stoppuhr-Klasse mit 1/1000 Sekunden Genauigkeit in Ihre Access Anwendungen Integrieren können.

 
Ich benötige eine Rundenfunktion für Access 2000. Kann man diese nur in einem Bericht umsetzen oder auch in einem Formular, vorallem,wie binde ich das Rundenmodul im Formular ein mit einer [Ereignisprozedur].
Sehr geehrte Frau Pawlik-Herrmann, Sie können eine beliebige Funktion als "Public Function" in einem Standardmodul abspeichern. Von dort aus ist sie dann von Formularen, Berichten und Abfragen erreichbar. Nutzen Sie dazu die Syntax "=MeineFunktion()". Viele Grüße Tom Jordan
Ich habe mehrere Adressen meiner Freunde in Access angelegt. Über ein Kombinationsfeld kann ich die Adressen aussuchen und anklicken. Mein Problem: ich kann das Kombinationsfeld im Formular nicht sortieren. Wenn ich also einen Eintrag mit dem Nachnamen Amann habe, der jedoch erst Tage oder Datensätze nach Schmidt angelegt wurde, kann ich ihn auch immer nur als letzten Eintrag, also unten im Kombinationsfeld finden und nicht weiter oben, wo er vom Alphabet hinkommen müßte. Wo und wie kann ich dies bewerkstelligen? Ein Kombi-Feld hat die Eigenschaft Herkunftstyp. Diese soll auf Tabelle/Anfrage gesetzt sein. Bei der Eigenschaft Datensatzherkunft können Sie eine beliebige Abfrage hinterlegen, auch nach Nachnamen sortiert. Im Eigenschaftsfenster klicken Sie dazu auf den Knopf mit den drei Pünktchen (...) Das Abfrageentwurfsfenster öffnet sich.

Texte innerhalb von Meldungen oder Textfeldern sollen häufig mehrzeilig dargestellt werden.

Verwenden Sie die Konstante vbCrLF, um Zeilenumbrüche in Zeichenketten einzufügen.

Der folgende Ausdruck erzeugt beispielsweise einen dreizeiligen Text:

txtZeilen = "Zeile 1" & vbCrLf & "Zeile 2" & vbCrLf & "Zeile 3"

 

Die Suche nach einem bestimmten Programmfenster können Sie mit den API-Funktionen GetWindow und GetWindowText durchführen.

Die unten abgedruckte Funktion FensterSuchen erwartet ein String-Parameter, der den Titel des gesuchten Fensters darstellt. Wenn die Anwendung mit dem gesuchten Titel gerade nicht läuft, gibt die Funktion den Wert 0 zurück.

Public Const GW_HWNDFIRST = 0
Public Const GW_OWNER = 4
Public Const GW_HWNDNEXT = 2

Declare Function GetWindow Lib "user32" _
(ByVal hWnd As Long, ByVal wCmd As Long) As Long

Declare Function GetWindowText Lib "user32" Alias _
"GetWindowTextA" (ByVal hWnd As Long, _
ByVal lpString As String, ByVal cch As Long) As Long

Declare Function IsWindowVisible Lib "user32" _
(ByVal hWnd As Long) As Long Public

Function FensterSuchen(FensterTitel As String) As Long

    Dim hWnd, strTitel As String, ret As Long, Länge As Long

    hWnd = GetWindow(Application.hWndAccessApp, GW_HWNDFIRST) 
    If hWnd Then 
        Do While hWnd ' alle Fenster durchlaufen 
            strTitel = String$(255, 0) 
            Länge = Len(strTitel) 
            ret = GetWindowText(hWnd, strTitel, Länge) ' Fenstertitel ermitteln 
           
strTitel = Left$(strTitel, InStr(strTitel, Chr$(0)) - 1) 
           
'nur wenn Fenster sichtbar und kein Child-Fenster ist
           
If IsWindowVisible(hWnd) And GetWindow(hWnd, GW_OWNER) = 0 Then 
               
If strTitel Like FensterTitel Then 
                    FensterSuchen = hWnd ' Fenster gefunden 
                    Exit Function 
                End If 
            End If

            hWnd = GetWindow(hWnd, GW_HWNDNEXT) ' nächstes Fenster in der Kette ermitteln 
        Loop 
    End If 

    FensterSuchen = 0

End Function

In der Do-Schleife wird für jedes Fenster geprüft, ob es erstens sichtbar ist, und zweitens ob es ein Hauptfenster ist. Stellt die Funktion einen möglichen Kandidaten fest, überprüft sie den Titel mit der Funktion GetWindowTitel. Dieser wird dann mit dem Parameter FensterTitel verglichen.

Damit die Funktion auch Platzhalterzeichen akzeptiert, erfolgt der Vergleich mittels Like-Operator:

If strTitel Like FensterTitel Then 
    'Titel mit Funktionparameter vergleichen 
    FensterSuchen = True 
    'Fenster gefunden 
    Exit Function
End If

Um beispielsweise festzustellen, ob eine Anwendung mit dem Text "Microsoft" im Fenstertitel gestartet ist, rufen Sie die Funktion wie folgt auf:

If FensterSuchen("Microsoft*") Then

    Debug.Print "Microsoft ist da!"

End If

 

Bei der Texteingabe in Formulare ist es in einigen Fällen erforderlich, dass alle Wörter mit einem großen Buchstaben beginnen.

Verwenden Sie die StrConv-Funktion, um alle Wortanfänge in Großbuchstaben umzuwandeln.

Die StrConv-Funktion wird normalerweise dazu eingesetzt, um das Unicode-Zeichenformat in das ASCII-Zeichenformat zu konvertieren.

Mit Hilfe der Option vbProperCase lassen sich aber auch Wortanfänge in Großbuchstaben umwandeln.

Der Ausdruck

StrConv("Dies ist ein Test", vbProperCase)

hat dementsprechend die folgende Zeichenkette zum Ergebnis:

Dies Ist Ein Test

 

Achten Sie dabei besonders auf die Format[$]()-Funktion.

Ein Beispiel dafür ist die folgende Anweisung:

txtBruttoPreis = Format(txtNettoPreis + txtMwst, "#,###0.00 DM")"

Verwenden Sie zur Umstellung am besten die Funktion Ersetzen, die Sie in einem Modul-Fenster mit dem Menübefehl Bearbeiten/Ersetzen aufrufen können.

Markieren sie im Dialogfenster Ersetzen zunächst das Kontrollkästchen Suche in aktuellem Projekt, damit Sie diese Bearbeitung für die komplette Datenbank in einem Rutsch erledigen können.

 
Access enthält standardmäßig keine Funktion zum Runden von Zahlen. Diese besonders in der Buchhaltung auffällige Lücke schließt die TriniDat Runden-Funktion. Die Runden-Funktion verhindert Differenzen zwischen dem exakten Wert und dem von Access berechneten Wert. Ohne die Funktion kann eine Abweichung von einigen Pfennigen vom genauen Betrag entstehen. Datenbank mit Beispieldaten und Anleitung im Word-Format. 
Ich suche ein Tool oder ein Programm, mit dem ich fertige Access-Datenbanken packen und weitergeben kann. Doch sollte auf dem PC des Empfängers Access nicht installiert sein, funktionieren ja die Datenbanken nicht. Gibt es eine Möglichkeit die in VBA erstellten Datenbanken auch ohne Entwicklungsumgebung auf einem Computer zu benutzen? Ich freue mich auf eine Antwort, mfg. Ulli Dazu müssen Sie das Office Developer Kit besorgen. Da ist ein Setup-Assistent enthalten, mit dem Sie Installationen für Ihre Access-Datenbanken erstellen können. Für Ihre Anwender ohne Access können Sie auch die Access Laufzeit-Version ins Setup einbinden. Mehr zur Office-Entwicklung finden Sie hier: http://www.microsoft.com/germany/msdn/library/office/default.mspx
Ich möchte über eine Ereignisprozedur einen Bericht öffnen. Es soll nur der Bericht geöffnet werden, dessen Rechnungsnummer mit derjenigen im Formular übereinstimmt.

Bisher habe ich dies über ein Makro gestartet und folgende Bedingung eingegeben:

[rechnen].[nummer]=[Formulare]![rechnen]![nummer]

In VBA möchte ich dies über den Befehl:

DoCmd.OpenReport..., WhereCondition:=...

erreichen.

Wie kann ich diese Bedingung aber mit VBA zusammenstellen?

Mit VBA geht es natürlich auch, meistens aber noch flexibler. Sie bauen einfach einen String-Wert mit der Rechnungsnummer zusammen. Das Resultat können Sie in einer Variablen speichern:

Dim strWhere As String
strWhere = [rechnen].[nummer]=Me![nummer]

Die Variable strWhere setzen Sie dann in den WhereCondition-Parameter der OpenReport-Methode:

DoCmd.OpenReport "MeinBericht", WhereCondition:=strWhere

Weitere Bedingungen können Sie auch anfügen, indem Sie die WhereCondition etwa wie folgt ändern:

WhereCondition:=strWhere & " AND Storniert=False"

Wenn sich auf Formularen zu viele Steuerelemente tummeln, kann schnell die Übersicht verloren gehen.

Teilen Sie Ihr Formular in diesem Fall in mehrere Formularseiten auf.

Um dies zu bewerkstelligen, ordnen Sie am rechten Rand des Detailbereichs untereinander mehrere Steuerelemente des Typs Seitenumbruch an. Wenn Sie Ihr Formular beispielsweise in drei Seiten aufteilen möchten, fügen Sie dem Formular zwei Seitenumbrüche hinzu.
Achten Sie darauf, dass die Seitenumbruch-Steuerelemente exakt den gleichen Abstand voneinander haben.

Außerdem müssen Sie die Höhe des Detailbereichs genau an ein Vielfaches der Seitenhöhe anpassen. Wenn Sie das Formular z.B. in drei Seiten mit einer Höhe von 5 cm aufteilen, muß der Detailbereich eine Höhe von 15 cm aufweisen.

In der Formularansicht wechseln Sie nun mit Hilfe der Tasten U oder O zu den einzelnen Seiten.
Komfortabler wird es mit Hilfe der folgenden VBA-Anweisung:

DoCmd.GoToPage

Unter Seite geben Sie die Nummer der Seite an, zu der Access wechseln soll. Sie können die Anweisung beispielsweise von einer Schaltfläche aus aufrufen, um mit einem einfachen Mausklick zu einer bestimmten Seite zu wechseln.

 

Auf dieser Seite finden Sie viele Tipps, Tricks und Source Codes, die Sie für Ihre eigenen Access Datenbank Projekte verwenden können. Hierbei spielt es keine Rolle, ob Sie diese für den privat oder kommerziellen Bereich verwenden möchten. Es ist alles absolut kostenlos.

 

Soll ein Steuerelement weder in der Formular- noch in der Datenblattansicht sichtbar sein (beispielsweise um für den Anwender nicht sichtbare Berechnungen durchzuführen), plazieren Sie es einfach im Formularkopf oder -fuß und stellen die Sichtbar-Eigenschaft des kompletten Bereichs auf Nein ein.

 

Zur Zeit sind 3 verschiedene Versionen des SP8-Downloads für folgenede Betriebssysteme verfügbar:

  • Microsoft Windows 2000
  • Microsoft Windows XP
  • Microsoft Windows Server 2003
 

Bei einem Autowert-Feld mit der Feldgröße Long Integer werden die Werte automatisch bei jedem neuen Datensatz um den Wert 1 erhöht. Man erhält dadurch eine fortlaufende Datensatznummerierung. Diese Nummerierung bringt aber Nachteile mit sich, wenn mehrere Personen auf eine Tabelle zugreifen und neue Datensätze eingeben. Es kann sein, dass zwei verschiedene Datensätze dieselbe Primärschlüsselnummer erhalten. Ein Konflikt ist so unvermeidbar.

Wenn Sie ein neues Autowert-Feld angelegt haben, können Sie im Register Allgemein die Eigenschaften des Feldes einstellen. Wählen Sie im Feld Neue Werte den Eintrag Zufall aus. Beim Anlegen eines neuen Datensatzes wird dann ein zufälliger Wert vergeben. Die Wahrscheinlichkeit, dass die Datensatznummern von zwei Datensätzen gleich sind, ist sehr gering. 

Hauptsächlich wird die Einstellung Zufall bei der Replikation von Datenbanken benutzt. Der Zweck ist der gleiche wie oben beschrieben.
Wählen Sie dafür den Menüpunkt Datei>Als Abfrage speichern aus. In einem Dialog können Sie dem Filter einen Namen geben. Der Filter erscheint im Datenbankfenster im Register Abfrage als ganz normale Abfrage. Sie können Abfragen auch wie jede andere Abfrage aus dem Datenbankfenster öffnen. 

Habe bei einem Bericht ein Bild eingebettet. Möchte diesen Bericht nun per E-Mail versenden. Finde aber keine Möglichkeit. Bei der Konvertierung in ein Word-Doc als rtf.Datei wird nur der Text angezeigt, die Formatierung und vor allem auch die Bilder gehen verloren.

Gibt es hier eine Lösung?

Um einen Bericht mit allen Daten weiterleiten zu können, müssen Sie den Bericht in einem geeignetem Format ausdrucken.

Sie erreichen dies mit dem kostenlosen Snapshot-Viewer für Access 97 und 2000 http://office.microsoft.com/germany/downloads/2000/snapshot_viewer.aspx oder beispielsweise auch mit dem kostenpflichtigen Acrobat Distiller/PDF-Writer.

Sprachversion Deutsch

Seit der Einführung im Jahre 1992 gehört Microsoft Access zu den vielfältigsten Anwendungen der Microsoft Office-Suite. Diese Vielfältigkeit spiegelt sich vor allem bei den leitungsfähigen Funktionen und Features wieder, die selbst die Ansprüche erfahrener Datenbankanwender und Entwickler befriedigen. Auf der anderen Seite ist Access aber ebenso einfach zu bedienen wie die anderen Office-Applikationen und stellt somit die ideale Plattform für Einsteiger in die Datenverwaltung dar. Microsoft Access 2002 baut diese Vielfältigkeit noch weiter aus, indem es Datenbankentwicklern und erfahrenen Anwendern eine Vielzahl neuer Funktionen bereitstellt, mit denen nicht nur Datenverwaltung und Analyse wichtiger Komponenten, sondern auch die Erstellung leistungsfähiger Datenbanken noch einfacher und komfortabler von der Hand gehen. Gleichzeitig wird aber auch der Einsteiger dazu ermuntert, sich mit den Grundfunktionen der modernen Datenverwaltung vertraut zu machen. (Update)

Voraussetzungen Windows 95/98/2000/ME/NT Pentium 133 MHz ab 32 MB RAM.

 

Der Access 2.0-Konverter wird von Microsoft Office Access 2003 zum Konvertieren von Dateien im Microsoft Access 2.0-Dateiformat benutzt.

Beim Import von Daten liegen diese oftmals in einer Form oder Darstellung vor, die unerwünscht ist. Dabei sind natürlich die unterschiedlichsten Variationen denkbar.

Benutzen Sie die Funktionen, um die Darstellung importierter Daten in eine gewünschte Form zu bringen.

Das folgende Beispiel (siehe Abbildung 1) zeigt eine Tabelle mit importierten Daten an. Vor- und Nachname liegen nicht in der üblichen Schreibweise - erster Buchstabe groß und alle anderen Buchstaben klein - vor.

Erstellen Sie in einem solchen Fall eine benutzerdefinierte Funktion, die mit Hilfe eingebauter Access-Funktionen dieses Problem löst.

Public Function StandardString(ByVal InputString As String) As String '

Diese Funktion gibt eine Zeichenkette mit dem ersten Buchstaben groß ' und den
restlichen Buchstaben klein aus

Dim FirstLetter As String, RemainString As String

FirstLetter = Left(InputString, 1)
RemainString = Right(InputString, Len(InputString) - 1)
StandardString = Format(FirstLetter, ">") & Format(RemainString, "<")

End Function

Die beiden Variablen FirstLetter und RemainString teilen den übergebenen String InputString in den ersten Buchstaben und den Rest der Zeichenkette auf. FirstLetter wird mit Hilfe der Left-Funktion der erste Buchstaben der Zeichenkette zugewiesen, RemainString der Rest der Zeichenkette. Dabei kommen die Funktionen Right und Len zum Einsatz.

Anschließend werden die Buchstaben der beiden Teilstrings entsprechend umgewandelt und als Rückgabewert der aufrufenden Funktion übergeben. Eine solche Funktion können Sie anschließend in einer Abfrage verwenden, um in berechneten Feldern die umgewandelten Zeichenketten darzustellen.

 

Ich habe eine Datenbank mit 2 Tabellen. In der Tabelle 1 sind ca. 20.000 Datensätze mit 8 Feldern. In der Tabelle 2 sind ca. 1.700.000 Datensätze mit 5 Feldern. Diese Tabellen sind aus einer Anwender-Software in Access importiert worden und haben keine Schlüsselfelder. Jeweils 2 Felder sind identisch und können als 1:n Beziehung verwendet werden. Die Aufgabe besteht darin, die Tabelle 2 mit zwei Feldern aus der Tabelle 1 zu aktualisieren. Die Lösung mit zwei verschachtelten "for i = 1 to Anz" funktioniert, allerdings lässt hier die Verarbeitungsgeschwindigkeit zu wünschen übrig. Diese Methode benötigt doch ca. 340 Mio. Prüfschritte!

Können Sie hier eine Lösung anbieten, die eine akzeptable Abarbeitung bringt?

Die SQL-Anweisung UPDATE kann auch Daten aus unterschiedlichen Tabellen aktualisieren.

Das folgende Beispiel aktualisiert das Feld "Empfänger" der Tabelle "Bestellungen" mit dem Firmennamen der Tabelle "Kunden"

UPDATE Kunden
INNER JOIN Bestellungen ON Kunden.[Kunden-Code] = Bestellungen.[Kunden-Code]
SET Bestellungen.Empfänger = [Firma];

Das Beispiel basiert auf der Nordwind-Beispieldatenbank, die zum Lieferumfang von Access gehört.

Auf dieser Site finden Sie News, Support sowie Shareware und kostenlose Demoversion von "Find and Replace", für Access 2.0/95/97/2000. 
Von Ralf Albrecht und Natascha Nicol; Addison-Wesley; Euro 44,95; ISBN: 3827312663 

Das umfassende, lösungsorientierte Nachschlagewerk für die Realisierung maßgeschneiderter Datenbankprojekte

  • Exzellentes Access-Know-how ohne theoretischen Ballast
  • Direkt umsetzbare Lösungen konkreter Anwenderprobleme
  • Ausgewählte Datenbank-Beispiele aus der beruflichen Praxis

Das kompetente Nachschlagewerk gehört neben jeden Office-PC. Denn hier finden Sie auf die Schnelle die richtigen Antworten auf Ihre Fragen rund um den Aufbau und die Entwicklung maßgeschneiderter Datenbankprojekte. Von der ersten Seite an vermittelt das große Buch exzellentes Access-Know-how ohne überflüssigen theoretischen Ballast. Dabei wird die Lösung konkreter Anwenderprobleme kompromisslos in den Vordergrund gestellt. Tipps & Tricks aus erster Hand sind auch für erfahrene Anwender eine Quelle der Inspiration. Ausgewählte Beispiele aus der beruflichen Praxis tragen zur Vertiefung Ihres Datenbankwissens bei und unterstützen Sie dabei, Ihr frisch erworbenes Know-how in eigene Projekte umzusetzen. Hier lernen Sie zum Beispiel, einfache Anwendungen von Grund auf optimal zu entwickeln, eine Personaleinsatzplanung mit umfangreichen Datenbeständen zu realisieren oder den Datenaustausch mit anderen Officeanwendungen zu automatisieren. Außerdem erfahren Sie, wie man Datenbanken ins Access 2007-Format konvertiert, analysiert und individuell anpasst.

 
Von Praktikern für die Praxis geschrieben - hier steht der Nutzen im Vordergrund. Dieses Buch bietet Ihnen eine fundierte Einführung in die Datenbankprogrammierung mit Microsoft Access 97 und Visual Basic, ausführliches Know-how über die objekt- und ereignisorientierte Gestaltung der Benutzerschnittstelle sowie jede Menge universell einsetzbare Routinen und die richtigen Lösungen für Ihr Problem. Dabei werden auch die Neuerungen in Access 97 wie z. B. Verbesserung der Kommunikationsfähigkeit oder Integration der Internet/Intranet-Technologien ausführlich beschrieben. Auf den umfangreichen Rezept-Teil wird sicherlich kein Datenbankentwickler verzichten wollen. Die Begleit-CD enthält neben umfangreichem Beispiel-Material auch zusätzliche Access-Assistenten sowie weitere Microsoft-Programme.

Von Walter Doberenz und Thomas Kowalski; Microsoft Press (1997); Euro 49,90; ISBN: 3-86063-396-1

 

Bei Formularen und Berichten kann es schon einmal vorkommen, dass in einem bestimmten Steuerelement der Text #Name? erscheint.

Überprüfen Sie in diesem Fall den Inhalt der Steuerelementinhalt-Eigenschaft des betreffenden Steuerelements.

Kontrollieren Sie, ob der angegebene Feldname wirklich in der Datenquelle des Formulars existiert und Ihnen kein Schreibfehler unterlaufen ist.

Wenn die Eigenschaft einen Ausdruck wie beispielsweise eine Rechenanweisung enthalten sollte, darf dieser keine syntaktischen Fehler haben.

 

Besonders einfach wird der Vorgang, wenn Sie der Symbolleiste den gleichen Namen wie der kontextsensitiven Menüleiste geben. Eine entsprechende VBA-Prozedur kann dann den Namen aus der Menüleiste-Eigenschaft auslesen und die gleichnamige Symbolleiste öffnen:

Public Sub KontextSymbolleiste (FormObj As Form, _
                                                    Einblenden As Integer)

Dim Symbolleistenname As Variant

    Symbolleistenname = FormObj.MenuBar

    If Einblenden = True Then
        DoCmd.ShowToolbar Symbolleistenname, acToolbarYes
    Else
        DoCmd.ShowToolbar Symbolleistenname, acToolbarNo
    End If

End Sub

Platzieren Sie die Prozedur am besten in einem Standardmodul, damit Sie von allen Formularen aus aufgerufen werden kann.

Um eine Symbolleiste mit einem Formular zu verknüpfen, müssen Sie nun lediglich noch zwei Ereignisprozeduren für die Eigenschaften BeiAktivierung und BeiDeaktivierung anlegen:

Private Sub Form_Activate()

    KontextSymbolleiste Me, True

End Sub

Private Sub Form_Deactivate()

    KontextSymbolleiste Me, False

End Sub

Sobald das Formular nun aktiviert wird, öffnet Access die passende Symbolleiste. Sollte es dagegen deaktiviert werden, verschwindet die Symbolleiste wieder

 

Ich habe eine Datenbank in der gibt es eine Spalte "Anrede". Wenn in dieser Spalte "Herr" oder "Frau" steht soll in der Briefanrede "Sehr geehrter Herr" bzw. "Sehr geehrte Frau" übernommen werden. Wenn in dieser Spalte nichts steht soll "Sehr geehrte Damen und Herren" als Anrede verwendet werden.

Sie sollten als Datenherkunft für den Serienbrief-Export eine Abfrage verwenden, der Sie das berechnete Feld "Briefanrede" hinzufügen. Der Inhalt des Feldes kann mit einem berechneten Ausdruck (z.B. Briefanrede: Anrede + " " + [Name]) oder durch eine programmierte VBA-Funktion berechnet werden. Falls dies zu schwierig ist, können Sie auch ein weiteres Feld in Ihre Access-Datenbank einfügen, und die Briefanrede dort manuell eingeben.
Zu diesem Zweck positionieren Sie die Einfügemarke auf das betreffende Schlüsselwort und betätigen die F1 Taste. Access öffnet dadurch automatisch die passende Hilfeseite. 

Für eine Tabelle muss ein Primärschlüsselfeld erstellt werden, das aus einem String und einem Inkrement (möglichst Autowertfeld) kombiniert wird, also in der Art "NameA_1", "NameA_2", usw. Dabei ist 'NameA' identisch je Tabelle.

Eine zweite Tabelle in einer strukturell identischen, aber auf einem anderen Rechner installierten Datenbank muss analog indiziert werden, also "NameB_1, "NameB_2", usw. Beide Tabellen sollen dann per Anfügeabfrage an eine dritte Tabelle (in einer zentralen Datenbank) angefügt werden. Zweck des Ganzen ist, in der Haupttabelle die Herkunft des Datensatzes sofort zu erkennen.

Ein anderer Primärschlüssel ist aufgrund der Tabellenstruktur nicht möglich und ein einfaches Autowert-Feld pro Tabelle führt logischerweise zu doppelt indizierten Datensätzen in beiden Tabellen, weswegen die Anfügeabfrage dann nicht möglich wäre.

Wie ließe sich so etwas bewerkstelligen?

Anstatt den Stringwert und die Autowert-Zahl in einem Feld zu kombinieren, können Sie den Primärschlüssel über zwei verschiedene Felder aufteilen. In der Beispieldatenbank sehen Sie eine Tabelle namens tblRechnerA, die ein Textfeld "RechnerName" und einen Autowert-Feld "ID" enthält. Beide Felder sind im Primärschlüssel-Index enthalten: siehe Abbildung 1 unten. 

Der Standardwert des Textfeldes ist auf ="NameA" eingestellt, damit der Rechnername automatisch vergeben wird. Eine zweite Tabelle tblRechnerB hat die gleiche Struktur mit dem Textfeld-Standardwert ="NameB". Wenn Sie also Daten im Feld "TextDaten" eingeben, bleibt der Primärschlüssel über beide Tabellen eindeutig.

Die Abfrage zum Anfügen von Daten aus beiden Tabellen in eine Haupttabelle könnte etwa so aussehen:

Function DatenAnfügen(TabelleName As String)

    DoCmd.RunSQL _
    "INSERT INTO tblHauptTabelle (RechnerName,ID,TextDaten)"  _
    & "SELECT RechnerName,ID,TextDaten FROM " & TabelleName

End Function

Der Parameter TabelleName ist der Name der Tabelle, also z.B. "tblRechnerA".

 

Manchmal soll ein Filter oder eine Abfrage ähnliche Schreibweisen des gleichen Namens berücksichtigen.

Um verschiedene Schreibweisen zu berücksichtigen, definieren Sie eine Menge von Buchstaben. Um diese Anforderung zu erfüllen, können Sie Platzhalter im Filterkriterium verwenden.

So trifft beispielsweise das Kriterium

Wie M??er

unter anderem auf folgende Ausdrücke zu:

Mayer
Maier
Meier

Zusätzlich trifft aber auch folgender Ausdruck zu:

Maler

Um Ihre Angabe weiter zu präzisieren, können Sie Buchstabenmengen angeben. Betrachten Sie dazu folgenden Ausdruck:

Wie "M[ae][iy]er"

Dieser Ausdruck berücksichtigt alle Namen, bei denen der zweite Buchstabe ein a oder ein e und der dritte Buchstabe ein i oder ein y enthält. Der erste Buchstabe ist immer ein M und der Namen endet immer mit er.

Der Name Maler gelangt daher nicht ins Abfrage- oder Filterergebnis.

 

 

Mit einem auswahlbasierten Filter können Sie schnell Daten filtern, es läßt sich aber immer nur ein Kriterium angeben. Sie wollen im Datenblatt jedoch mehrere Kriterien definieren, in denen Sie auch Operatoren verwenden können.

Aktivieren Sie den formularbasierten Filter, um im Datenblatt spezielle Kriterien für einen Filter zu definieren.

Klicken Sie auf das Symbol Formularbasierter Filter. Das Datenblatt besteht anschließend nur noch aus einer Zeile. Die Felder des Blattes sind Kombinationsfelder, in denen jeweils alle Inhalte einer Spalte aufgelistet werden.

Um ein Kriterium zu definieren, können Sie entweder fertige Werte aus den Kombinationsfeldern auswählen, oder, wie aus Abfragen gewohnt, beliebige Kriterien eintragen. Die Kriterien können Vergleichs- und Logischen Operatoren, sowie Platzhalterzeichen und allen andern möglichen Ausdrücke enthalten.

Alle Kriterien in einer Zeile werden mit dem logischen Und verknüpft. Eine Oder-Verknüpfung erstellen Sie, indem Sie am unteren Fensterrand auf die Registerkarte Oder klicken. Es wird dann eine neue, leere Zeile angezeigt, deren Kriterien mit den zuvor definierten mit Oder verbunden werden.

Über das Symbol Filter/Sortierung anwenden starten Sie den Filtervorgang, mit dem Symbol Filter entfernen werden wieder alle Datensätze angezeigt.

 

Sie benötigen schnell die zehn Monate mit den höchsten Umsätzen der letzten fünf Jahre. In den Tabellen liegen die Daten aber nicht nach Umsätzen sortiert vor.

Eine Möglichkeit besteht darin, die Tabellen nach dem Umsatz zu sortieren. Wenn Sie aber die besten zehn Prozent aller Monate der letzten fünf Jahre benötigen, müssten Sie mit der Tabelle schon den Taschenrechner bemühen.

Lassen Sie sich Spitzenwerte durch eine Abfrage anzeigen.

Erstellen Sie stattdessen eine Auswahlabfrage, die alle benötigten Datenfelder enthält.

Öffnen Sie das Eigenschaftenfenster der Abfrage und geben Sie bei der Eigenschaft Spitzenwerte die Anzahl der zurückzugebenden Datensätze an, die die höchsten Werte beinhalten.

Wenn Sie eine prozentuelle Angabe machen, müssen Sie einen Wert zwischen 0 und 100, gefolgt von einem Prozentzeichen eingeben. Um das Feld festzulegen, nach dem die Spitzenwerte ermittelt werden sollen, müssen Sie für dieses Feld eine Sortierreihenfolge wählen.

Mit aufsteigender Sortierung erhalten Sie die niedrigsten Werte und mit absteigender Sortierung die höchsten Werte. Durch die entsprechende Sortierreihenfolge können Sie also auch die zehn niedrigsten Umsätze ermitteln.

 

 
Die Funktionsvielfalt des beliebten Datenbankprogramms Access scheint auf den ersten Blick nahezu unüberschaubar und viele Anwender nutzen nur einen geringen Teil der zahlreichen Möglichkeiten dieser Software. Das Taschenbuch hilft Ihnen, trotz der unzähligen Funktionen den Überblick zu behalten und die neue Access-Version 2003 Ihren Wünschen und Anforderungen entsprechend einzusetzen. Anfänger lernen alle wichtigen Programmfunktionen und Anwendungsmöglichkeiten kennen und Profis erhalten nützliche Tipps zur optimalen Nutzung des Programms. Sie erfahren alles Wissenswerte, um eigene Datenbanken zu erstellen und Daten in strukturierter Form zu verwalten, aufzubewahren und auszuwerten. Auch anspruchsvollere Themen wie die Erstellung von Makros und Modulen, die Programmierung mit Visual Basic sowie der Datenaustausch mit anderen Office-Programmen werden ausführlich dargestellt. Auf der beiliegenden CD-ROM: nützliche Musterdatenbanken und die Beispiele aus dem Buch.  

Ein Microsoft Access add-in für einen kontrollierbaren Import von Daten aus Excel in Access.

Statt die Daten aus der Tabelle oder aus einer anderen Quelle einzelnd einzugeben, konnen sie einfach in die Tabelle konvertiert werden. Die Benutzer brauchen nur die Daten zu importieren. Auf solche Weise spart das viel Zeit und Geld für die Dateneingabe von der Bedienungskraft. Die Erstellungshilfe wird gewohnlich benutzt, wenn man z.B. mit einem neuen Microsoft Access System arbeitet, wo die Daten aus Microsoft Excel in Microsoft Access übertragen werden müssen oder für einen regelmässigen Import der Files aus den Aussenquellen oder aus einem anderen System. Beim Linking Microsoft Access mit Ihrer ODBC Datenbank (Oracle, SQL Server, usw.), konnen Sie die Erstellungshilfe auch dazu benutzen, um dorthin die Daten aus Microsoft Excel zu übertragen.

 

Genau wie Formulare können auch Berichte mit einem Bild hinterlegt werden.

Ein Hintergrundbild definieren Sie mit Hilfe der Eigenschaft Bild, die alle Berichte zur Verfügung stellen. Dieser Eigenschaft können Sie eine Grafikdatei des Formats BMP oder WMF zuweisen.

Die Eigenschaft Bildausrichtung sollten Sie auf Mitte einstellen, damit die Grafik in der Mitte jeder Seite ausgedruckt wird. Außerdem sollten Sie die Eigenschaft Bild nebeneinander auf Nein einstellen, damit die Grafik nicht mehrfach erscheint.

 

Diese Aufgabe wird von der folgenden Prozedur erledigt:

Sub SonderzeichenUmwandeln(KeyAscii As Integer)

    Select Case KeyAscii
        Case Asc("ä"): SendKeys "ae": KeyAscii = 0
        Case Asc("ö"): SendKeys "oe": KeyAscii = 0
        Case Asc("ü"): SendKeys "ue": KeyAscii = 0
        Case Asc("Ä"): SendKeys "Ae": KeyAscii = 0
        Case Asc("Ö"): SendKeys "Oe": KeyAscii = 0
        Case Asc("Ü"): SendKeys "Ue": KeyAscii = 0
        Case Asc("ß"): SendKeys "ss": KeyAscii = 0
    End Select

End Sub

Zur eigentlichen Umwandlung muß diese Prozedur an das Taste-Ereignis der betreffenden Textfelder eines Formulars geknüpft werden. Legen Sie dazu für die BeiTaste-Ereigniseigenschaft eine neue Ereignisprozedur an, und füllen Sie diese mit der folgenden Anweisung:

SonderzeichenUmwandeln KeyAscii

Die deutschen Sonderzeichen werden nun bereits während der Eingabe ersetzt.

 

Bei Tabellen sollten Sie eines immer im Hinterkopf behalten:

Währungsbeträge können nicht nur in Feldern mit dem Felddatentyp Währung, sondern auch in Feldern mit anderen Felddatentypen gespeichert sein.

Dafür kommen in erster Linie Felder mit den Felddatentypen Single oder Double in Frage. Es soll allerdings auch Datenbanken geben, in denen Währungsbeträge in Text-, Integer- oder Long Interger-Feldern gespeichert sind.

Es bleibt Ihnen also nichts anderes übrig, als Ihre Tabellen daraufhin zu überprüfen und gegebenenfalls entsprechend anzupassen.

 

Um dies zu verhindern, setzen Sie den Eingabefokus mit dem Befehl SelectObject zurück:

Forms![frmUhrzeit].Visible = True     'Formular anzeigen und aktivieren
Domd.SelectObject acForm, "frmEingabe 'Formular wieder aktivieren

Mit dieser Methode entsteht allerdings ein störendes Geflacker, so dass der Fokus hin- und hergeschickt wird.

Diesem Umstand kann jedoch durch die Verwendung der bekannten Funktion SetWindowPos und einiger Konstanten abgeholfen werden.

Durch Angabe geeigneter Flags im letzten Parameter können Sie SetWindowPos dazu bringen, ein Fenster einzublenden, ohne es zu aktivieren. Dieses Verhalten wäre beispielsweise für Formulare interessant, die einen Status (z.B. die Uhrzeit) anzeigen. Folgendes Beispiel setzt die SetWindowPos-Funktion ein, um ein verborgendes Formular frmUhrzeit einzublenden, ohne dass das aktuelle Formular den Eingabefokus verliert:

Private Sub btnShowTime_Click()

    FensterAktivieren Forms![frmUhrzeit]

End Sub

Die Prozedur FensterAktivieren sieht wie folgt aus:

Public Const SWP_NOMOVE = &H2
Public Const SWP_NOSIZE = &H1
Public Const SWP_NOZORDER = &H4
Public Const SWP_SHOWWINDOW = &H40
Public Const SWP_NOACTIVATE = &H10

Declare Function SetWindowPos Lib "user32" _
    Alias "SetWindowPos" (ByVal hwnd As Long, _
    ByVal hWndInsertAfter As Long, ByVal x As Long,_
    ByVal y As Long, ByVal cx As Long,
    ByVal cy As Long, ByVal wFlags As Long) As Long

Public Function FensterAktivieren(F As Form)

    SetWindowPos F.hwnd, 0, 0, 0, 0, 0, SWP_NOSIZE _
                            Or SWP_NOMOVE _
                            Or SWP_NOZORDER _
                            Or SWP_SHOWWINDOW Or SWP_NOACTIVATE

End Function

Die Flags SWP_NOSIZE und SWP_NOMOVE sorgen dafür, dass die Größe und Position des Fensters nicht verändert werden.

 

Ich habe mittlerweile eine unüberschaubare Anzahl von Abfragen in meiner Access 97 Datenbank. Nicht alle werden in Programmen, Berichten und Formularen verwendet.

Gibt es eine Möglichkeit, maschinell die in irgendeinem Objekt verwendeten Abfragen herauszufinden?

Die herkömmliche Lösung wäre, eine Abfrage zu löschen und die gesamten Formulare und Berichte erneut gründlich zu testen.

Ein viel komfortablerer Weg ist dagegen ein Assistent, der in sämtlichen Datenbankobjekten nach einem beliebigen Text sucht und diesen ggf. ersetzt. Unser Suchen-und-Ersetzen-Assistent ist ein solches Tool, das in unseren fullAccess powerTools enthalten ist.

Werden Sie im Selbststudium mit Microsoft Access zum Datenbankprofi! Mit diesem praxisorientierten Lehrbuch und den vorbereiteten Übungsdateien arbeiten Sie sich in Ihrer persönlichen Lerngeschwindigkeit durch die leicht nachvollziehbaren Lektionen und praktischen Übungen und lernen dabei alle wesentlichen Werkzeuge und Techniken kennen. Gleichzeitig hilft Ihnen dieses Buch, sich auf die Microsoft Office Specialist-Prüfung vorzubereiten und stellt später ein ausgezeichnetes Nachschlagewerk für den beruflichen Alltag dar. Auf der Begleit-CD befinden sich alle vorbereiteten Übungsdateien, so dass Sie bei Ihrem Start keine Zeit verlieren. Dieses Lehrbuch wurde von unabhängiger Stelle als Vorbereitung auf die Microsoft Office Specialist-Prüfung anerkannt und erhielt das Prädikat „Microsoft Office Specialist Approved Courseware“. Das offizielle Trainingsbuch von Microsoft ist das ideale Lehrbuch für jeden, der Access endlich beherrschen will.

Microsoft Press (September 2004); Euro 29,90; ISBN: 3860630849

Sie haben mit Access die Möglichkeit, auf externe Datenbanken zuzugreifen. Sie können dazu Tabellen verknüpfen oder importieren.

Wenn Sie aber mal eben eine Information aus einer anderen Datenbank benötigen, beispielsweise eine Telefonnummer zu einem Namen aus einer Adressdatenbank, wäre es zuviel des Guten, diese Tabelle zu importieren.

Greifen Sie auf externe Datenbanken mittels einer Abfrage zu.

Erstellen Sie eine neue Abfrage, fügen Sie keine Tabelle oder Abfrage hinzu und öffnen Sie das Eigenschaftsfenster. In der Eigenschaft Quelldatenbank ist die aktuelle Datenbank (Aktuell) eingetragen. Geben Sie in diesem Eingabefeld den Namen und den Pfad der Datenbank an, auf die Sie zugreifen wollen. Zum Beispiel:

D:\Daten\Access90\Nordwind.mdb

Klicken Sie jetzt auf das Symbol Tabellen anzeigen. In den Registern Tabellen und Abfragen werden jetzt nicht mehr die Objekte der aktuellen, sondern der angegebenen Datenbank angezeigt. Fügen Sie die benötigte Tabelle hinzu. Sie können jetzt wie gewohnt Felder selektieren und Kriterien definieren.

Wenn Sie in der Abfrage noch Parameter verwenden, können Sie die Abfrage speichern und beim Aufruf mittels des Parameters gezielt Daten abrufen.

Definieren Sie beispielsweise einen Parameter für den Namen einer Person und lassen Sie sich zusätzlich die Telefonnummer anzeigen. Beim Aufruf der Abfrage geben Sie nur noch den Namen an, und Sie erhalten die Telefonnummer, ohne dass Sie Ihre Datenbank verlassen müssen.

 

Ich möchte in einer angelegten Datenbank wie bei Excel einen Wert berechnen lassen. Ich habe zwei Werte, die ich dividieren möchte. Das Ergebnis soll dann in einer neuen Spalte ausgegeben werden.

 

Sie können die Berechnung in einer einfachen Auswahlabfrage vornehmen. Hierzu fgen Sie in der Abfrage eine weitere Spalte ein und statt des Feldnamens tragen Sie die Formel Summe: [Menge1] / [Menge2] ein.

In der Datenblattansicht erhalten Sie dann in der Dritten Spalte das Ergebnis. Die Daten dieser Spalte können Sie nun in Formularen oder anderen Abfragen weiterverwenden.

Manchmal interessieren Sie nur bestimmte Datensätze einer Tabelle oder Abfrage. In diesem Fall definieren Sie einen Filter, um die Sicht Ihrer Daten einzuschränken.

Um alle Datensätze vom Ersten eines beliebigen Monats anzusehen, definieren Sie einen Filter mit der Format-Funktion.

Wählen Sie den Befehl Datensätze / Filter / Spezialfilter/-sortierung aus der Menüzeile, und geben Sie in die erste Spalte des Entwurfsbereichs folgenden Ausdruck ein:

TagBestelldatum: Format([Bestelldatum];"t") Abfragefeld

Ersetzen Sie dabei das Feld Bestelldatum durch den Namen des Feldes, nach dem Sie filtern wollen. Durch die Angabe des Parameters "t" ermittelt die Format-Funktion den Tag aus dem jeweiligen Datumswert.

Wenn Sie nun zusätzlich den Wert 1 als Kriterium eingeben und den Filter anwenden, zeigt Access nur die Datensätze an, deren Bestelldatum auf den Ersten eines beliebigen Monats in einem beliebigen Jahr fällt.

 

 

Als einziges Parameter übergeben dieser Funktion das Handle des betreffenden Fensters. Das Ergebnis Wahr weist auf ein minimiertes Fenster hin.

Auf eine ähnliche Weise arbeitet die Funktion IsZoomed, die feststellt, ob ein Fenster maximiert ist. Genau wie mit der Funktion ShowWindow können Sie den Ausdruck Application.hWndAccessApp dazu verwenden, den Zustand des Hauptfensters zu ermitteln. Für aktive Objektfenster (von Formularen und Berichten) übergeben Sie die Eigenschaft hWnd des Objekts.

Die Funktionen IsIconic und IsZoomed deklarieren Sie in einem Modul wie folgt:

Declare Function IsIconic Lib "user32" Alias "IsIconic" _
    (ByVal hwnd As Long) As Long
Declare Function IsZoomed Lib "user32" Alias "IsZoomed" _
    (ByVal hwnd As Long) As Long

Folgende Funktion nutzt beispielsweise die oben deklarierten API-Funktionen, um den Zustand des Fensters hWnd% festzustellen:

Public Const NORMAL = 0
Public Const MAXIMIZED = 1
Public Const MINIMIZED = 2

Public Function FensterZustand(ByVal hwnd%)

    If IsZoomed(hwnd) Then
        FensterZustand = MAXIMIZED
    ElseIf IsIconic(hwnd) Then
        FensterZustand = MINIMIZED
    Else

        FensterZustand = NORMAL
    End If

End Function

Wir haben zwei Büros in Leipzig und Dresden, die über Telefon in Kontakt stehen. Um stets aktuell zu bleiben, nutzen wir die Replikation bzw. wollen Sie gern nutzen. Nach jeder erfolgten Replikation sind die neuen Replikate jedoch unbrauchbar, da Makros, Funktionen u.ä. nicht mehr unterstützt werden und zu Programmfehlern führen. Mit einigem Basteln haben wir herausbekommen, dass dies wohl mit Änderungen im Original zusammenhängt, d.h. bei Abweichungen in Formularen u.ä. ist die Replikation fehlerhaft. Der Clou wäre jedoch, auch Änderungen durchführen und replizieren zu können.

Gibt es eine Möglichkeit, diese Änderungen bei der Replikation mit zu übertragen oder beschränkt sich die Nutzung auf die reine Datenänderung?

Tatsächlich beschränkt sich die Replikation auf Datenänderungen in Ihrer Datenbank. Für Entwurfsänderungen an Formularen, Berichten usw. ist die so genannte "Design-Master"-Datenbank verantwortlich. Wenn beide Büros Änderungen am Entwurf der Datenbank durchführen wollen, müssen diese nacheinander an der Design-Master-Datenbank durchgeführt werden. Es ist also erforderlich, diese Datenbank - beispielsweise via E-Mail - zwischen den beiden Büros auszutauschen.

Die Microsoft Office 97 Developer Tools bieten zur Vereinfachung Quellcode-Verwaltungsprodukte an (wie z.B. Visual SourceSafe), die Sie auch mit Access 97 nutzen können. Mit einem Quellcode-Verwaltungssystem werden Datenbankobjekte von verschiedenen Entwicklern ein- und ausgecheckt. Die aktualisierten Objekte werden dann nach einer Versionsnummer geprüft und zusammengefügt. Weitere Information zur Quellcode-Verwaltung mit Access 97 finden Sie unter http://www.microsoft.com/officedev.

Das Buch bietet den gesamten Funktionsumfang von Access 2003 und mehr - für Leser, die in Access gründlich einsteigen und gleich weitermachen wollen. Für Access-Fortgeschrittene, die auf der Suche nach tiefer gehenden Informationen, nach Tipps und Praxiswissen sind, und für jeden Anwender, der nachschlagen und Know-how auffrischen will. Der Autor ist einer der erfahrensten bei Markt + Technik und zeichnet sich dadurch aus, dass er das, was er professionell darstellt besonders eingängig formuliert.

Von Said Baloui; Markt + Technik (2003); Euro 44,95; ISBN: 3827265622

Auch als eBook erhältlich; Markt + Technik (2003), € 29,95; ISBN PDF-3827265622

 

 

Die Funktion SetWindowPos ändert die Position des angegebenen Fensters:

Declare Function SetWindowPos Lib "user32" _
        (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
        ByVal x As Long, ByVal y As Long, ByVal cx As Long, _
        ByVal cy As Long, ByVal wFlags As Long) As Long

Das Parameter hwnd stellt das Handle des zu positionierenden Fensters dar.

Das folgende Beispiel ordnet das Access Hauptfenster und die Hilfe-Fenster zu den Datenzugriffsobjekten (Fenstertitel DAO-Referenz) nebeneinander an.

Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, _
    ByVal nCmdShow As Long) As Long

Declare Function GetSystemMetrics Lib "user32" _
    (ByVal nIndex As Long) As Long

Public Const SWP_NOZORDER = &H4
Public Const SM_CXSCREEN = 0
Public Const SM_CYSCREEN = 1
Public Const SW_NORMAL = 1

Public Function FensterPositionieren()

Dim SchirmBreite As Long, SchirmHöhe As Long
Dim lHilfeFenster As Long

    ' Breite des gesamten Bildschirms 
    SchirmBreite = GetSystemMetrics(SM_CXSCREEN)

    ' Höhe des gesamten Bildschirms 
    SchirmHöhe = GetSystemMetrics(SM_CYSCREEN) 

    ' falls maximiert bzw. minimiert
    ShowWindow Application.hWndAccessApp, SW_NORMAL

    SetWindowPos Application.hWndAccessApp, 0, 0, 0, _
    SchirmBreite / 2, SchirmHöhe, SWP_NOZORDER

    ' Handle des Hilfe-Fensters ermitteln
    lHilfeFenster = FensterSuchen("DAO-Referenz")

    If lHilfeFenster Then

        SetWindowPos lHilfeFenster, 0, SchirmBreite / 2, _
                    0, SchirmBreite / 2, SchirmHöhe, SWP_NOZORDER

    End If

End Function

Voraussetzung für das Funktionieren der Prozedur ist, dass Sie sich die Proezedur des vorhergehenden Beispiels bereits in Ihrem Modul befindet.

Damit die Funktion unabhängig von der Bildschirmauflösung arbeitet, ermitteln sie zuerst die Auflösung mit der Funktion GetSystemMetric. Anschließend wird das Access-Fenster links oben auf dem Bildschirm positioniert. Die Größe des Fensters wird auf die gesamte Bildschirmhöhe und die Hälfte der gesamten Bildschirmbreite (SchirmBreite / 2) gesetzt. Unmittelbar neben dem Access-Fenster fängt das Hilfe-Fenster in der Mitte des Bildschirms an und reicht bis zum rechten Rand des Bildschirms.

Dieses Buch richtet sich an Programmierer und Entwickler, die im professionellen und privaten Bereich eigene Access-Anwendungen erstellen möchten. Access-Anwendungskenntnisse werden vorausgesetzt.

Eigene Datenbanken entwickeln

Wer mit Access eigene Datenbank-Anwendungen entwickeln möchte, benötigt genaue Kenntnisse über Access Basic/VBA und die Makro-Programmierung. Dieses Buch liefert sie Ihnen:
Anhand von zahlreichen Beispielen führt es Sie in die Programmierung mit Access ein.

Profi-Techniken

Neben den Grundlagen der Datenbankprogrammierung bietet Ihnen dieses Buch kompetente Anleitungen zur Handhabung von Datenbankobjekten sowie zum professionellen Design einer Datenbank. Echte Profi-Techniken werden in den letzten Kapiteln dieses Buches vermittelt. Hier geht es detailliert um die Programmierung von OLE und DDE sowie API-Funktionsaufrufen.

Aus dem Inhalt

  • Tabellen, Abfragen, Formulare und Berichte mit Access-Basic/VBA programmieren
  • OCX-Zusatzsteuerelemente zum Abfangen von Fenstermeldungen
  • Vollständige Referenz
  • Tipps zur Anwendungsentwicklung
  • Artikeldatenbank mit zahlreichen Speziallösungen zu Access 7.0

Leider müssen wir Ihnen mitteilen, dass das Access 7.0 Buch für Windows 95 nicht mehr im Handel erhältlich ist.

Bei Amazon.de gibt es die Möglichkeit alte nicht mehr im Handel erhältliche Bücher gebraucht zu kaufen. Schauen Sie doch einfach mal bei Amazone.de vorbei. Vielleicht haben Sie ja Glück.

 

Wenn der Ausdruck eines Berichts via VBA aktiviert wurde, und der Benutzer den Druckauftrag abbricht, löst Access für die betreffende OpenReport-Methode einen Laufzeitfehler aus.

Diesen Fehler, der von Access beim Druckabbruch ausgelöst wird, sollte Ihre VBA-Prozedur abfangen.

Public Function BerichtDrucken(Bericht As String)

    On Error GoTo Err

    DoCmd.OpenReport Bericht, acNormal
    BerichtDrucken = True 

Ende:
    Exit Function
Err:
    If Err.Number = 2501 Then
        'Druck wurde abgebrochen
        MsgBox "Druckauftrag wurde abgebrochen."
    End If

    BerichtDrucken = False
    Resume Ende

End Function

 

Der Databases-Container enthält zu diesem Zweck ein Document-Objekt namens SummaryInfo, dessen Eigenschaften den Zugriff auf die einzelnen Dateiinformationen erlaubt. Jede Dateiinformation wird hier durch eine eigene Eigenschaft repräsentiert.

Bei Zugriff auf die Eigenschaft muß allerdings stets der englische Name der Dateiinformation angegeben werden. Außerdem muß der Zugriff mittels Properties-Auflistung erfolgen, da es sich bei den Datei-Informationen um benutzerdefinierte Eigenschaften handelt. Die folgenden Programmzeilen geben beispielsweise den Autor der aktuellen Datenbank im Testfenster aus:

Sub AutorAusgeben() 

Dim DB As Database

    Set DB = CurrentDb()

    Debug.Print DB.Containers!Databases. _
                            Documents!SummaryInfo.Properties![Author]

End Sub

Bei der richtigen Zuordnung der deutschen und der englischen Eigenschaftsbezeichnungen hilft Ihnen die nachfolgende Tabelle:

Tabelle

Eine Besonderheit besteht darin, daß nur die Datenbankeigenschaften innerhalb des SummaryInfo-Objekts durch Eigenschaften vertreten sind, für die Sie einen Text eingetragen haben. Wenn Sie beispielsweise noch keine Firma eingetragen haben, ist die entsprechende Eigenschaft Company nicht vorhanden. Dies müssen Sie beim Zugriff auf die Eigenschaft berücksichtigen, das es hier zu einem Laufzeitfehler kommen kann. Die folgende Beispielfunktion liest den Firmennamen der aktuellen Datenbank aus und gibt ihn als Ergebnis zurück. Sollte die Eigenschaft nicht vorhanden sein, liefert die Funktion eine leere Zeichenkette:

Function FirmennameErmitteln() As String

On Error GoTo Err

Dim DB As Database

    Set DB = CurrentDb()

    FirmennameErmitteln = DB.Containers!Databases. _
               Documents!SummaryInfo.Properties![Company]

Exit Function

Err:

    'Die Eigenschaft ist nicht vorhanden
    FirmennameErmitteln = ""
    Exit Function

End Function

Natürlich können Sie eine Dateiinformation nicht nur auslesen, sondern auch verändern. Sie haben hierbei uneingeschränkten Lese- und Schreibzugriff auf die betreffenden Eigenschaften. Sie müssen allerdings sicherstellen, daß die Eigenschaft vor dem Hinzufügen auch wirklich existiert. Sollte dies nicht der Fall sein, können Sie diese vorher mittels CreateProperty-Methode hinzufügen.

 

Das 72-seitige Magazin ist werbefrei und enthält ca. acht bis zehn Beiträge pro Ausgabe, die sich mit Themen rund um Access beschäftigen. Es ist für jeden etwas dabei: Fundierte Grundlagen zur Datenmodellierung, Formular- und Berichtsgestaltung sowie zur Programmierung mit VBA sind dort ebenso vertreten wie fortgeschrittene Themen.

Die Zusammenarbeit von Access mit den anderen Office-Anwendungen wie Word, Excel oder Outlook wird immer wieder aufgegriffen und auch alternative Techniken finden ihren Platz - etwa der Microsoft SQL Server, die MSDE oder MySQL auf der Datenseite und VB.NET/ADO.NET oder klassisches ASP auf der Benutzerseite. Und in Zeiten des Internet dürfen auch Techniken wie E-Mail (mit und ohne Outlook) oder der Zugriff auf Web-Services via Access nicht fehlen.

Das Know-how kommt in verschiedenen Darreichungsformen: Grundlagen- und Know-how-Beiträge beschäftigen sich intensiv mit einer Technik, Musterlösungen stellen die Umsetzung von Anwendungen zum Verwalten von Kontakten, Kunden, Artikeln, Vereinen, Literatur und vielem mehr vor und beschreiben sowohl die Erstellung als auch die Anwendung der Lösungen und in den Tipps und Tricks finden Sie mundgerecht zubereitetes Know-how für den Soforteinsatz.

Zusätzlich zum Magazin erhält man für die Dauer des Abonnements Zugriff auf das sehr umfangreiche Online-Archiv, das alle Beiträge seit Erscheinen des ersten Magazins Ende 2000 enthält - dort warten immerhin mehr als 2000 Seiten Know-how auf den Leser.

Seit neuestem ist das Magazin auch preislich wesentlich attraktiver: Bisher gab es nur ein jederzeit kündbares Abo zum Preis von EUR 29,80 je Heft, nun offeriert der Verlag ein Jahresabo für EUR 124,- (zzgl. 7% MwSt.) - und darin ist auch noch das Buch 'Access, SQL & .NET' im Wert von EUR 49,80 enthalten. Die Bestellung ist unter http://www.access-magazin.de möglich; dort gibt es weitere Infos wie etwa eine komplette Übersicht über alle bisher erschienenen Beiträge inklusive der ersten Seite eines jeden Beitrags als .pdf-Leseprobe. Zu den Autoren gehören übrigens auch der Access-FAQ-Schöpfer Karl Donaubauer und die beiden TriniDat-Macher Manfred Hoffbauer und Christoph Spielmann.

Access im Unternehmen - das Magazin
Lösungen, Tipps und Tricks und Know-how zu Microsoft Access
Systemanforderung: Access 97 oder höher
Preis: EUR 124,- für das Jahresabo + Buch 'Access, SQL & .NET' + Online-Archiv (zzgl. MwSt. und Versand)

 

Mit der API-Funktion ChooseColor können Sie diesen Dialog ihrer Access-Anwendung zur Verfügung stellen. Diese Funktion wird wie folgt definiert:

Declare Function ChooseColor Lib "comdlg32.dll" _ 
                          Alias "ChooseColorA" (Color As TChooseColor) As Long

Als einziges Parameter übergeben Sie der ChooseColor-Funktion einen benutzerdefinierten Typ, der wichtige Information für den Farben-Dialog enthält. Dieser Typ ist folgendermaßen definiert:

Type TChooseColor
    lStructSize As Long
    hwndOwner As Long
    hInstance As Long
    rgbResult As Long
    lpCustColors As Long
    Flags As Long
    lCustData As Long
    lpfnHook As Long
    lpTemplateName As Long
End Type

Dim BDFarben(0 To 15) As Long

Zusätzlich müssen Sie ein Array deklarieren, das die fünfzehn benutzerdefinierten Farben enthält. Einen Zeiger auf dieses Array weisen Sie dem Parameter TChooseColor.lpCustColors zu. Da VBA jedoch nicht so geschickt mit Zeigern umgehen kann, müssen Sie den Zeiger per Hand erzeugen, und zwar mit der Funktion VarPtr, die sich in der Visual Basic Laufzeitbibliothek VB40032.DLL befindet:

Declare Function VarPtr Lib "vb40032" (lpVoid As Any) As Long

Die obengenannte Laufzeitbibliothek gehört nicht zum Lieferumfang von Access, sondern Sie finden sie bei Visual Basic ab Version 4.0. Da es sich um eine frei verfügbare Laufzeitversion handelt, können Sie die Datei auch aus Mailboxen und Onlinediensten (z.B. Com Mit dem Parameter Flags können Sie Optionen für den Dialog einstellen. In unserem Beispiel verwenden wir die Konstante CC_RGBINIT. Dies bedeutet, daß der Dialog die zuletzt ausgewählte Farbe als Voreinstellung für die nächste Farbenauswahl nehmen soll. Weitere Flags können Sie mit den folgenden Konstanten setzen:




















Konstante Bedeutung
Public Const CC_RGBINIT = &H1 letzte Farbe voreingestellt
Public Const CC_FULLOPEN = &H2 Dialog wird mit beiden Hälften geöffnet
Public Const CC_PREVENTFULLOPEN = &H4 Rechte Hälfte zum Farben selbst definieren darf nicht geöffnet werden
Public Const CC_SHOWHELP = &H8 Hilfe-Schaltfläche verfügbar
Public Const CC_SOLIDCOLOR = &H80 Nur solide Farben verfügbar
Public Const CC_ANYCOLOR = &H100 Alle Farben verfügbar

Zu Beginn des Trainings lernen Sie die Benutzeroberfläche von Access 2003 kennen und erfahren sukzessive, welche Funktionen die Datenbank zu bieten hat. Schon bald werden Sie selbst aktiv und legen mit Hilfe von detaillierten Schritt-für-Schritt-Anleitungen eigene Datensätze an. Anschließend trainieren Sie ebenfalls unter Anleitung den effektiven Umgang mit Tabellen, Formularen, Abfragen und Berichten. Und um die nötige Routine im Umgang mit Access zu gewinnen, können Sie das Erlernte mit Hilfe der Übungen auf der beiliegenden CD selbst ausprobieren.

Ganz gleich, ob Sie das Trainingsprogramm von A bis Z absolvieren möchten oder sich gezielt einzelnen Themen widmen wollen – mit diesen Workouts werden Sie Ihre Fitness in Access 2003 zügig und effizient steigern.

Aus dem Inhalt

  • Grundlagen von Access
  • Eine Datenbank anlegen und bearbeiten
  • Daten suchen, filtern und formatieren
  • Eine relationale Datenbank erstellen
  • Mit Tabellen, Formularen, Abfragen, Makros und Berichten arbeiten
  • Daten importieren und exportieren

Deutsche Übersetzung von DELTA International CITS GmbH; Euro 29,00; ISBN: 3-89721-418-0

 

Das Buch richtet sich sowohl an Anfänger, die eine fundierte Einführung in die Datenbankprogrammierung und die Programmiersprache VBA suchen, als auch an versierte Access-2000-Entwickler, die ein kompetentes Nachschlagewerk brauchen. Dem Access-Einsteiger werden Makros und deren Unterschiede zu VBA-Codes erklärt. Er lernt die Strukturen einer relationalen Datenbank und wichtige Begriffe der Datenbanktheorie kennen. Im Anschluß erläutern die Autoren die Grundlagen der VBA-Programmierung und gehen dann auf den praktischen Einsatz von VBA ein. Mit diesen Kenntnissen ist der Leser in der Lage, eigene Datenbankanwendungen zu programmieren.

Von Irene Bauder, Jürgen Bär und Carl Hanser (1999); Euro 49,90; ISBN: 3446211012

 

Ich möchte ein Formular über eine Befehlsschaltfläche schließen. Dies führt jedoch zu einer Fehlermeldung, weil z.B. in einem Primärschlüsselfeld kein Wert eingetragen ist.

Wenn ich jedoch das Fenster via Systemmenüfeld schließe, erscheint zwar ebenfalls die Fehlermeldung, das Formular wird aber geschlossen.

Woran liegt das? Oder anders gefragt: Welcher Befehl wird ausgeführt, wenn ich den Systemmenübefehl ausführe?

Wenn Sie ein Formular mittels Systemmenü schließen, prüft Access zunächst die Gültigkeit der Daten. Wird diese verletzt, meldet Access einen Fehler. Sie können das Formular aber trotzdem schließen, indem Sie auf Ja klicken.

Die Datenänderungen werden in diesem Falle rückgängig gemacht. Wenn Sie das Formular mit einer eigenen Schaltfläche schließen möchten, müssen Sie vorher die Daten selbst prüfen. Dazu erweitern Sie die Ereignisprozedur der Schaltfläche:

Private Sub btnSchließen_Click()

    If IsNull(Me!Nachname) Then
        ' Nachname-Feld braucht einen Wert
        MsgBox "Kein Nachname eingegeben!"
        Me!Nachname.SetFocus Else
        ' Daten sind OK
        DoCmd.Close acForm, Me.Name 
    End If

End Sub

Besonders beim Drucken von Aufklebern ist es oft erforderlich, daß bestimmte Datensätze mehrmals hintereinander gedruckt werden sollen.

Wenn Sie Adreßetiketten drucken möchten, fügen Sie der betreffenden Adressentabelle zunächst ein neues Datenfeld namens AnzahlKopien hinzu. Hier speichern Sie die Anzahl der Etiketten, die für den jeweiligen Datensatz ausgedruckt werden sollen. Wenn Sie beispielsweise den Wert 1 angeben, druckt Access das Original und zusätzlich eine Kopie – also insgesamt zwei Etiketten.

Auf Basis dieser Tabelle legen Sie dann einen Etikettenbericht an. Achten Sie darauf, dass Sie das Feld AnzahlKopien ebenfalls in Ihren Bericht übernehmen. Damit es hier später nicht sichtbar ist, stellen Sie die Sichtbar-Eigenschaft auf Nein ein.

Die BeimDrucken-Ereigniseigenschaft des Detailbereichs verknüpfen Sie anschließend mit der folgenden Ereignisprozedur:

Private Sub Detailbereich_Print(Cancel As Integer, PrintCount As Integer)

    Static Anzahl As Integer

    If Anzahl < Me!AnzahlKopien Then

        Me.NextRecord = False    
        Anzahl = Anzahl + 1

    Else

    Anzahl = 0

    End If

End Sub

Die Prozedur enthält eine statische Variable, die die Anzahl der bereits gedruckten Kopien aufnimmt. Sollte die erforderliche Anzahl noch nicht erreicht worden sein, verhindert die Prozedur mittels NextRecord-Methode den Wechsel zum nächsten Datensatz. Der aktuelle Datensatz wird also erneut ausgedruckt. Sobald die erforderliche Anzahl erreicht ist, wird die Variable Anzahl wieder auf den Wert 0 gesetzt und der Wechsel zum nächsten Datensatz zugelassen.
 

Manchmal ist es erforderlich, solche Texte als Zahlen zu kodieren. Ein Grund hierfür könnte darin bestehen, dass sich die Anzahl der Farbwerte kontinuierlich erweitert und Sie sie deshalb lieber in einer eigenen Tabelle speichern. Um die Farbwerte umzusetzen, gehen Sie wie folgt vor:

  1. Fügen Sie Ihrer Tabelle das numerische Feld Farbwert hinzu. 
  2. Speichern Sie den neuen Tabellenentwurf. 
  3. Erstellen Sie eine neue Abfrage auf der Basis der geänderten Tabelle. 
  4. Wählen Sie den Befehl Abfrage>Aktualisieren aus der Menüzeile, um die Auswahl- in eine Aktualisierungsabfrage umzuwandeln. 
  5. Ziehen Sie die Spalte Farbwert in den Entwurfsbereich der Abfrage. 
  6. Geben Sie den folgenden Ausdruck in die Zeile Aktualisieren der Spalte Farbwert ein:
    Wenn([Farbe]="Grün";1;Wenn([Farbe]="Blau";2;3))

Dieser Ausdruck gibt den Wert 1 zurück, wenn der Wert des Feldes Farbe gleich Grün ist. Andernfalls führt Access die zweite, geschachtelte Wenn-Funktion aus. Diese ermittelt den Wert 2, wenn der Wert des Feldes Farbe gleich Blau ist. In allen anderen Fällen liefert die Funktion den Wert 3.

Mit dem Befehl Abfrage>Ausführen starten Sie die Abfrage. Access meldet zunächst, wieviele Datensätze aktualisiert werden. Klicken Sie auf die Schaltfläche OK, um den Vorgang zu starten. Wenn Sie anschließend in das Datenblatt Ihrer Tabelle schauen, werden Sie feststellen, daß das Feld Farbwert nun die gewünschten Werte enthält. Sie können das Feld Farbe daher aus Ihrer Tabelle löschen.

 

Lt. Microsoft Access-Hilfe kann man in einem ungebundenen Kombinationslistenfeld einen Eintrag markieren mit

cboFeld.selected(1)=true

(soll das 2. Element der Liste markieren)
Der Kompiler gibt jedoch eine Fehlermeldung aus. "Methode oder Datenobjekt nicht gefunden" Was mache ich falsch?

Die Selected-Methode gilt nur für Listboxen. Für ein Kombinationsfeld kann man den Wert direkt setzen:

cboFeld.AddItem "Eintrag 1"
cboFeld.AddItem "Eintrag 2"
cboFeld.AddItem "Eintrag 3"
cboFeld.AddItem "Eintrag 4"
cboFeld = "Eintrag 2" ' Startwert.

Umschaltflächen verfügen über keine Möglichkeit, zwei oder mehrere Zustände durch unterschiedliche Symbole zu repräsentieren.

Diese Funktionalität können Sie aber nachahmen, indem Sie zwei Schaltflächen deckungsgleich übereinander anordnen und bei Bedarf einzeln einblenden.

Erstellen Sie zuerst zwei gleich große übereinander liegende Schaltflächen, und weisen Sie diesen die Namen btnNr1 und btnNr2 zu. Da nur die erste Schaltfläche standardmäßig sichtbar sein sollte, ändern sie die Sichtbar-Eigenschaft der zweiten Schaltfläche in Nein ab.

Legen Sie dann für das Beim Klicken-Ereignis beider Schaltflächen zwei identische Ereignisprozeduren an. Das folgende Listing zeigt die beiden Ereignisprozeduren:

Private Sub btnNr1_Click()

    Me![btnNr2].Visible = Not Me![btnNr2].Visible
    Me![btnNr2].SetFocus
    Me![btnNr1].Visible = Not Me![btnNr1].Visible

End Sub

Private Sub btnNr2_Click()

    Me![btnNr1].Visible = Not Me![btnNr1].Visible
    Me![btnNr1].SetFocus
    Me![btnNr2].Visible = Not Me![btnNr2].Visible

End Sub

Bei einem Klick auf die erste Schaltfläche wird diese nun ausgeblendet und die zweite Schaltfläche eingeblendet.

 

Ich habe in einem Formular den Beginn einer Veranstaltung als Datumsfeld. In einem zweiten Feld steht das Geburtsdatum von Teilnehmern, die an dieser Veranstaltung teilnehmen wollen. Nun möchte ich prüfen (auf den Tag genau) ob ein Teilnehmer ein bestimmtes Mindestalter hat. Da das Mindestalter bei verschiedenen Veranstaltungen unterschiedlich ist, sollte in einem dritten Feld nur das Alter als Zahl eingesetzt werden müssen.

Wird das Mindestalter nicht erreicht, erscheint eine Warnmeldung.

Access-97-Datenbank mit Mindestalter-Abfrage

Wie so viele Aufgaben kann auch diese hauptsächlich mit einer Abfrage erledigt werden. Die Beispieldatenbank zu dieser Leseranfrage enthält zunächst eine Tabelle namens tblVeranstaltungen mit den Feldern, die Herr Koch erwähnt hat. Die Abfrage qryTeilnehmer gibt die Daten aus dieser Tabelle zusammen mit einigen berechneten Feldern zurück.

Um festzustellen, ob das Mindestalter zum Veranstaltungsbeginn vom Teilnehmer erreicht werden wird, brauchen wir zuerst das Alter an dem Datum, an dem die Veranstaltung beginnt. Dieses Datum kann entweder in der Zukunft oder in der Vergangenheit liegen. Dazu nehmen wir folgendes berechnetes Abfragefeld:

AlterDann: Wenn(DatSeriell(Jahr([Beginn]);
Monat([TeilnehmerGeburtstag]);
Tag([TeilnehmerGeburtstag]))<=[Beginn];
Jahr([Beginn])-Jahr([TeilnehmerGeburtstag]);
Jahr([Beginn])-Jahr([TeilnehmerGeburtstag])-1)

Dieses Feld sieht beim ersten Blick ziemlich komplex aus, ist aber nichts Anderes als eine modifizierte Version der Funktion zur Berechnung des aktuellen Alters. Ein weiteres Abfragefeld vergleicht das Mindestalter mit dem Alter des Teilnehmers am Veranstaltungsbeginn: Mindestalter erreicht:

[AlterDann]>=[Mindestalter]

Dieses Feld gibt den Wert True bzw. False zurück. Das Ergebnis können Sie jedoch mit einem passenden Text formatieren. Geben Sie folgenden Text in der Format-Eigenschaft des Feldes ein:

"Mindestalter nicht erreicht"[Rot]; "Mindestalter OK"

Redmond (1997); Euro 8,00; ISBN: 3932575261

Leider müssen wir Ihnen mitteilen, dass das Access 97 Trainings-Buch nicht mehr im Handel erhältlich ist.

Bei Amazon.de gibt es die Möglichkeit alte nicht mehr im Handel erhältliche Bücher gebraucht zu kaufen. Schauen Sie doch einfach mal bei Amazone.de vorbei. Vielleicht haben Sie ja Glück.

 

Diese Möglichkeit zur Feldauswahl nutzt das Entwurfsraster selbst.

Wählen Sie den Feldnamen über ein Kombinationsfeld aus.

Klicken Sie in der ersten freien Spalte in die Zeile Feld und öffnen Sie das erscheinende Kombinationsfeld. Darin werden alle Felder aus allen Tabellen, die Sie dem Entwurfsbereich hinzugefügt haben aufgeführt und zwar in der Form:

 

 

Auf dieser Site präsentiert Ihnen Gerhard Kopatz viele Themenbereiche, wie zum Beispiel der Visual Basic Tutorials Bereich in dem Ihnen mehrere Tipps und Anregungen für die Programmier Praxis vorgestellt werden

In der Tipps & Tricks Rubrik werden Ihnen eine Vielzahl an Beispielen zur Verfügung gestellt. Eine ähnliche Beschaffenheit wie die Source Code Rubrik hat die Abteilung mit dem Namen Programme. Dort finden Sie etliche in Visual Basic geschriebene Programme komplett als Open Source.

Wie Sie an interessante Informationen rund um das Thema Visual Basic auch außerhalb des Internets kommen können erfahren Sie in der Rubrik Quellen.

Auch der Forum-Bereich ist sehr Interessant, denn dort können Sie sich mit anderen Besuchern austauschen und so direkt von den Erfahrungen anderer Programmierer profitieren.

Bei den Links bekommen Sie eine Auflistung der besten Deutsch- und Englischsprachigen Visual Basic Websites. Zu jeder Site finden Sie auch einen kleinen Screenshot, der Ihnen sofort einen Eindruck über das Angebot vermittelt. 

Desweiteren gibt es einen Chatraum von Visual Basic World, in dem Sie sich direkt mit den Besuchern dieser Site austauschen können.

 
Ich habe eine Datenbank mit einer Tabelle für offene Posten. Ich möchte nun über das Tabellenfeld RE-Betrag die Mahngebühren berechnen lassen. Die Berechnung soll wie folgt aussehen:

RE-Betrag Mahngebühr
bis 1000 DM 5,00 DM
zwischen 1001 und 20.000 DM 0,5% des RE-Betrags
mehr als 20.000 DM 100 DM

Wie kann ich solch eine Berechnung in eine Access-Abfrage einbinden?

Access-97-Datenbank mit Demo-Datenbank

Bei einer solchen Staffel-Berechnung ist in den meisten Fällen eine kleine VBA-Prozedur notwendig.

In der Beispieldatenbank finden Sie eine Funktion namens GetMahngebühr (im Modul modMahngebühren), die anhand eines Rechnungsbetrags die entsprechende Mahngebühr berechnet. Die Prozedur sieht wie folgt aus:

Public Function GetMahngebühr(REBetrag As _ Variant) As Variant

    ' berechnet Mahngebühren
    If IsNull(REBetrag) Then
        GetMahngebühr = Null
    ElseIf REBetrag <= 1000 Then
        GetMahngebühr = 5
    ElseIf REBetrag <= 20000 Then
        GetMahngebühr = 0.005 * REBetrag
    Else
        GetMahngebühr = 100 
    End If

End Function

Diese Funktion können Sie beispielsweise in einer Abfrage einsetzen, um die Mahngebühren zu allen vorhandenen Rechnungen zu ermitteln:

SELECT RechnungNr, [RE-Betrag], GetMahngebühr([RE-Betrag]) AS Mahngebühr FROM Rechnungen;

Des weiteren werden unter der Rubrik MS Access tips viele Praxisbeispiele vorgestellt.

Unter "Links" finden Sie eine Auflistung von Access Websites. Sehr interessant sind hier die Access-User-Groups.

 

Hier erfahren Sie alles über die Neuerungen in Access 2007 und Sie finden Links zu den Häufig gestelltesten Fragen zu Microsoft Office Access 2007 und zu einer Access 2007 Demo (Englisch).

Die Kaufoptionen werden in der zweiten Hälfte 2006 bekannt gegeben.

 
Solche Fehler können sich beispielsweise bei Abstürzen von ACCESS oder WINDOWS einschleichen.

Teilen Sie eine Datenbank in eine BackEnd- und eine FrontEnd-Datenbank auf, um bei jedem Start eine automatische Reparatur der Daten durchführen zu können.

Bei der Aufteilung der Datenbank müssen Sie dafür sorgen, dass alle Tabellen von den übrigen Objeken vollständig getrennt und in der BackEnd-Datenbank untergebracht werden. Anschließend binden Sie die Tabellen aus der BackEnd- in die FrontEnd-Datenbank ein.

Die eigentliche Reparatur der BackEndDatenbank erledigen Sie mit Hilfe der RepairDatabase-Methode. Am besten rufen Sie diese Methode direkt nach dem Öffnen der FrontEnd-Datenbank als erste Anweisung auf. Dies ist erfoderlich, da die BackEnd-Datenbank zu diesem Zeitpunkt noch nicht geöffnet ist. Sollte allerdings bereits irgendein Tabellenzugriff ausgeführt worden sein, schlägt die Reparatur fehl.

 
Mit dem TriniDat Explorer-Assistenten erhalten Sie ein nützliches Werkzeug, mit dem Sie ein Formular in Ihre Datenbank einfügen können, dass die Funktionalität des Windows-Explorers zur Darstellung Ihrer Daten verwendet. Das Explorer Formular erhält standardmäßig links eine Baumstruktur und rechts eine Listenstruktur. Sie können jedoch auch für jede Seite entweder ein normales Listenfeld, eine Baumstruktur oder eine Listenstruktur wählen. Mit dem Setup-Programm installieren Sie sowohl den Explorer-Assistenten, als auch eine Datenbank, die die Funktionsweise des Explorer-Formulars an zwei Beispielen demonstriert. Anhand dieser Beispiele und der ausführlichen Anleitung können Sie sich auch die Vorgehensweise zum Füllen der Listen mit Daten im Quellcode ansehen. Vollversion mit Dokumentation im Word-Format 

Kombinations- und Listenfelder können bei Bedarf mit mehreren Spalten ausgestattet werden. Die Breite jeder Spalte lässt sich hierbei individuell einstellen.

Um eine bestimmte Spalte zu verstecken, weisen Sie dieser die Breite 0 zu.

Informationen in versteckten Spalten eignen sich ausgezeichnet zur Abfrage von Daten, ohne dass Sie die betreffenden Feldinhalte erneut nachschlagen müssen.

In einem Kombinationsfeld mit Kundennamen können Sie beispielsweise die Telefonnummer in der unsichtbaren zweite Spalte anordnen. Die Telefonnummer des momentan ausgewählten Kunden rufen Sie mit Hilfe des folgenden Ausdrucks ab:

=[cmbKunden].[Spalte](2)

In diesem Beispiel trägt das Kombinationsfeld den Namen cmbKunden.

 

Kombinationsfelder sind in erster Linie dazu gedacht, vorhandene Datensätze aus der Liste auszuwählen. Von Haus aus bietet Access keine Möglichkeit, der vorhandenen Liste neue Einträge hinzuzufügen.

Es gibt allerdings Situationen, wo genau diese Möglichkeit sinnvoll und auch komfortabel wäre.
Angenommen, Sie erfassen in einer Datenbank Bücher und wählen den dazugehörigen Autor aus einem Kombinationsfeld aus, das auf einer Tabelle. Dann kann passieren, dass Sie ein Buch erfassen wollen, dessen Autor noch nicht in der Datenbank vorhanden ist.

Ändern Sie einfach die Datensatzherkunft des Kombinationsfelds, indem Sie in der zugrunde liegenden Tabelle einen neuen Datensatz anlegen

Dazu ist lediglich eine kleine Ereignisprozedur notwendig, die beim Ereignis Bei Nicht in Liste des Kombinationsfelds aufgerufen wird. In dieser Ereignisprozedur sollte noch eine Benutzerabfrage vorhanden sein, ob denn auch tatsächlich ein neuer Autor angelegt werden soll.

Private Sub CboAutor_NotInList(NewData As String, Response As Integer)

    If MsgBox("Dieser Autor ist neu. Möchten Sie ihn anlegen?", vbYesNo) = vbYes Then

        Dim db As DAO.Database
        Dim rs As DAO.Recordset 
        Set db = CurrentDb 
        Set rs = db.OpenRecordset("tblAutoren", DB_OPEN_DYNASET) 
        rs.AddNew 
        rs!txtAutor = NewData 
        rs.Update 
        Response = acDataErrAdded 
        rs.Close 
        Set rs = Nothing 
        Set db = Nothing 
    Else

            'Hier kann beispielsweise ein Tippfehler abgefangen werden
         Response = acDataErrContinue CboAutor.Undo

    End If

End Sub

Dieser Code verwendet das DAO-Objektmodell. Für das ADO-Objektmodell verwenden Sie in der Prozedur zwischen If und Else den folgenden Code:

If...

    Dim cn As ADODB.Connection 
    Dim rs As New ADODB.Recordset 
    Set cn = CurrentProject.Connection 
    rs.Open "tblAutoren", cn, adOpenDynamic, adLockOptimistic 
    rs.AddNew rs!txtAutor = NewData 
    rs.Update 
    Response = acDataErrAdded 
    rs.Close 
    Set rs = Nothing 
    Set cn = Nothing

Else ...

 

Dieser Barcode Generator ist ein VBA Modul und erstellt Barcodes für Microsoft Access ohne dass Sie zusätzlich Fonts, DLLs or plug-ins installieren müssen.

Supports multiple Linear und 2D symbologies including GS1-128, Code 39, Code 128, Interleaved 2 of 5, Postnet, OneCode, PDF417 and Data Matrix ECC200.

Einsetzbar mit Access 2000 bis Access 2007.

 

Ein Makro mit dem Namen AUTOEXEC wird automatisch beim Öffnen einer Access-Datenbank ausgeführt, weil Access automatisch danach sucht.

Verwenden Sie ein solches Autoexec-Makro, um direkt nach dem Öffnen der Datenbank bestimmte Aktionen auszuführen.

Mit einem solchen Autoexec-Makro können Sie beispielsweise:

- einen Startbildschirm anzeigen

- die Tabelleneinbindung zu BackEnd-Tabellen überprüfen lassen

- ein bestimmtes Formular öffnen

Durch Drücken der SHIFT-Taste beim Start von Access wird übrigens - sofern diese Option nicht deaktiviert ist - die Ausführung eines AUTOEXEC-Makros unterbunden

 

Verwaltet Lieferanten, Artikel und Artikelgruppen.
Verwaltet Kunden mit einer Vielzahl von Kriterien Verwaltet Bestellungen, Rechnungen, Lieferscheinen, Mahnungen und Gutschriften Offene Posten.
Verwaltung von Forderungen Halbautomatisches Mahnwesen Benutzeroberfläche im Office-Standarddesign mit Menüzeile und Symbolleiste Inklusive Quellcode.

 
Gibt es bei Access 2.0 die Möglichkeit das Kopieren einer Datei von einem bestimmten definierten Laufwerk auf ein Ziellaufwerk mit einem Makro zu automatisieren? Mit dieser VBA-Funktion können Sie eine Datei kopieren. Die Funktion nimmt zwei String-Parameter an: die Quelldatei und die Zieldatei:

Sub CopyFile (ByVal Source As String, ByVal Destination As String)

    Dim i As Integer, NumBlocks As Integer
    Dim FileLength As Long, LeftOver As Long
    Dim FileData As String

    Const BlockSize = 32768

    Open Source For Binary Access Read As #1
    Open Destination For Output As #2
    Close #2
    Open Destination For Binary As #2

    FileLength = LOF(1)
    NumBlocks = FileLength \ BlockSize
    LeftOver = FileLength Mod BlockSize
    FileData = String$(LeftOver, 32)

    Get #1, , FileData
    Put #2, , FileData

    FileData = String$(BlockSize, 32)

    For i = 1 To NumBlocks
        Get #1, , FileData
        Put #2, , FileData
    Next i

    Close #1, #2

End Sub

Bei langen Berichten kann es schon einmal lästig sein, mit Hilfe der Navigationsschaltflächen zu einer bestimmten Seite zu wechseln.

Wechseln Sie schnell zur gewünschten Seite, indem Sie die Seitennummer direkt eingeben.

Inmitten der Navigationsschaltflächen befinden sich zu diesem Zweck ein Feld, in dem die aktuelle Seitennummer angezeigt wird. Klicken Sie dieses Feld an und geben Sie die gewünschte Seitennummer ein.

 

 
Während der Testphase eines Programms ist oftmals ärgerlich, wenn alle Laufzeitfehler durch On Error-Anweisungen abgefangen werden. Schließlich möchten Sie über alle auftretenden Fehler ausführlich informiert werden. Sie finden diese Option im Register Fehlerüberprüfung des Dialogfensters Extras>Optionen. 

Die Funktion ReverseInStr sucht das LETZTE Vorkommen von strSearchString in strSourceString und liefert die gefundene Position als Integer-Wert zurück.
Falls kein Vorkommen gefunden wird, ist der Funktionswert 0.

Diese Funktion bildet Grundlage für die Parsingfunktionen zu den Beispielen

Parsingfunktion - Dateiendung lesen
Parsingfunktion - Pfadangabe
Parsingfunktion - Dateiname

Public Function ReverseInStr(strSourceString As String, strSearchString As String) As Integer

    Dim intPos As Integer
    Dim intPosSaved As Integer
    Dim strDummy As String
    Dim bolStart As Boolean

    strDummy = " " & strSourceString
    intStartPos = 1

    If strDummy = "" Or strSearchString = "" Then MsgBox ("Der zu durchsuchende Text UND der Suchstring muß angegeben werden") 
        ReverseInStr = 0
        Exit Function
    End If

    intPosSaved = 1
    ntPos = InStr(intPosSaved, strDummy, strSearchString)

    If intPos = 0 Then
        bolStart = True
    End If

    Do While intPosSaved <> 0

        If intPosSaved >= 1 Then
            If bolStart = True Then
                ReverseInStr = 0
                Exit Function
            Else
                If intPos = 0 Then
                    ReverseInStr = intPosSaved - 1
                    Exit Function
                End If
                intPosSaved = intPos
            End If
            intPos = InStr(intPosSaved + 1, strDummy, strSearchString)
            bolStart = False
        End If

    Loop

End Function

 

Access stellt Ihnen von Haus aus bereits einen gewaltigen Funktionsumfang zur Verfügung. Trotzdem stößt man vor allem beim Entwickeln von Datenbankanwendung manchmal an Grenzen.

API steht für Application Programming Interface. Das Windows-API ist eine Schnittstelle, die Ihnen den Zugriff auf interne Betriebssystem-Prozeduren von Windows erlaubt.

Typisches Beispiel dafür ist der Zugriff auf das das Datei öffnen-Dialogfeld, das immer gleich aussieht, egal ob Sie eine Datei in Access, in Excel oder in Word öffnen.

Um eine solche API-Funktion verwenden zu können, müssen Sie VBA diese erst einmal bekannt gegeben werden. Dazu wird die Funktion mit dem Schlüsselwort Declare deklariert. Durch die Deklaration teilen Sie VBA mit, wie die Funktion heißt, welche Argumente ihr zu übergeben sind, welchen Typ von Funktionswert sie zurückgibt und in welcher der DLL- Dateien von Windows sie sich befindet.

Der Deklarationsteil

Declare Function GetOpenFileName Lib "Comdlg32.dll"

gibt VBA bekannt, dass sich die Funktion GetOpenFileName in der DLL Comdlg32.dll im Windows System-Verzeichnis befindet.

Der folgende Teil

Alias "GetOpenFileNameA"

besagt, dass diese Funktion in der DLL eigentlichen unter einem anderen Namen als GetOpenFileName enthalten ist, nämlich unter ihrer eigentlich Bezeichnung GetOpenFileNameA.

Der letzte Teil der Deklaration

pOPENFILENAME As OPENFILENAME

deklariert die beim Aufruf zu übergebenden Argumente und den zurückgegebenen Funktionswert. Die Prozedur erwartet die Übergabe einer Variablen vom Typ OPENFILENAME und übergibt einen Funktionswert vom Typ Long.

Weitere Einsatzbereiche von API-Funtionen sind unter anderem:

- Abfrage von Systeminformationen
- Auslesen von Daten aus der Registry
- Schreiben von Daten in die Registry
- Änderung von Bildschirmfarben
- Auswahl von Schriften

 

Sie öffnen das Zoom-Fenster von einem beliebigen Eingabefeld aus mit der Tastenkombination Shift F2.

Bei Formularfeldern kann das Zoom-Fenster auch über das Kontextmenü aktiviert werden. Klicken Sie das Feld einfach mit der rechten Maustaste an und wählen Sie den Befehl Zoom.

 
Dieses Programmiertraining bietet Ihnen eine strukturierte Einführung in VisualBasic für Applikationen für Microsoft Access 97. Der Aufbau der einzelnen Übungen gliedert sich in drei Schritte: Unter dem Punkt Ziel wird die konkrete Aufgabe formuliert, dann zeigen wir Ihnen den Lösungsweg, auf dem Sie Schritt für Schritt zum gewünschten Erlebnis gelangen und zum Schluß sehen Sie das Ergebnis anhand eines Screenshots verdeutlicht. Tips zur Programmierung. Datenbankdesign. Trennung von Daten und Code. Variablen und Konstanten. Verzweigungen. Schleifen. Module und Funktionen. Programmierung mit Modulen. Arbeiten mit anderen Office-Applikationen. Internet und Access.

von Lothar Zeitler; Redmond (1997); Euro 19,40; ISBN: 393257527X

 
Mit dem TriniDat Kommentar-Assistenten können Sie Kopfzeilen für die verschiedenen Bereiche Ihrer VBA-Module einfügen lassen. Der Kommentar-Assistent hilft Ihnen, Ereignisprozeduren, private und öffentliche Eigenschaften, Methoden, WIN-API-Deklarationen usw. voneinander zu trennen, um die Übersichtlichkeit Ihrer Module beizubehalten.
Vollversion
 

Der PercentPosition-Eigenschaft muß eine Zahl im Bereich von 1 bis 100 übergeben werden, die die prozentuale Position des Datensatzzeigers bestimmt. Der Wert 50 positioniert also genau auf den mittleren Datensatz. Damit bei mehr als 100 Datensätzen genaue Positionierungen möglich sind, können auch Dezimalbrüche wie z.B. 44,55 zugewiesen werden. Die folgende Prozedur kann direkt im Zusammenhang mit einer Schaltfläche eines Formulars eingesetzt werden. Sie positioniert im aktuellen Formular auf den mittleren Datensatz. Optional kann auch eine andere prozentuale Position angegeben werden (z.B. 25 oder 75).

Public Sub FormProzentPos(Optional Prozent As Variant)

Dim F As Form
Dim R As Recordset

    On Error GoTo Err

    If IsMissing(Prozent) Then Prozent = 50

    Set F = Screen.ActiveForm
    Set R = F.RecordsetClone
    R.PercentPosition = Prozent

    ‘Formular mit Recordset synchronisieren
    F.Bookmark = R.Bookmark

    Exit Sub

Err:

    MsgBox "Positionierung erfolglos!"
    Exit Sub

End Sub

Bei meiner Adressverwaltung habe ich einen Etikettendruck eingebaut. Im Formular habe ich ein Listenfeld, das auf Mehrfachauswahl Erweitert eingestellt ist. Das Listenfeld enthält alle Adressen aus einer Tabelle.

Kann man mit einer Schaltfläche, die man zum Beispiel "Alle auswählen" nennt, alle Einträge der Liste markieren?

Access-97-Datenbank mit Demo-Datenbank

Ein Listenfeld hat für jeden Listeneintrag eine Eigenschaft namens Selected, die man lesen bzw. setzen kann. Wenn Sie die Mehrfachauswahl des Listenfeldes auf Einfach gesetzt haben, kann immer nur eine Selected-Eigenschaft den Wert True haben. Alle anderen Selected-Eigenschaften bleiben False.

Bei einem Listenfeld mit Mehrfach- bzw. Einzelauswahl können Sie mit einer For-Schleife alle Listeneinträge durchlaufen und die Selected-Eigenschaft auf True setzen:

Dim i As Integer

For i = 0 To Me!lstAuswahl.ListCount - 1
    Me!lstAuswahl.Selected(i) = True
Next i

Die ListCount-Eigenschaft ergibt die Anzahl der Einträge im Listenfeld.

Das Abfrageergebnis einer Union-Abfrage kann natürlich auch sortiert werden.

Beachten Sie dabei die Anordnung der ORDER BY-Klausel.

Die ORDER BY-Klausel kann nur in der zweiten Select-Anweisung verwendet werden. Das folgende Beispiel ruft Datensätze aus den Tabellen Kunden und Lieferanten ab und teilt diese im Feld Beziehung in Kunden und Lieferanten ein. Das Abfrageergebnis wird anschließend nach den Feldern Ort (absteigend) und Firma sortiert.

SELECT Ort, Firma, Kontaktperson, Position, "Kunden" AS [Beziehung] FROM Kunden

UNION SELECT Ort, Firma, Kontaktperson, Position, "Lieferanten" FROM Lieferanten ORDER BY Ort DESC, Firma;

 

Durch das Komprimieren wird die Größe der Datenbank reduziert und die Arbeitsgeschwindigkeit beschleunigt, das Reparieren hilft bei der Wiederherstellung von beschädigten Datenbanken.

Beide Funktionen können über den Menüpunkt Extras / Datenbankdienstprogramme aufgerufen werden. Dazu muss jedoch erst Access gestartet und die richtige Datei aus einem Dialog gesucht werden.

Verwenden Sie die Befehlszeilenoptionen "/Repair" und "/Compact", um eine Datenbank mittels einer Verknüpfung zu Reparieren oder zu Komprimieren.

Erstellen Sie drei neue Verknüpfungen zu Access. Ergänzen Sie bei den Eigenschaften der Verknüpfungen jeweils im Register Verknüpfung im Eingabefeld Ziel die Einträge wie folgt.

Ergänzung für Verknüpfung 1:

/Repair

Ergänzung für Verknüpfung 2:

/Compact

Ergänzung für Verknüpfung 3:

/Repair /Compact

 
This download contains the Access 2003 source code control add-in for communicating between both Microsoft Office Access 2003 Service Pack (SP) 1 and a source code control application (like Visual Source Safe 6.0). While you work with Access 2003, the add-in steps in at various points and lets you do things like add, check out, or check in Microsoft Access objects into the source code control project. Source code control integration with Microsoft Access is very similar to source code control integration with Visual Basic.
fgbsdgvsed vgfx dg 

Access stellt zwar ausgefeilte Suchen- und Ersetzen-Funktionen zur Verfügung; wenn es aber darum geht, diese Funktionen auf einzelne Zeichenketten anzuwenden, versagt Access.

Verwenden Sie in diesem Fall einfach die folgende SuchenUndErsetzen-Funktion:

Function SuchenUndErsetzen(ByVal Text As Variant, _
    Suchen As Variant, Ersetzen As Variant)

    Dim x As Integer
    Dim p As Integer
    On Error GoTo Err:

    p = Len(Suchen)

    Do x = InStr(Text, Suchen)
        If x = 0 Then Exit Do
        Text = Left(Text, x - 1) + Ersetzen + Mid(Text, x + p)
    Loop

    SuchenUndErsetzen = Text

    Exit Function

Err: 
    MsgBox Err.Description
    Exit Function

End Function

Die Funktion erwartet insgesamt drei Parameter. Unter Text muß eine Zeichenkette übergeben werden, in der die Funktion suchen und ersetzen soll. Die beiden übrigen Parameter erklären sich von selbst. Das Ergebnis der Funktion ist die veränderte Zeichenkette.

Das folgende Beispiel entfernt alle Leerzeichen aus einem Text:

SuchenUndErsetzen("Dies ist ein Text mit Leerzeichen", " ", "")

 

Hinweis
Die Musterlösung zu diesem Beitrag heißt Belegverwaltung00.mdb und funktioniert mit Access 2000 und höher. Sie finden die Datenbank und die benötigte Schriftart Barcode.ttf unten.

  1. Funktionsweise der Lösung

    Die hier vorgestellte Lösung verfolgt das Prinzip „Chaos mit Ordnung“. Jedes Dokument erhält eine eindeutige Nummer und wird danach auf einen Stapel gelegt. Die einzelnen Dokumente sind innerhalb des Stapels also in der Reihe des Eingangs abgelegt. Um nun schnell ein bestimmtes Dokument auffinden zu können, werden die einzelnen Dokumente mit einer Datenbank verwaltet, deren Aufbau Sie in diesem Artikel kennen lernen werden. 

  2. Die Datenstruktur

    Die Datenstruktur der vorgestellten Lösung besteht aus den vier Tabellen tblBelege, tblKategorien, tblAdressen und tblSeiten. Die Tabelle tblBelege speichert die einzelnen Dokumente. Sie enthält die Felder aus der folgenden Tabelle:





    Falls Sie Besitzer eines Scanners sind, können Sie das komplette Dokument als Anlage in dem Feld Anlage als OLE-Objekt hinterlegen. 
    Um auch den Empfänger und den Absender eines Belegs hinterlegen zu können und nicht jedes Mal die Adresse erfassen zu müssen, stellt die Tabelle tblAdressen die Informationen über Name, Straße, PLZ, Ort und Telefon zur Verfügung. Um auch den Empfänger und den Absender eines Belegs hinterlegen zu können und nicht jedes Mal die Adresse erfassen zu müssen, stellt die Tabelle tblAdressen die Informationen über Name, Straße, PLZ, Ort und Telefon zur Verfügung.

    Ordnung in die einzelnen Dokumente bringt die Tabelle tblKategorien, die lediglich die zwei Felder KategorieNr und Kategorie enthält. Durch die Verknüpfung zur Tabelle tblBelege kann jedes Dokument auf einen virtuellen Stapel wie beispielsweise „Handy-Abrechnung“, „Bewirtung“ oder „Kreditkartenabrechnung“ gelegt werden. Die Verknüpfung der Tabellen entnehmen Sie Abb. 1.
    Abb. 1: Das ER-Diagramm
    Um die spätere Erstellung von Formularen zu vereinfachen, sind die beiden Felder AdresseNr und KategorieNr der Tabelle tblBelege als Nachschlagefelder definiert. Hierzu gehen Sie wie folgt vor: step by step

    1. Öffnen Sie die Tabelle tblBelege in der Entwurfsansicht und positionieren Sie die Einfügemarke auf das Feld AdresseNr.
    2. Wechseln Sie unterhalb der Tabelle zum Register Nachschlagen.
    3. Wählen Sie unter Steuerelement anzeigen die Einstellung Kombinationsfeld aus.
    4. Geben Sie unter Datensatzherkunft die folgende Abfrage an: SELECT Name, AdresseNr FROM tblAdressen ORDER BY Name;
    5. Ändern Sie die Eigenschaften Gebundene Spalte und Spaltenanzahl auf den Wert 2.
    6. Geben Sie als Spaltenbreite den Wert 5cm;0cm ein. 

    Auf die gleiche Weise definieren Sie für das Feld KategorieNr ein Nachschlagefeld. Verwenden Sie in diesem Fall jedoch die folgende Abfrage:

    SELECT Kategorie, KategorieNr FROM tblKategorien ORDER BY Kategorie;

    Speichern Sie anschließend die fertige Tabelle.

  3. Dokumente nummerieren

    Ein wesentlicher Bestandteil der hier vorgestellten Lösung ist, dass alle Dokumente mit einer eindeutigen Nummer versehen werden. Um die Nummer nicht von Hand auf das Dokument schreiben zu müssen, soll diese Aufgabe von Ihrem Drucker erledigt werden. Hierzu werden die Belege einfach in den Papiereinzug gelegt und der Drucker versieht diese mit der Nummer.

    Damit die Nummer immer sichtbar ist, wird sie in jeder Ecke und zudem noch invertiert ausgegeben. Zusätzlich zu der Nummer soll ein Barcode mit ausgegeben werden. Falls Sie also einen Barcode-Scanner haben sollten, können Sie einzelne Dokumente sehr schnell durch einfaches Scannen des Barcodes zuordnen.

    Den Ausdruck der Nummer und des Barcodes erledigt ein Berichts namens rptIndex. Der Bericht enthält im Seitenkopf und im Seitenfuß jeweils links und rechts zwei Text- Steuerelemente zur Ausgabe der Nummer und des Barcodes (s. Abb. 2).

    Falls Sie einen mehrseitigen Beleg haben, sollte die Nummer auf jeder Seite ausgegeben werden und idealerweise noch mit einer fortlaufenden Seitennummer versehen werden. Um diese zu realisieren, ist der Bericht an die Tabelle tblSeicomputer. haufe.de Access im Unternehmen Musterlösung Belege mit Barcodes verwalten 43 ten geknüpft. Diese Tabelle enthält nur eine einzelne Spalte namens SeiteNr. Damit für jeden Datensatz in der Tabelle tblSeiten eine Berichtsseite gedruckt wird, ist die Eigenschaft Neue Seite des Detailbereichs auf Vor Bereich eingestellt. Um nun eine bestimmte Anzahl Seiten zu drucken, muss die Tabelle tblSeiten zunächst mit der erforderlichen Anzahl Datensätze gefüllt werden. Dies erledigt die VBAProzedur SeitenErstellen (s. Quellcode 1).

    Abb. 2: Der Bericht rptIndex in der Entwurfsansicht. Sub SeitenErstellen(Anzahl As Integer) Dim i As Integer Dim MyRecordset As New ADODB.Recordset Dim AnzahlExistierendeSeiten As Long AnzahlExistierendeSeiten = DCount("SeiteNr", _ "tblSeiten") If AnzahlExistierendeSeiten < Anzahl Then With MyRecordset .ActiveConnection = _ CurrentProject.Connection .LockType = adLockOptimistic .CursorLocation = adUseClient .Source = "tblSeiten" .Open For i = 1 To _ Anzahl - AnzahlExistierendeSeiten .AddNew !SeiteNr = AnzahlExistierendeSeiten + i .Update Next i End With End If End Sub Quellcode 1 Access im Unternehmen computer.haufe.de Musterlösung Belege mit Barcodes verwalten 44

    Die Prozedur erwartet als Parameter die Anzahl der gewünschten Seiten. Sie prüft zunächst, ob die Tabelle bereits mindestens die angegebene Anzahl an Datensätzen enthält. Sollte dies nicht der Fall sein, fügt sie die fehlenden Seiten hinzu. Der Bericht wird später mit einem Filterkriterium wie beispielsweise

    SeiteNr <= 10

    geöffnet. Hierdurch stellt es kein Problem dar, wenn die Tabelle mehr Datensätze enthält, als für den Ausdruck erforderlich sind. Sie finden die fertige Prozedur im Modul modTools der Beispieldatenbank zu diesem Artikel. Wie bereits erwähnt, erfolgt der Ausdruck der Nummer und des Barcodes in allen vier Ecken jeder Seite. Um dies zu erreichen, platzieren Sie jeweils im Seitenkopf und im Seitenfuß insgesamt acht Textfelder. Vier davon sind für die Nummer, die anderen vier für die Barcodes reserviert.

    Damit die korrekte Nummer ausgegeben werden kann, muss der Bericht an die Tabelle tblBelege gebunden sein. Zusätzlich ist aber auch eine Bindung an die Tabelle tblSeiten erforderlich, um den Ausdruck mehrerer Seiten zu ermöglichen.

    Um dieses Problem zu lösen, fügen Sie der Datenquelle des Berichts einfach beide Tabellen hinzu, ohne diese zu verknüpfen (s. Abb. 3).
    Abb. 3: Die Datenquelle des Berichts besteht aus zwei nicht verknüpften Tabellen.

    Durch die fehlende Verknüpfung bildet Access einen „Cross-Join“. Dies bedeutet, dass zu jedem Datensatz aus der Tabelle tblSeiten alle Datensätze aus der Tabelle tblBelege ausgegeben werden. Wenn jede Tabelle beispielsweise zehn Datensätze enthält, würde das Abfrageergebnis aus insgesamt 100 Datensätzen bestehen.

    Als Ergebnis der Abfrage reichen die beiden Felder SeiteNr und BelegNr aus. Beim Öffnen des Berichts muss nun lediglich noch die BelegNr entsprechend gefiltert werden.

  4. Ausgabe der Nummer

    Da zusätzlich zur Beleg-Nummer auch die Seitennummer ausgegeben werden soll, bietet sich die Definition eines Formats an. In dieser Lösung ist die Entscheidung auf das Format

    00000-0000

    gefallen, wobei der erste Teil vor dem Bindestrich die Belegnummer und der zweite Teil die Seitennummer darstellt. Die Formatierung übernimmt die VBA-Prozedur GetPageID, die Sie ebenfalls im Modul modTools der Beispieldatenbank finden:

    Public Function GetPageID(BelegNr As _
        Variant, SeiteNr As Variant) _
        As String

        GetPageID = Format(BelegNr, _
        "00000") + "-" + Format(SeiteNr, _
        "0000")

    End Function

    Die Prozedur erwartet als Parameter die Belegnummer und die aktuelle Seitennummer. Daraus bildet sie dann das vorgestellte Format.

    Zum Einsatz kommt die Prozedur in den vier Text-Steuerelementen, die zur Anzeige der Nummer reserviert sind. Hierzu tragen Sie den folgenden Ausdruck in die Steuerelementinhalt- Eigenschaft des Textfeldes ein:

    =GetPageID([BelegNr];[SeiteNr])

    Zusätzlich sollten Sie das Textfeld noch mit einer weißen Schriftfarbe und einem schwarzen Hintergrund formatieren. Durch diese invertierte Darstellung kann der Text später besser entziffert werden (s. Abb. 4).
    Abb. 4: Invertierte Formatierung des Textfeldes 

    Das Eintragen des Ausdrucks und die Formatierung wiederholen Sie für alle vier Textfelder.

  5. Ausgabe des Barcodes

    Die Ausgabe des Barcodes erfolgt direkt unterhalb der Belegnummer in einem weiteren Textfeld. Zur Darstellung des Barcodes kommt ein spezieller Font namens Barcode Universal zum Einsatz. Sie finden diesen Font auf der CD. Zur Installation des Fonts gehen Sie wie folgt vor:

    step by step
    1. Öffnen Sie die Systemsteuerung von Windows.
    2. Öffnen Sie von hier aus den Ordner Schriftarten.
    3. Ziehen Sie die Datei Barcode.tft von der CD in den Ordner Schriftarten. 

    Der Font enthält lediglich drei Zeichen: Einen langen Strich, einen kurzen Strich sowie einen weißen Strich als Leerzeichen. Die drei Zeichen werden durch die Ziffern 0, 1 und 2 repräsentiert.

    Durch entsprechende Kombination dieser drei Zeichen lassen sich fast alle eindimensionalen Barcodes wie etwa Code39 oder EAN darstellen.

    Da die Seitennummer in unserem Fall einen Bindestrich – also ein Sonderzeichen – enthält, fällt die Wahl auf den Code39.

    Um den Barcode innerhalb des Textfeldes darzustellen, wählen Sie über die Schriftart- Eigenschaft des Textfeldes den Font Barcode Universal aus. Als Steuerelementinhalt- Eigenschaft geben Sie den folgenden Ausdruck ein (s. Abb. 5):

    =Barcode_Code39(GetPageID([BelegNr];[Seit eNr]))

    Die Ihnen bereits bekannte Funktion GetPageID erzeugt die fertig formatierte Seitennummer und gibt diese anschließend an die Funktion Barcode_ Code39. Diese erzeugt daraus eine Folge von Nullen und Einsen, die bei Formatierung mit dem Font Barcode Universal einen Barcode ergeben. Sie finden die Prozedur im Modul Code39 der Beispieldatenbank.
    Abb. 6: Ein fertiger Barcode

    Damit der Barcode nicht zu klein dargestellt wird, erhöhen Sie die Schriftgröße abschließend mit Hilfe der Schriftgrad-Eigenschaft auf einen Wert von 35 (s. Abb. 6). Alle Einstellungen nehmen Sie wieder viermal vor.
  6. Erfassen eines neuen Belegs Um nun einen Beleg mit der Seitenindizierung zu versehen, müssen folgende Schritte durchgeführt werden:  Abb. 5: Das Barcode-Textfeld

    Anlegen eines neuen Datensatzes in der Tabelle tblBelege
    Anlegen der erforderlichen Datensatzanzahl in der Tabelle tblSeiten 
    Öffnen des Berichts rptIndex zum Ausdruck der Beleg- und Seitennummern

    Diese Aufgaben werden von dem Formular frmNeuerBeleg übernommen (s. Abb. 7). Das Formular basiert auf der Tabelle tblBelge. Damit nur die Erfassung neuer Datensätze möglich ist, ist die Eigenschaft Daten eingeben auf Ja eingestellt.

    Die OK-Schaltfläche löst die Ereignisprozedur aus:

    Private Sub btnOK_Click()

        On Error Resume Next

        Dim Anzahl As Integer

        Anzahl = CInt(Me!Seitenanzahl)

        DoCmd.RunCommand acCmdSaveRecord

        SeitenErstellen (Anzahl)

        DoCmd.OpenReport "rptIndex", acViewPreview, , "SeiteNr<=" & CStr(Anzahl) _
            & " AND DokumentNr=" + CStr(Me!DokumentNr)

    End Sub


    Zunächst wird die Anzahl der eingegebenen Seiten ermittelt und in der Variablen Anzahl zwischengespeichert. Anschließend wird der Datensatz gespeichert und die Tabelle tblSeiten mit der erforderlichen Anzahl an Datensätzen aufgefüllt.

    Die letzte Anweisung öffnet schließlich den Bericht in der Seitenvorschau. Mit einem Filter wird hierbei sowohl die Belegnummer als auch die Seitenanzahl eingeschränkt.

    Nachdem der Bericht in der Seitenvorschau (s. Abb. 8) angezeigt wird, kann der Benutzer den Beleg in den Drucker einlegen und den Ausdruck starten.
  7. Das Suchformular Um ein Dokument schnell wieder auffinden zu können, ist ein entsprechendes Suchformular erforderlich. Dieses trägt den Namen frmBelegsuche (s. Abb. 9).

    Abb. 7: Das Formular frmNeuerBeleg Abb. 8: Der Bericht in der Seitenvorschau 

    Das Formular besteht aus einem Haupt- und einem Unterformular. Im Hauptformular können über vier Felder Suchkriterien eingegeben werden. Nach einem Klick auch Suchen wird das Ergebnis im Unterformular angezeigt.

    Die vier Felder zur Eingabe der Suchkriterien tragen die Namen txtSuchBelegNr, cmbSuchAdresseNr, cmbSuchKategorieNr und txtSuchKurzbezeichnung. Die beiden Kombinationsfelder zur Auswahl der Kategorie und der Adresse sind zur Anzeige der Daten aus der jeweiligen Tabelle konfiguriert.

    Die Einstellungen entsprechen denen, die Sie bereits bei der Konfiguration der Nachschlagefelder zu Beginn dieses Artikels kennen gelernt haben.

    Die Schaltfläche Suchen ist mit der folgenden Ereignisprozedur aus:

    Private Sub btnSuchen_Click()

            Dim BelegNr As Long

            BelegNr = GetBelegNr(Me.txtSuchBelegNr)

            Dim SQL As String 

                SQL = "SELECT * FROM tblBelege WHERE 1=1"

            If BelegNr <> 0 Then SQL = SQL & " AND BelegNr=" & BelegNr

            If Not IsNull(Me.cmbSuchAdresseNr) Then _

                SQL = SQL & " AND AdresseNr=" & Me.cmbSuchAdresseNr

            If Not IsNull(Me.cmbSuchKategorieNr) Then _

                SQL = SQL & " AND KategorieNr=" & Me.cmbSuchKategorieNr 

            If Not IsNull(Me.txtSuchKurzbezeichnung) Then _

                SQL = SQL & " AND Kurzbezeichnung LIKE '*" & Me.txtSuchKurzbezeichnung & "*'"

            SQL = SQL & " ORDER BY Belegdatum"

            Me.Sub.Form.RecordSource = SQL
           
            Me.Sub.Form.Requery

    End Sub
    Quellcode 3

    Im ersten Schritt wird die eingegebene Belegnummer ermittelt und in der Variablen BelegNr zwischengespeichert. Die Funktion GetBelegNr lernen Sie gleich noch kennen.

    Abb. 9: Das Formular zur Suche nach Belegen 

    Anschließend wird eine SQL-Abfrage zusammengestellt. Hierbei wird pro Kriterium geprüft, ob ein Wert vorhanden ist. Sollte dies der Fall sein, wird der entsprechende Filter-Ausdruck mittels AND-Schlüsselwort hinzugefügt. Abschließend erfolgt noch eine Sortierung nach dem Belegdatum.

    Die fertige SQL-Anweisung wird schließlich dem Unterformular als Datensatzherkunft übergeben.

    Falls Ihnen ein Barcode-Lesegerät zur Verfügung steht und Sie den Barcode eines Belegs scannen, wird dieser inklusive Seitennummer eingelesen.

    Die Funktion GetBelegNr trennt die beiden Teile voneinander, sodass eine Suche nach der Belegnummer erfolgen kann.

    Public Function GetBelegNr(Eingabe As Variant) As Long

        On Error GoTo Fehler

        If IsNull(Eingabe) Then

            GetBelegNr = 0

        Else

            Dim pos As Integer

            pos = InStr(1, Eingabe, "-")

            If pos = 0 Then

                GetBelegNr = CInt(Eingabe)

            Else

                GetBelegNr = CInt(Left(Eingabe, pos - 1))

            End If

        End If

        Exit Function

    Fehler:

            GetBelegNr = 0

            Exit Function

    End Function


    Zuerst wird geprüft, ob überhaupt eine Eingabe vom Benutzer gemacht wurde; wenn nicht, gibt die Funktion den Wert 0 zurück und beendet die Abarbeitung.

    Anschließend ermittelt die InStr-Funktion die Position des Bindestrichs. Falls die Positionsermittlung erfolgreich ist, wird der erste Teil abgeschnitten und als Funktionsergebnis zurückgegeben. Wenn kein Bindestrich vorhanden ist, wird die komplette Eingabe in eine Zahl umgewandelt und zurückgegeben. Zu guter Letzt sorgt noch eine Fehlerbehandlungsroutine dafür, dass bei unsinnigen Eingaben wie zum Beispiel Texten der Wert 0 zurückgegeben wird.

    5.1 Detailansicht von Dokumenten In der Ergebnisliste werden nicht alle Informationen zu den einzelnen Dokumenten dargestellt. Um alle Details zu einem bestimmten Dokument anzuzeigen, steht das Formular frmBelege zur Verfügung. Hierbei handelt es sich um ein einfaches Formular, das mit dem Formular-Assistenten erstellt wurde (s. Abb. 10).

    Das Öffnen des Formulars erfolgt von dem Formular frmBelegsuche-Sub aus, das als Unterformular in dem Suchformular platziert ist. Die Beim Doppelklicken-Ereigniseigenschaft ist hierbei mit der folgenden VBA-Prozedur verknüpft:

    Private Sub BelegNr_DblClick(Cancel _

        As Integer)

        DoCmd.OpenForm "frmBelege", _

        acNormal, , "BelegNr=" _

        & CStr(Me!BelegNr) 

    End Sub

    Die Prozedur öffnet das Formular frmBelege und filtert hierbei den gewünschten Datensatz heraus.
  8. Zusammenfassung und Ausblick Die hier vorgestellte Lösung kann noch weiter optimiert werden, indem beispielsweise ein Scanner eingesetzt wird, der automatisch PDFDateien erzeugt und diese auch gleich per OCR in Text umwandelt. Idealerweise wird hierbei auch die Indexnummer in Text umgewandelt, sodass Sie diese beispielsweise im Rahmen der Volltextsuche verwenden können.

    Wenn Ihnen der Aufdruck der Nummern mit Hilfe des Druckers zu umständlich ist, können Sie alternativ auch einen Paginierstempel einsetzen. Dieser hat ein Zählwerk, womit bei jedem Stempelvorgang weitergezählt wird.

    Abb. 10: Das Formular frmBelege
     

    Mit ihnen können diese Elemente nach der Veröffentlichung sowie Datenzugriffsseiten angezeigt werden. Falls Sie bereits Microsoft Office FrontPage 2003, Microsoft Office Access 2003 und Microsoft Office Excel 2003 installiert haben, können Sie mit Office Web Components interaktive Daten als Teil einer Webseite veröffentlichen. In Verbindung mit Microsoft Internet Explorer, Version 5.01 oder höher, können Sie mithilfe von Office Web Components ein auf einer Webseite veröffentlichtes Steuerelement (Kalkulationstabelle, Diagramm oder Datenbank) sowie Datenzugriffsseiten anzeigen.

    Die Grundlage, um unbeabsichtigte Änderungen zu verhindern, stellt ein Makro mit dem Namen ÄnderungBestätigen dar. Das Makro hat den folgenden Aufbau:

    Bedingung Aktion
    Meldung("Änderung übernehmen?";1) = 2 AbbrechenEreignis
    ... Tastaturbefehle

    Für das Aktionsargument Tastenfolge der Tastaturbefehle-Aktion geben Sie folgenden Ausdruck an:

    {ESC}

    Beachten Sie bei der Eingabe des Makros, dass Sie vor der Aktion Tastaturbefehle die drei Punkte der Spalte Bedingungen nicht vergessen. Diese bewirken nämlich, dass die Ausführung der Tastaturbefehle-Aktion ebenfalls von der Bedingung der vorhergehenden Aktionszeile abhängig ist. Sollte die Spalte Bedingungen bei Ihnen nicht sichtbar sein, können Sie diese über den gleichnamigen Befehl des Menüs Ansicht einblenden.

    Nachdem Sie das fertige Makro gespeichert haben, öffnen Sie das Eigenschaftenfenster des Steuerelements, dessen Änderungen überwacht werden sollen. Tragen Sie nun unter der Vor Aktualisierung-Eigenschaft den Namen des Makros, also - ÄnderungBestätigen - ein.

    Zum Test wechseln Sie in die Formularansicht und nehmen an dem Steuerelement eine Änderung vor. Nachdem Sie zu einem anderen Steuerelement gewechselt haben, erscheint folgendes Meldungsfenster: siehe Abbildung 1.

    Wenn Sie auf Abbrechen klicken, bricht das Makro zunächst das Speichern des Feldinhaltes mittels AbbrechenEreignis-Aktion ab. Anschließend wird der ursprüngliche Inhalt des Steuerelements durch simuliertes Betätigen der [Esc]-Taste wiederhergestellt

     

    Oftmals genügt es nicht, Daten nur nach einem Feld zu sortieren. Wenn Sie eine Adressliste besitzen, wollen Sie die Adressen vielleicht zuerst nach dem Nachnamen, und wenn mehrere Personen den gleichen Nachnamen besitzen, diese noch zusätzlich nach dem Vornamen sortieren. Eine solche Sortierung wird mehrstufige Sortierung genannt. Wenn Sie im Datenblatt zuerst die Spalte Name sortieren und dann die Spalte Vorname, ist die Spalte Name anschließend wieder unsortiert. Diese Methode führt also nicht zum gewünschten Ergebnis.

    Um mehrere Spalten gleichzeitig markieren zu können, müssen diese Spalten nebeneinander im Datenblatt liegen. Verschieben Sie die Spalten im Datenblatt also so, dass ganz links die Spalte ist, nach der zuerst sortiert werden soll, rechts davon die Spalte für die erste Untersortierung usw. Markieren Sie dann diese Spalten, indem Sie auf die Spaltenüberschrift der ersten Spalte klicken und den Mauszeiger über die restlich Spalten ziehen. Wählen Sie dann über die Symbolleiste eine auf- oder absteigende Sortierung aus.

    Im Gegensatz zu Abfragen, kann eine mehrstufige Sortierung im Datenblatt nur für alle Felder gleich entweder auf- oder absteigend definiert werden.

     
    Zweck Taste(n)
    Auswahl in die Zwischenablage kopieren Strg+C
    Auswahl in die Zwischenablage ausschneiden Strg+X
    Inhalts der Zwischenablage an der Einfügemarke einfügen Strg+V
    Auswahl oder Zeichen links von der Einfügemarke löschen Rücktaste
    Auswahl oder Zeichen rechts von der Einfügemarke löschen Entf
    Alle Zeichen rechts von der Einfügemarke löschen Strg+Entf

    Tastenkombinationen für den Befehl Rückgängig

    Zweck Taste(e)
    Rückgängig Eingabe Strg+Z oder Alt+Rücktaste
    Rückgängig Änderungen im aktuellen Feld Esc

    Dateneingabe in der Datenblatt- oder Formularansicht

    Zweck Taste(n)
    Aktuelles Datum einfügen Strg+Semikolon (;)
    Aktuelle Uhrzeit einfügen Strg+Doppelpunkt (:)
    Standardwert für ein Feld einfügen Strg+Alt+Leertaste
    Wert aus demselben Feld im vorherigen Datensatz einfügen Strg+Apostroph (')
    Neuen Datensatz hinzufügen Strg+Pluszeichen (+)
    Aktuellen Datensatz löschen Strg+Minuszeichen (-)
    Änderungen am aktuellen Datensatz speichern Umschalt+Eingabetaste
    In einem Kontrollkästchen oder Optionsfeld zwischen den Werten wechseln Leertaste
    Neue Zeile einfügen Strg+Eingabetaste

    Aktualisierung von Feldern mit Daten

    Zweck Taste(n)
    Alle Felder im Fenster neu berechnen F9
    Abfrage der zugrunde liegenden Tabellen erneut ausführen Umschalt+F9
    Inhalts eines Listen- oder Kombinationsfelds aktulisieren F9
     

    Ein häufig gespeicherter Wert in Access-Datenbanken sind Geburtsdaten.

    Verwenden Sie eine benutzerdefinierte Funktion, um das Alter aus einem Geburtsdatum zu berechnen.

    Function fctAlter(Geburtsdatum As Variant) As Variant
       
        On Error GoTo Err_fctAlter

        If IsDate(Geburtsdatum) Then
            If DateSerial(Year(Date), Month(Geburtsdatum), Day(Geburtsdatum)) > Date Then
                'Der Geburtstag war in diesem Jahr noch nicht
                fctAlter = Year(Date) - Year(Geburtsdatum) - 1
            Else
                'Der Geburtstag war in diesem Jahr schon 
                fctAlter = Year(Date) - Year(Geburtsdatum)
            End If
        End If

    Exit_fctAlter
        Exit Function

    Err_fctAlter
        MsgBox Err.Number & " " & Err.Description, vbCritical Resume Exit_fctAlter

    End Function

    Diese Funktion wendet die eingebauten Access-Funktionen DateSerial, Year, Month und Date auf ein übergebenes Geburtsdatum an und berechnet daraus das Alter. Wichtig dabei ist die Unterscheidung, ob der Geburtstag im aktuellen Jahr schon stattgefunden hat oder nicht. Mit Hilfe dieser Funktion können Sie anschließend in einer Abfrage mit dem Ausdruck Alter: fctAlter(datGeburt) in einem berechneten Feld das Alter anzeigen lassen.

     

     

    Bei der Definition einer Prozedur werden die einzelnen Argumente zusammen mit ihren Datentypen hinter dem Prozedurnamen aufgelistet.

    Oft hängt die Anzahl der erforderlichen Argumente jedoch von der aktuellen Situation ab.

    Verwenden Sie in diesem Fall einfach ein Parameter-Array, um beliebig viele Parameter zu übergeben.

    Jede Prozedur kann genau ein Parameter-Array enthalten, das mit dem Schlüsselwort ParamArray gekennzeichnet wird.

    Die folgende Prozedur verwendet ein solches Parameter-Array, um zu überprüfen, ob bestimmte Zeichenketten innerhalb eines Textes enthalten sind:

    Function TextInString(Text As String, ParamArray Teilstrings() As Variant) As Boolean

        Dim Teilstring As Variant

        TextInString = False 
        For Each Teilstring In Teilstrings

            If InStr(Text, Teilstring) <> 0 Then 
                TextInString = True 
                Exit Function 
            End If 

        Next Teilstring

    End Function

    Der Prozedur wird als erstes Argument ein Text übergeben. Diesem folgen beliebig viele weitere Teilstrings. Die Prozedur gibt True zurück, wenn einer dieser Teilstrings in dem Text enthalten ist.

    Das Ergebnis des folgenden Ausdrucks ist dementsprechend True:

    TextInString("Über diesen Text läßt sich streiten", "ä", "ö", "ü")

     

    Eine Anforderung an Abfragen kann die Berechnung einer laufenden Summe sein. Verwenden Sie die Funktion DomSumme zur Berechnung einer laufenden Summe. Das folgende Beispiel verwendet die Beispiel-Datenbank Nordwind. Ziehen Sie die Tabelle Bestellungen in den Abfrageentwurf. Wählen Sie das Feld Personal-ID aus und vergeben Sie den Aliasnamen Mitarbeiter.

    Mitarbeiter: Personal-Nr

    Klicken Sie auf das Symbol Funktionen in der Symbolleiste und wählen Sie im Feld Funktionen den Eintrag Gruppierung aus. Dadurch wird jeder Mitarbeiter nur einmal angezeigt.

    Geben Sie in das nächste Feld folgenden Ausdruck ein:

    Laufende Summe: Format(DomSumme("Frachtkosten";"Bestellungen";"[Personal-
    Nr]<=" & [Mitarbeiter] & "");"0.000,00 Euro")

    Wählen Sie für dieses Feld folgende Einstellung aus:

    Funktion: Ausdruck

     
    Das fullAccess Euro-Control bietet Ihnen eine Technik, mit der Sie Ihre Access-Anwendung im Handumdrehen Euro-Fähig machen. Hierbei kommen nur die Hausmittel von Access und keine problematischen ActiveX-Steuerelemente zum Einsatz. Pro Formular können Sie die gewünschte Währung während der Dateneingabe auswählen und beliebig oft umschalten. Die erforderlichen Funktionen können Sie mit geringen Aufwand in Ihre eigenen Formulare integrieren.
    Euro Control

    Ob man ihn nun feiern will oder nicht, der Geburtstag ist und bleibt ein besonderer Tag im Leben eines Menschen. Da Sie Ihre Adressen in der Regel täglich einsehen, wäre es doch schön, wenn Sie die Datenbank bei jedem Start auf die aktuellen Geburtstage aufmerksam machen könnte.

    Mit einer Abfrage veranlassen Sie Ihre Datenbank, Sie rechtzeitig über die anstehenden Geburtstage zu informieren.

    Das genügt aber noch nicht ganz. Da Sie sich eventuell mit einer Postkarte melden wollen und die Datenbank ggf. an einigen Tagen doch nicht einsehen, sollte sie möglichst schon eine Woche vorher die kommenden Geburtstage ankündigen. Damit bei längerer Abwesenheit auch eine verspätete Gratulation erfolgen kann, sind zusätzlich die Geburtstage der zurückliegenden 7 Tage anzuzeigen.

    Diese Aufgabe ist aufgrund der Besonderheiten beim Jahreswechsel nicht so einfach zu lösen, wie es zunächst klingt. Da die Abfrage ausgehend vom Tagesdatum die Geburtstage der vergangenen und der kommenden 7 Tage ermitteln soll, benötigen Sie zwei Ausdrücke, die ausgehend vom Tagesdatum jeweils die untere und die obere Grenze des Betrachtungszeitraums berechnen. Fügen Sie Ihrer Abfrage zunächst eine Spalte mit folgendem Ausdruck hinzu:

    UntereGrenze: DatSeriell(Jahr(Datum()-7);
    Monat([Geburtstag]);Tag([Geburtstag]))

    Wenn Sie Ihre Abfrage am 30.12.95 ausführen und das Feld Geburtstag den Wert 2.1.69 hat, zieht Access zunächst 7 Tage vom Tagesdatum, also dem 30.12.95 ab, bevor es die Jahreszahl ermittelt.

    Das Ergebnis der DatSeriell-Funktion ist daher der 2.1.95, was deutlich mehr als 7 Tage vom Tasgesdatum entfernt ist. Die Spalte UntereGrenze löst die Jahreswechselproblematik also nur für den Fall, dass die Abfrage kurz nach dem Jahreswechsel, also beispielsweise am 3.1.95, ausgeführt wird und ein Geburtstag auf ein Datum am Ende eines Jahres, also beispielsweise den 30.12.95, fällt. Hier zieht Access 7 Tage vom 3.1.95 ab und berechnet so den 27.12.94, also die Jahreszahl 1994. Die DatSeriell-Funktion ermittelt dann das Geburtstagsdatum 30.12.94, das ganz klar weniger als 7 Tage vom Tagesdatum, also dem 3.1.95 entfernt ist.

    Deshalb benötigen Sie noch eine weitere Spalte für die obere Grenze des Betrachtungszeitraums. Geben Sie dazu den folgenden Ausdruck ein:

    ObereGrenze: DatSeriell(Jahr(Datum()+7);
    Monat([Geburtstag]);Tag([Geburtstag]))

    In diesem Fall werden vor der Berechnung des Jahres 7 Tage zum Tagesdatum addiert. Bei den Gegebenheiten aus dem weiter oben genannten Beispiel addiert Access zunächst sieben Tage zum Tagesdatum, also dem 30.12.1995 und ermittelt so das Datum 06.01.96. Da der Geburtstag am 2.1.69 ist, berechnet die DatSeriell-Funktion das Datum 2.1.96. Auch dieses Datum liegt weniger als 7 Tage vom Tagesdatum entfernt und die entsprechende Person erscheint im Abfrageergebnis.

    Damit das auch richtig funktioniert, müssen Sie natürlich für die Spalten UntereGrenze und ObereGrenze folgendes Kriterium eingeben:

    Zwischen (Datum()-7) Und (Datum()+7)

    Da Access Kriterien in derselben Zeile Und-Verknüpft, Sie aber bereits wissen, dass sich die Kriterien der beiden Spalten UntereGrenze und ObereGrenze ausschließen, müssen Sie das Kriterium der Spalte ObereGrenze in die zweite Zeile, die im Abfrageentwurf mit oder beschriftet ist, eintragen. Zusätzlich müssen Sie in dieser Zeile das Kriterium Ist Nicht Null für die Spalte Geburtstag eingeben. Siehe Abbildung 1.

    Sie verfügen dann über zwei Kriterienzeilen, die Access mit einem logischen Oder verknüpft. Die erste Zeile enthält die Kriterien für die Spalten Geburtstag und UntereGrenze und die zweite Zeile die Wiederholung des Kriteriums für die Spalte Geburtstag und ein zweites Kriterium für die Spalte ObereGrenze.

    Damit haben Sie das Jahreswechselproblem gelöst, und Sie können die Abfrage erst einmal ausgiebig testen. Verwenden Sie einfach die Systemsteuerung von Windows, um die Abfrage mit verschiedenen Tagesdaten auszuführen. Geben Sie vorher insbesondere ein paar Test-Geburtstage in der Nähe des Jahreswechsels ein. Wenn der Test abgeschlossen und Sie mit dem Ergebnis zufrieden sind, können Sie die Anzeige-Kriterien für die Spalten UntereGrenze und ObereGrenze löschen. Sie stören dann das Erscheinungsbild des Abfrageergebnisses nicht mehr und die Abfrage funktioniert trotzdem einwandfrei.

    Bei der Ausführung der Abfrage fällt auf, dass Access die Geburtstage unsortiert anzeigt. Wünschenswert wäre jedoch eine Sortierung nach Monaten und Tagen, die die Jahreszahl unberücksichtigt läßt. So würden die Geburtstage in der Reihenfolge erscheinen, wie Sie im laufenden Jahr auch stattfinden. Auch dieses Problem können Sie über eine berechnete Spalte und der DatSeriell-Funktion lösen. Der Ausdruck lautet wie folgt:

    Sortierung: DatSeriell(0;Monat([Geburtstag]);
    Tag([Geburtstag])))

    In diesem Fall werden alle Geburtstage auf dieselbe Jahreszahl 0 transformiert. Sie können aber auch jede beliebige andere Konstante als Jahreszahl einsetzen. Wichtig ist aber, daß Sie für diese Spalte die aufsteigende Sortierung auswählen. Da die Berechnungsergebnisse nur zur Sortierung benötigt werden, sollten Sie das Anzeige-Kriterium für die Spalte löschen.

     

     

    Das Windows-API stellt eine Funktion zur Verfügung, die alle vorhandenen Laufwerke als Zahl des Typs Long zurückgibt. Die 26 rechts ausgerichteten Bits der zurückgegebenen Zahl stellen die 26 gültigen Laufwerke dar. Wenn ein Bit auf 1 gesetzt ist, ist das betreffende Laufwerk vorhanden.

    Durch Einsatz der folgenden Schleife prüfen Sie jedes Bit der Zahl:

    Dim i As Integer

    For i = 0 To 25

        If Zahl And 1 Then
            ' Laufwerknummer ist anwesend
        End If 

        'Zahl ein Bit nach rechts verschieben, um nächste Laufwerk zu prüfen 
        Zahl = Zahl \ 2

    Next i

    Um die Zahl aus der Win-API zu ermitteln, benötigen Sie die Funktion GetLogicalDrives, die wie folgt deklariert wird.

    Declare Function GetLogicalDrives Lib "kernel32" () As Long

    Eine Funktion, die alle verfügbaren Laufwerke als Buchstaben im Testfenster anzeigt, würde dann folgendermaßen aussehen:

    Public Function LaufwerkeAnzeigen()

    Dim lLaufwerke As Long, i As Integer

        lLaufwerke = GetLogicalDrives() ' logische Laufwerke ermitteln

        For i = 0 To 25

            If lLaufwerke And 1 Then ' Laufwerknummer ist anwesend
                Debug.Print Chr$(65 + i) & ": " ' Laufwerkbuchstaben anzeigen
            End If

            ' Wert ein Bit nach rechts verschieben, 
            'um nächste Laufwerknummer zu prüfen

            lLaufwerke = lLaufwerke \ 2

        Next i

    End Function

     

    Ihre lang recherchierten und schön formatierten Berichtsdaten müssen nicht ausschließlich auf Papier landen, sondern sie können auch in andere Office-Anwendung exportiert werden.

    In der Seitenansicht können Sie einen Bericht beispielsweise an WinWord übergeben, um ihn dort weiterzuformatieren oder zwecks Weitergabe als Datei zu speichern.

    Den Export eines bewerkstelligen Sie über den Menübefehl Extras / OfficeVerknüpfungen. Wählen Sie hier die gewünschte Anwendung aus.

    Die Menübefehle befinden sich übrigens auch in der Symbolleiste. Nach WinWord exportierte Berichte werden in das RTF (Rich Text Format) konvertiert und automatisch geladen, während die Übergabe an Excel im XLS-Format erfolgt

     

    Sie können die Spezialtasten von Access sperren, indem Sie den Menüpunkt Extras>Start wählen. Im unteren Teil des Dialogs wird die Option Access-Spezieltasten verwenden sichtbar. Deaktivieren Sie das Kontrollkästchen, um die Spezialtasten zu blockieren.

    Um den Zugriff auf das Datenbankfenster zu sperren, reicht es nicht aus, die F11 Taste zu deaktivieren. Das Datenbankfenster kann dann immer noch über das Menü Fenster aufgerufen werden. Definieren Sie deshalb zusätzlich noch eine neue Menüzeile, in der das Menü Fenster nicht mehr enthalten ist.

     

    Bei der Dateneingabe in Kombinationsfelder ist es besonders für Mauslose Anwender zeitaufwendig, die entsprechende Liste des Kombinationsfeldes vor der Eingabe herunterzuklappen. Eine Alternative wären Listenfelder, die jedoch sehr viel Platz benötigen.

    Verwenden Sie die DropDown-Methode, um die Liste eines Kombinationsfeld direkt bei der Aktivierung herunterzuklappen.

    Legen Sie zu diesem Zweck innerhalb eines Standardmoduls die folgende Prozedur an:

    Function DropDown()

    On Error Resume Next
    Screen.ActiveControl.DropDown

    End Function

    In die Beim Hingehen-Ereigniseigenschaft der betreffenden Kombinationsfelder tragen Sie anschließend den folgenden Ausdruck ein:

    =DropDown()

    Sobald nun der Fokus zu einem der Kombinationsfelder wechselt, wird die Liste automatisch heruntergeklappt.

     
    Mit VIMail können Sie Serien-E-Mails mit der MS Access Datenbank und txt-Template-Dateien erstellen.
     

    Jeder Benutzer wird in der Users-Auflistung durch ein User-Objekt repräsentiert. Um festzustellen, ob ein Benutzer Mitglied in einer bestimmten Gruppe ist, muß nur die Groups-Auflistung des betreffenden Users-Objekt durchlaufen werden. Genau dies erledigt die folgende Prozedur. Sie ermittelt, ob der angegebene Benutzer Mitglied in einer bestimmten Gruppe ist und gibt dementsprechend True oder False zurück:

    Function IstBenutzerGruppenmitglied(Benutzername As String, _
                                 Gruppenname As String) As Boolean

    Dim WS As Workspace
    Dim Benutzer As User
    Dim Gruppe As Group

    On Error GoTo Err

        Set WS = DBEngine(0)
        Set Benutzer = WS.Users(Benutzername)

        IstBenutzerGruppenmitglied = False

        For Each Gruppe In Benutzer.Groups

            If Gruppenname = Gruppe.Name Then
                IstBenutzerGruppenmitglied = True
                Exit For
        End If

        Next Gruppe

        Exit Function

    Err:

        MsgBox Err.Description
        Exit Function

    End Function

    Bei einem jungfräulichen Sicherheitssystem gibt der folgende Ausdruck True zurück:

    IstBenutzerGruppenmitglied("Admin", "Admins")

    Beachten Sie, daß die Namen der Standardbenutzer und -benutzergruppen innerhalb von VBA in englisch angegeben werden müssen. Aus Administrator wird also Admin, aus Administratoren wird Admins und aus Benutzer wird Users.

     
    Ich habe einen Bericht, der auf einem gefilterten Formular beruht. Dieses Formular enthält des weiteren eine Parameterabfrage nach dem Jahr. Die Daten in diesem Formular sind nach Auftragsnummern sortiert. Wenn ich jetzt den Bericht aufrufe so werden mir auch nur die gefilterten Daten angezeigt aber leider nicht mehr sortiert. Wie kann ich es erreichen, dass die Sortierung aus dem Formular auch auf dem Bericht beibehalten wird? Das Formular und der Bericht haben die gleiche Datengrundlage (sortierte Abfrage).Unabhängig von der Datenherkunft des Berichts können Sie nach einem beliebigen Feld sortieren. Das Feld tragen Sie in die Berichtseigenschaft "Sortiert nach" ein. Die Eigenschaft "Sortierung aktiv" muss natürlich auf "Ja" gesetzt sein. Das Feld muss nicht unbedingt auf dem Bericht stehen, aber schon in der Datenherkunft.

    Das Anschließen einer Arbeitsgruppendatei vor dem Start von Access geschieht in der Regel über den MS Access Arbeitsgruppen-Administrator. Die Arbeitsgruppendatei lässt sich aber auch direkt beim Start angeben. Der Standard Arbeitsgruppendateiname ist System.mdw.

    Verwenden Sie die Befehlszeilenoption "/wrkgrp", um die zu verwendende Arbeitsgruppendatei beim Laden von Access festzulegen.

    Wählen Sie im Start-Menü von Windows den Befehl Ausführen. Geben Sie im Kombinationsfeld Öffnen die folgende Zeile ein:

    msaccess /wrkgrp .mdw

    Access wird dann mit der angegebenen Arbeitsgruppendatei gestartet.

     

     

    Dieses Buch verbindet die komplette, praxisnahe Abhandlung der gesamten Funktionalität von Microsoft Access 2003 mit einem besonders günstigen Preis. Es ist geschrieben für Einsteiger, die interessiert sind, sich das Datenbankprogramm in all seinen Facetten Schritt für Schritt zu erarbeiten. Nach der Beschreibung der Oberfläche und dem Umgang mit Tabellen und Formularen geht es zum Erstellen von Tabellen und Datenbanken sowie zu den Abfragen und Diagrammen. Schließlich werden Berichte und Steuerelemente gründlich erläutert, bevor das Buch mit dem Datenaustausch sowie dem Internet/Intranet schließt.

    Von Said Baloui; Markt + Technik (2003); Euro 29,95; ISBN: 382726605-X

     

    Access stellt eine Funktion namens Rnd zur Verfügung, mit der sich Zufallszahlen zwischen 0 und 1 ermitteln lassen. In der Praxis werden jedoch häufig ganzzahlige Zufallszahlen zwischen einer bestimmten oberen und unteren Grenze benötigt (z.B. zwischen 1 und 10). Die folgende Anweisung erledigt dies:

    Public Function ZufallszahlAusgeben(Untergrenze, Obergrenze)

     Randomize Timer
     Ausgeben = Int((Obergrenze - Untergrenze + 1) * Rnd + Untergrenze)

    End Function

    Die Funktion erwartet beim Start eine Ober- und eine Untergrenze. Das Ergebnis ist eine ganzzahlige Zufallszahl zwischen den beiden angegebenen Werten.

     

    Access verfügt über einen Assistenten für Eingabeformate, der unter anderem auch ein Format für Telefonnummern vorschlägt. Dieses Format ist aber leider nur für amerikanische Telefonnummern geeignet. Im deutschsprachigen Raum benötigen Sie ein anderes Eingabeformat.

    Da Telefonnummern im deutschsprachigen Raum nicht normiert sind, benötigen Sie hierfür ein spezielles Eingabeformat.

    Die hiesigen Telefonnummern weisen aus der Sicht des Datenbankentwicklers das Problem auf, dass weder die Länge der Vorwahl noch die Länge der Telefonnummer normiert ist.

    Ein Eingabeformat mit 16 Stellen sollte jedoch für die meisten Zwecke ausreichend sein. Geben Sie folgenden Ausdruck in die Eigenschaft Eingabeformat Ihrer Telefonnummer ein:

    !\(999999")"000\ 999\ 9999;;w

    Während der Dateneingabe zeigt Access 16-mal den Buchstaben w an. Der Anwender kann jedes w durch eine Ziffer ersetzen.

    Bei einer fünfstelligen Vorwahl muss der Anwender erst einmal die Leertaste betätigen, bevor er seine Ziffern eingibt. Ist die Vorwahl nur vierstellig muss er die Leertaste zweimal betätigen, usw.

    Die Eingabe der Telefonnummer fällt leichter, wenn nach dem Eintritt in ein Feld die -Taste betätigt wird. Access zeigt das Eingabeformat dann innerhalb des Feldes an (siehe Abbildung). Zu dem Eingabeformat für die Telefonnummer passt folgendes Anzeigeformat:

    !(@@@@@@)@@ @@ @@ @@ @@

     

    Datenherkunft
    Verwenden Sie als Datenherkunft für Formulare nach Möglichkeit keine SQL-Anweisung, sondern eine gespeicherte Abfrage. Gespeicherte Abfragen werden schneller ausgeführt.

    Sortierungen
    Die Datensätze der einem Formular zugrunde liegenden Abfrage sollten nur dann sortiert werden, wenn dies unbedingt erforderlich ist. Dies tifft vor allem auf solche Abfragen zu, in denen mehrere Tabellen zusammengefasst sind.

    Steuerelemente
    Grundsätzlich gilt: Reduzieren Sie die Anzahl der Steuerelemente auf einem Formular so weit wie möglich, denn das Laden von Steuerelementen ist relativ zeitraubend. Vermeiden Sie auf jeden Fall sich überlappende Steuerelemente.

    Bildsteuerelemente
    Verwenden Sie nach Möglichkeit Bildsteuerlemente anstelle von OLE-Objekten, weil diese schneller geladen werden und weniger Speicherplatz benötigen.

    Grafiken
    Bei der Verwendung von Grafiken gelten folgende Optimierungsregeln:
    - So wenige Grafiken wie möglich verwenden
    - Verwenden Sie nach Möglichkeit schwarzweiße anstelle farbiger Grafiken
    - Redizieren Sie die Farbtiefe farbiger Grafiken

     

    Sie finden vielen Tipps & Tricks, Downloads und Beispieldateien zu Access. Autorin war fast ausschließlich Annerose Stübiger, die auch die Beispieldateien zu folgenden Access Themen erstellt hat:

    • Bericht
    • Datenherkunft
    • Datensatznavigation
    • Datensatzoperation
    • Datum
    • DB-Design
    • DomFunktion
    • Felder
    • Filter
    • Format
    • Formulargestaltung
    • Formularsteuerung
    • Layout
    • MS Graph
    • Timer
    • Schutz
    • Suchen
     

    Um auf versteckte Objekte zugreifen zu können, müssen Sie den Menübefehl Extras>Optionen ausführen und in das Register Ansicht wechseln. In der Sektion Einblenden aktivieren Sie dann die Option Ausgeblendete Objekte. Die Veränderung zeigt sofort Wirkung, wenn Sie auf OK oder Übernehmen klicken. Es werden nun alle erstellten Objekte angezeigt.

    Ausgeblendete Objekte erkennen Sie im Datenbankfenster daran, dass das jeweils zugehörige Symbol verblaßt dargestellt wird.

     

    MARS ermöglicht das schnelle Erstellen von Access-Reports, die automatisch ausgeführt, per E-Mail verschickt, gedruckt, gefaxt oder auf einen FTP-Server in vielen möglichen Formaten geladen werden können. Es ermöglicht das automatische Erstellen von Berichten im Tages-, Wochen- oder Monats-Rhythmus oder das Definieren von eigenen Rhythmen. Die Berichte können u.a. in Word-, Excel-, HTML-, RTF- oder im PDF-Format gespeichert werden. Gleiche Reports können mehrmals mit verschiedenen Parametern, Formaten, Rhythmen oder Zielen erstellt werden. Auch das Definieren von Aktions-Plänen ist möglich.

     
      

    Weiterhin lassen sich diese Werte nach einer Reihe von Kategorien, die untereinander auf der linken Seite des Datenblatts angezeigt werden, und nach einer anderen Reihe von Kategorien, die am oberen Rand des Datenblatts angezeigt werden, gruppieren.

    Kreuztabellenabfrage erlauben eine zweidimensionale Tabellendarstellung.

    Das folgende Beispiel verwendet die Beispiel-Datenbank Nordwind und zeigt die Anzahl der Bestellungen einer pro Jahr an:

    Ziehen Sie die Tabellen Kunden und Bestellungen in den Abfrageentwurf.

    Wählen Sie für das Feld Firma der Tabelle Kunden folgende Einstellungen aus:

    Funktion: Gruppierung
    Kreuztabelle: Zeilenüberschrift

    Geben Sie in das nächste Feld folgenden Ausdruck ein:

    Ausdr1: Jahr([Bestelldatum]) & " " & "Anzahl Bestellungen pro Jahr"

    Wählen Sie für dieses Feld folgende Einstellungen aus:

    Funktion: Gruppierung
    Kreuztabelle: Spaltenüberschrift

    Wählen Sie für das letzte Feld aus der Tabelle Bestellungen folgende Einstellungen aus:

    Feld: Anzahl: Bestell-Nr
    Funktion: Anzahl
    Kreuztabelle: Wert

     

    Die folgende Funktion erwartet beim Start ein beliebiges Geburtsdatum. Das Ergebnis ist das Alter der Person am heutigen Tage.

    Function AlterBerechnen(Geburtstag As Date) As Integer

    AlterBerechnen = IIf(Day(Geburtstag) > Day(Date) And _
            Month(Geburtstag) >= Month(Date), _
            Year(Date) - Year(Geburtstag) - 1, _
            Year(Date) - Year(Geburtstag))

    End Function

     

    In der Access Beispieldatenbank Nordwind finden Sie ein Formular namens Kunden-Telefonnummern, das mit einer Registerleiste im Formularfuß ausgestattet ist. Die Aufgabe dieser Leiste besteht darin, die Formulardaten nach bestimmten Anfangsbuchstaben zu filtern.

    Mit wenigen Schritten können Sie eine solche Registerleiste auch in Ihre Formulare einfügen.

    Zur Anlage der Leiste gehen Sie folgendermaßen vor:

    1. Legen Sie eine Optionsgruppe im Fuß des Formulars an. Verzichten Sie hierbei auf den Einsatz des Optionsgruppen-Assistenten, da dieser nur mit maximal 20 Optionen hantieren kann.

    2. Erstellen Sie innerhalb der Optionsgruppe 26 Umschaltsflächen. Mit dem Befehl Bearbeiten / Duplizieren vereinfachen Sie diesen Vorgang.

    3. Beschriften Sie die Schaltflächen mit "A" bis "Z".

    4. Numerieren Sie die Schaltflächen mittels Optionswert-Eigenschaft von 65 (für A) bis 90 (für Z) durch. Diese Zahlenwerte entsprechen des ASCII-Codes der betreffenden Buchstaben.

    5. Legen Sie eine letzte Umschaltsfläche mit der Beschriftung 'Alle' und dem Optionswert 91 an.

    6. Für das Ereignis Nach Aktualisierung der Optionsgruppe legen Sie die folgende Prozedur an:

    Private Sub Kundenfilter_AfterUpdate()

        Dim ctlFilterOption As Control
        Set ctlFilterOption = Me.Kundenfilter

        Select Case ctlFilterOption

            Case 65 To 90 ' Filter verwenden
                Me.Filter = "[Kontaktperson] Like '" & Chr(ctlFilterOption) & "*'"
                Me.FilterOn = True

           Case Else ' Filter aufheben
              Me.FilterOn = False

        End Select

    End Sub

     

    Access kennt verschiedene Methoden zum Schutz von Datenbanken. Diese Methoden unterscheiden sich sowohl im Bedienungsaufwand, als auch in Ihrer Wirksamkeit. In diesem ersten Teil werden die Themen Datenbankkennwort, MDE-Erstellung und Datenbankverschlüsselung behandelt.

    Datenbankkennwort
    Eine Datenbank, die mit einem Kennwort geschützt ist, kann nur noch nach Eingabe dieses Kennworts geöffnet werden. Es besteht also die Gefahr, dass Sie sich selbst von Ihrer Datenbank aussperren. Der Dialog zur Kennworteingabe wird über Extras / Sicherheit / Datenbankkennwort zuweisen (Access 2000, XP) bzw. Extras / Zugriffsrechte / Datenbankkennwort zuweisen (Access 97) geöffnet.

    MDE-Datei erstellen
    Beim Speichern einer Datenbank als MDE-Datei sind der komplette VBA-Code und die Entwurfsansichten von Formularen und Berichten nicht mehr zugänglich. Dies gilt allerdings auch für Sie selbst als Eigentümer einer Datenbank. Da außerdem dieser Vorgang nicht mehr rückgängig gemacht werden kann, sollten Sie in jedem Fall einer Kopie der MDB-Datei sicher aufbewahren. Der Dialog zur MDE-Erstellung (ab Access 97) wird über Extras / Datenbank-Dienstprogramme / MDE-Datei erstellen aufgerufen.

    Datenbank verschlüsseln
    Beim Verschlüsseln einer Datenbank wird die Datenbankdatei so behandelt, dass sie nicht mehr mit Hilfe eines Texteditors oder sonstigen Dienstprogramms gelesen werden kann. Der Dialog zur Verschlüsselung wird über Extras / Sicherheit / Datenbank ver-/entschlüsseln (Access 2000, XP) bzw. Extras / Zugriffsrechte / Datenbank ver-/entschlüsseln (Access 97) aufgerufen.

     
    Wenn Sie hier etwas mehr Flexibilität wünschen, verwenden Sie einfach den gleichnamigen Menüpunkt des Kontextmenüs. Hier können Sie nämlich neben der Anzahl der darzustellenden Seiten auch die Anordnung festlegen.

    Obwohl sich Formularfenster nahezu beliebig in der Größe ändern lassen, hat dies in der Regel wenige Auswirkungen auf den Inhalt der Formulare. Die Größe der Steuerelemente oder deren Position wird nämlich nicht automatisch angepasst.

    Dank der BeiGrössenänderung-Eigenschaft können Sie eine Ereignisprozedur entwickeln, die alle Steuerelemente an die aktuelle Formulargröße anpasst. Der vorhandene Platz kann so optimal ausgenutzt werden.

    Das Grössenänderung-Ereignis (engl. Resize) wird von Access beim Öffnen des Formulars und bei jeder Größenänderung ausgelöst. Mit einer entsprechenden Ereignisprozedur können Sie also die Position (Left- und Top-Eigenschaften) und die Größe (Width- und Height-Eigenschaften) der einzelnen Steuerelemente anpassen.

    Zusätzlich benötigen Sie noch Informationen über die aktuelle Größe des Formulars. Diese ermitteln die beiden Eigenschaften InsideHeight und InsideWidth, die jedes Formular zur Verfügung stellt.

    Die folgende Ereignisprozedur bezieht sich auf ein Formular, das lediglich ein einzelnes Listenfeld mit dem Namen lstLieferanten einhält. Die Größe dieses Listenfeldes wird an die aktuelle Formulargröße angepasst, wobei an allen Seiten ein Rand von 100 Tipps reserviert wird:

    Private Sub Form_Resize()

        Const Rand = 100

        With Me!lstLieferanten
            If .Top <> Rand Then .Top = Rand
            If .Left <> Rand Then .Left = Rand
            .Height = Max(Me.InsideHeight - Rand * 2, 0)
            .Width = Max(Me.InsideWidth - Rand * 2, 0)
        End With

    End Sub

    Innerhalb der Ereignisprozedur kommt eine Funktion namens Max zum Einsatz, die immer den maximalen zweier Werte zurückgibt. Die Funktion verhindert in der obigen Prozedur, dass die Breite oder Höhe des Steuerelements bei sehr kleinen Formularausmaßen negative Werte annimmt.

    Private Function Max(a, b) As Long

    Max = IIf(a > b, a, b)

    End Function

     

    Wählen Sie im Start-Menü den Menüpunkt Ausführen und machen Sie im Kombinationsfeld Öffnen die folgende Eingabe:

    msaccess <Datenbankname>.mdb /X <Makroname>  

    Klicken Sie auf OK, um Access zu starten. Es wird die angegebene Datenbankdatei geladen und anschließend das in der Option festgelegte Makro, dass in der Datenbank enthalten sein muss, ausgeführt. Sie benötigen also kein Autoexec-Makro.

    Wenn Sie noch zusätzlich ein Autoexec-Makro in Ihrer Datenbank definiert haben, wird zuerst das Autoexec-Makro ausgeführt und dann das Makro in der Befehlszeile.
    Auf diese Weise können Sie für jeden Benutzer eine individuelle Startsequenz definieren, wobei zusätzlich im Autoexec-Makro globale, für alle Benutzer geltende Befehle ausgeführt werden können.

     

    Dieses Tool ermöglicht Ihnen das Erstellen von COM add-ins, Smart Tags und RTD Server für Microsoft Office Anwendungen.

     

    Abfragen dienen dazu, Datensätze zu filtern, um so gezielt Daten aufzuspüren. Besonders bei Textfeldern bieten sich Platzhalterzeichen für die Selektion von Datensätzen an.

    Benutzen Sie den Wie-Operator, um Platzhalterfunktionen verwenden zu können.

    Wenn Sie Platzhalter in Kriterien benutzen wollen, müssen Sie diese über den Wie-Operator festlegen. Sobald Sie in einem Kriterium ein Platzhalterzeichen verwenden und die Eingabe anschließen, wandelt Access die Eingabe automatisch unter Verwendung des Wie-Operators um. Als Platzhalterzeichen dienen die folgenden Zeichen:

    Platzhalterzeichen Platzhalter für
    Sternchen: * kein, ein oder mehrere beliebige Zeichen oder Ziffern
    Fragezeichen: ? ein beliebiges Zeichen
    Doppelkreuz: # eine beliebige Ziffer zwischen 0 und 9

     

     

    Mit der Definition von Gültigkeitsregeln können Sie die Eingabe von Daten gut kontrollieren. Wird eine fehlerhafte Eingabe gemacht, erscheint eine Fehlermeldung. Dabei handelt es sich allerdings um eine Standardmeldung, die nur den aktuellen Feldnamen und die Gültigkeitsregel mit einschließt.
    Diese Meldung ist für eine Endanwendung nicht akzeptabel.

    Sie definieren eigene Fehlermeldungen, die bei Verletzung einer Gültigkeitsregel angezeigt werden.

    Für jedes Feld, für das Sie eine Gültigkeitsregel definieren, können Sie auch eine eigene Gültigkeitsmeldung eintragen. Dazu brauchen Sie nur bei der Eigenschaft Gültigkeitsmeldung des Feldes den Text einzugeben, der als Meldung erscheinen soll.

    Für das Beispiel aus dem vorangegangenen Tipp könnte die Meldung wie folgt lauten:

    Geben Sie bitte eine Zahl zwischen 10 und 30 in diesem Feld ein!

    Andere Werte sind nicht zulässig. Genau dieser Text erscheint beim nächsten Mal, wenn eine Eingabe gemacht wird, die nicht den Regeln entspricht, in einem Meldungsfenster.

     

    Ich habe folgende Tabellen: Lieferanten, Postleitzahlen-Gebiete, Spediteur.

    Ich möchte, dass mir bei der Eingabe einer Lieferantenadresse (mit Postleitzahl), der für dieses Gebiet zuständige Spediteur im Formular angezeigt wird.

    Kann dies über eine Abfrage in Access realisiert werden?

    Ja, das können Sie mit einer Unterabfrage als zusätzliche Spalte Ihrer Abfrage erreichen. Wenn also Ihre Basisabfrage etwa so aussieht

    SELECT LieferantNr, Lieferant, PLZ, FROM tblLieferanten

    dann können Sie ein weiteres SELECT als Spalte hinzufügen. Die endgültige Abfrage sieht dann so aus:

    SELECT LieferantNr, Lieferant, PLZ,
      (SELECT TOP 1 Spedition FROM tblSpeditionen
      WHERE Val(tblLieferanten.PLZ) BETWEEN Val(PLZvon)
        AND Val(PLZbis)) AS Spedition
    FROM tblLieferanten;

    Für jeden Datensatz aus tblLieferanten wird anhand der Postleitzahl ein passender Datensatz aus tblSpeditionen herausgesucht. Wenn Sie sicher sind, dass die Gebiete sich nicht überschneiden, können Sie das TOP 1 wieder entfernen. Das TOP 1 ist nur sicherheitshalber in der Ablage enthalten, denn es darf maximal ein Datensatz aus der Unterabfrage zurückkommen.

    Dieses Handbuch erklärt Ihnen den Umgang mit Access von Anfang an. In einem Schnelleinstieg lernen Sie die Software zunächst im Überblick kennen. Anschließend vertiefen Sie sich in Datenbank-Grundlagen, Tabellen, Abfragen, Formulare und Berichte. Fortgeschrittene können sich danach mit den verschiedenen Programmiertechniken auseinandersetzen. Auch eigenständige Anwendungen, Access-Projekte und Access im Internet werden ausführlich dargestellt. Auf der Begleit-CD finden Sie neben den Beispiel-Datenbanken das komplette Handbuch als eBook.

    Jetzt neu:

    • komplett zweifarbig, mit Praxisindex und eBook auf CD
    • 980 Seiten voller Information, durchgehend zweifarbig
    • zusätzlicher Praxisindex aller Schritt-für-Schritt-Anleitungen 
    • Profitipps, die Ihnen viel Zeit ersparen
    • das ganze Buch als eBook auf CD: für den bequemen Zugriff unterwegs

    Das sind die Themen:

    • Schnelleinstieg: Datenbank-Assistenten, Tabellen-Assistent, Tabellen, Formulare, Berichte, Abfragen, Access-Hilfe
    • Tabellen: Datenbank-Grundlagen, Tabellenentwurf, Beziehungen zwischen Tabellen, Verknüpfen, Importieren, Tabellenanalyse
    • Abfragen: Einfache und komplexe Abfragen, Abfragen mit berechneten Feldern, Abfragen mit mehreren Tabellen, Abfragen mit Parametern, Aggregat-Funktionen, Aktionsabfragen, SQL
    • Formulare: Formularentwurf, Steuerelemente, Unterformulare, ungebundene Formulare, Diagramm-Formulare, Pivot-Ansichten
    • Berichte: Einfache und fortgeschrittene Berichte gestalten, Formulare für Berichte
    • Dienstprogramme und Datenweitergabe: Datenbank-Dienstprogramme, Office-Verknüpfungen
    • Programmierung: Makros, Visual Basic (VBA), Einführung in die Objekttechnik, Funktionen und Methoden, Datenzugriff mit ADO und DAO Komplette
    • Anwendungen: Eigenständige Anwendungen erstellen, Zugriffsrechte und Datensicherheit, Mehrbenutzer-Umgebungen
    • Access-Projekte: Access mit Microsoft SQL Server, Upsizing-Assistent, Unterschiede zwischen Access- und SQL Server-Datenbanken, MSDE
    • Access im Internet: Hyperlinks, HTML- und XML-Ausgabe, Datenzugriffs-Seiten, Microsoft Windows SharePoint Services Auf der Buch-CD finden Sie: - Das komplette Handbuch als eBook zur mobilen Nutzung - Alle im Buch beschriebenen Beispiel-Datenbanken - Microsoft SQL Server 2000 (120-Tage-Testversion) - Microsoft Jet 4.0 Service Pack 8 Über die Autoren: Natascha Nicol und Ralf Albrecht entwickeln seit langen Jahren Anwendungen mit Microsoft Access und .NET-Framework. Sie sind mit über 60 veröffentlichten Büchern zu EDV-Themen erfahrene und kompetente Autoren. Beide gehören zu den erfolgreichsten Buchautoren zum Thema Access.
     

    In diesem Titel erhalten Sie Einblick in Microsofts neue Access Version 2003. Egal, ob Sie noch nie mit Access gearbeitet haben oder ob Sie bereits ältere Versionen der Software kennen, hier erlernen Sie auf einfache Art und Weise den Umgang mit der neuen Datenbanksoftware.

    "Access 2003 zum Nachschlagen" verrät Ihnen die wichtigsten Kniffe im Umgang mit Access. Im ersten Teil des Buches erhalten Sie Grundlagenwissen, angefangen mit einer Erläuterung der neuen Funktionen und der Installation von Access 2003. Erfahren Sie dann, wie eine relationale Datenbank aufgebaut ist und wie man mit Access eine Datenbank optimal anlegen kann. Sie werden nach Lektüre des Buches schon bald dazu in der Lage sein, Ihre erste Datenbank zu erstellen, Tabellen anzulegen und zu bearbeiten, Abfragen zu entwerfen, Formulare zu verwenden und Berichte zu erstellen.

    Sie lernen auch die Möglichkeit des Datenaustauschs mit anderen Office-Programmen kennen, so dass Sie Access 2003 wirklich effektiv nutzen können. Die Referenz als zweiter Teil des Buches bietet alphabetisch geordnete Einträge, die es Ihnen ermöglichen, das Gesuchte schnell zu finden. 

    Von Stefan Truckenmüller; Sybex (2003); Euro 10,95; ISBN: 3815504244

     

    Mit der Ermittlung der internen Menüstruktur von Windows-Anwendungen ist ein wenig Aufwand verbunden. Menüs werden vom System in verketteten Listen verwaltet, die rekursiv durchgeforstet werden müssen. Jeder Eintrag in der Liste enthält ein Handle auf ein Menü bzw. Untermenü, das wiederrum weitere Untermenüs haben kann. Die erste Aufgabe ist es also dann, das Handle des obersten Hauptmenüs dieser Hierarchie abzufragen. Diese erledigen Sie mit der API-Funktion GetMenu:

    Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long

    Dim hmenu As Long
    hmenu = GetMenu(Application.hWndAccessApp)

    Intern werden die einzelnen Menüpunkte von Bezeichnern verwaltet, mit denen der Menütext verknüpft ist. Möchten Sie den Text eines Menüeintrags ermitteln, so müssen Sie zuerst dessen Bezeichner ausfindig machen. Zu diesen Zweck übergeben Sie der API-Funktion GetMenuItemID ein Menü-Handle sowie einen Index, der die Menüposition des gefragten Eintrags darstellt:

    menuid = GetMenuItemID(hmenu, i) ' Menü-Bezeichner ermitteln

    Mit dem gültigen Menü-Bezeichner können Sie nun durch Einsatz der Funktion GetMenuItemString den Menütext abfragen:

    menuname = Left(menuname, GetMenuString(hmenu, i, _
                            menuname, Len(menuname), MF_BYPOSITION))

    Ob ein Menü ein Untermenü unter sich hat, stellen Sie mit der Funktion GetSubMenu fest. Wenn kein Untermenü vorhanden ist, gibt diese Funktion den Wert 0 zurück:

    hsubmenu = GetSubMenu(hmenu, i) ' feststellen, ob Untermenü existiert

    Mit den oben beschriebenen Funktionen können Sie eine umfassende Funktion schreiben, die alle Menüs durchschlieft und deren Texte im Testfenster anzeigt:

    Public Const MF_BYPOSITION = &H400& Declare Function GetMenu Lib "user32" _ (ByVal hwnd As Long) As Long Declare Function GetMenuItemCount Lib "user32" _ (ByVal hmenu As Long) As Long Declare Function GetMenuItemID Lib "user32" _ (ByVal hmenu As Long, ByVal nPos As Long) As Long Declare Function GetMenuString Lib "user32" Alias "GetMenuStringA" _ (ByVal hmenu As Long, _ ByVal wIDItem As Long, ByVal lpString As String, _ ByVal nMaxCount As Long, _ ByVal wFlag As Long) As Long Declare Function GetSubMenu Lib "user32" (ByVal hmenu As Long, _ ByVal nPos As Long) As Long Public Function MenüAuflisten(ByVal hmenu As Long, _ ByVal indent As Integer) Dim menuzahl As Long, i As Integer Dim menuid As Long, menuname As String Dim hsubmenu As Long ' Anzahl der Menüpunkte ermitteln menuzahl = GetMenuItemCount(hmenu) For i = 0 To menuzahl - 1 menuid = GetMenuItemID(hmenu, i) ' Menü-Bezeichner ermitteln menuname = String$(255, 0) ' Menütext ermitteln menuname = Left(menuname, GetMenuString(hmenu, i, _ menuname, Len(menuname), MF_BYPOSITION)) If menuid = 0 Then Debug.Print Space$(indent * 3) & "<--------Trennlinie-------->" Else Debug.Print Space$(indent * 3) & menuname, menuid End If 'feststellen, ob Untermenü existiert hsubmenu = GetSubMenu(hmenu, i) ' wenn ja, Funktion rekursiv aufrufen If hsubmenu Then MenüAuflisten hsubmenu, indent + 1 Next i End Function Diese Funktion ruft sich selbst rekursiv auf, um die Texte der eventuell vorhandenen Untermenüs mitanzuzeigen, wobei die Untermenüs je nach Tiefe mit Leerzeichen eingerückt werden. Hinter dem Menütext wird der jeweilige Menübefehl-Bezeichner ausgegeben. Wenn dieser Bezeichner den Wert 0 hat, ist eine Trennlinie vorhanden. Befehle mit dem Wert -1 stellen Menütexte auf dem Hauptmenü dar. Eine kleine Testprozedur, die das Handle des Hauptmenüs an die oben abgedruckte Funktion übergibt, sieht folgendermaßen aus: Public Function Test() Dim hmenu As Long hmenu = GetMenu(Application.hWndAccessApp) If hmenu Then MenüAuflisten hmenu, 0 End Function

    Der Funktion wird ein Parameter übergeben, der die gewünschte Information darstellt. Das Ergebnis ist ein Long-Wert in der Einheit Pixel:

    Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long)
    As Long

    Zur Ermittlung der Bildschirmauflösung rufen Sie GetSystemMetrics zweimal auf, und zwar mit den folgenden Konstanten als Parametern:

    Public Const SM_CXSCREEN = 0 ' Breite ermitteln
    Public Const SM_CYSCREEN = 1 ' Höhe ermitteln

    Um festzustellen, ob die Bildschirmauflösung nur 640 x 480 Pixel beträgt, verwenden Sie GetSystemMetrics auf folgende Weise:

    Public Function AuflösungZuWenig() As Boolean

    Dim SchirmBreite As Long, SchirmHöhe As Long
    Dim lHilfeFenster As Long

        ' Breite des gesamten Bildschirms
        SchirmBreite = GetSystemMetrics(SM_CXSCREEN) SchirmHöhe =

       ' Höhe des gesamten Bildschirms
        GetSystemMetrics(SM_CYSCREEN)

        AuflösungZuWenig = (SchirmBreite <= 640 And SchirmHöhe <= 480)

    End Function

     

    Sie liefert den Dateinamen als String zurück. Im Beispiel von C:\Windows\System\mscdex.exe

    Sie benötigen hierzu auch die Funktion ReverseInStr aus dem Tipp

    Stringmanipulation - Parsen - Textmanipulation (Link siehe unten)

    Public Function GetFileName(strPath As String) As String

        Dim intPos As Integer

        intPos = ReverseInStr(0, strPath, "\")
        GetFileName = Right(strPath, Len(strPath) - intPos)

    End Function

     

    Wie kann ich einen eigenen Passwort-Dialog erstellen?

    Ich habe bereits eine Teillösung mit KeyPress gefunden. Ich habe die eingegebenen Zeichen durch "*" ersetzt und die originalen Zeichen in ein anderes Textfeld hineingeschrieben. Dies funktioniert allerdings nicht bei der Leertaste und der Rückschritt-Taste.

    Ein kleiner Tipp würde mich freuen.

    Access-97-Datenbank mit Demo-Passwort-Dialog

    Die Eingabeformat-Eigenschaft kann eingegebene Zeichen automatisch durch Sternchen darstellen, was für eine Passwort-Eingabe ideal ist.

    Starten Sie den Eingabeformat-Assistenten im Eigenschaftsfenster im Feld Eingabeformat eines beliebigen Textfeldes. Wählen Sie Kennwort aus der Liste der verfügbaren Formate aus und klicken Sie Fertigstellen.

    Im Textfeld werden nun alle Zeichen durch Sternchen ersetzt.

    Eine UNION-Abfrage kombiniert Felder aus zwei oder mehr Tabellen bzw. Abfragen in einem Feld in den Abfrageergebnissen.

    Für die Kombination der Resultsets von zwei Abfragen mit UNION gelten die folgenden beiden Grundregeln:

    - Die Anzahl und die Reihenfolge der Spalten müssen für alle Abfragen identisch sein.
    - Die Datentypen der beiden Abfragen müssen kompatibel sein.

    Das folgende Beispiel benutzt wieder Tabellen aus der Beispieldatenbank Nordwind. Das Abfrageergebnis ist eine Telefonliste von Kunden und Lieferanten.

    SELECT [Firma] AS [Kunde / Lieferant], [Telefon], [Telefax] FROM Kunden

    UNION SELECT [Firma] AS [Kunde / Lieferant], Telefon, Telefax FROM Lieferanten;

    Sie erkennen, dass die Union-Abfrage aus aus zwei Select-Anweisungungen besteht, die durch das Schlüsselwort UNION miteinander verbunden sind.

     

    Setzen Sie dazu die Option Markierungsverhalten auf Teilweise eingerahmt. Diese Option finden Sie im Register Formulare/Berichte des Dialogfensters Extras/Optionen. Diese Einstellung bewirkt, daß Access ein Steuerelement auch dann markiert, wenn der aufgezogene Rahmen nur ein Teil des Steuerelements einschließt.

     

    Ich habe in einer meiner Tabellen eine Spalte, in der Telefonnummern gespeichert sind. Nun möchte ich gerne die letzten 4 Ziffern als Durchwahl kennzeichnen. Die letzten 4 Ziffern sollen also in der bisherigen (Telefonnummern) Spalte gelöscht werden und in einer neuen (Durchwahl) Spalte gespeichert werden. Leider habe ich es bisher nicht geschafft, Teile eines Feldinhaltes zu löschen.

    Haben Sie für dieses Problem eine Lösung?

    Das Abschneiden der letzten vier Ziffern können Sie beispielsweise mit Hilfe einer Aktualisierungsabfrage, der Links-Funktion sowie der Länge-Funktion erledigen.

    Ein Beispiel:
    Telefonnummer: 0211/111110000
    Durchwahl: 0000
    Ausdruck: Links([Telefonnummer]; Länge([Telefonnummer]) -4 )
    Ergebnis: 0211/11111

    Durch den Ausdruck wird zunächst die Länge der kompletten Telefonnummer ermittelt, diese um 4 reduziert und die übrig gebliebene Anzahl von links abgeschnitten. Mit einer Aktualsierungsabfrage können Sie nun das Feld "Telefonnummer" durch das Ergebnis des Ausdrucks aktualisieren. Ich hoffe, diese Lösung hilft Ihnen weiter.

    Auf dieser Site finden Sie Shareware, Demoware, Trialware, Tipps, und Utilities. Ein Newsletter informiert Sie zweimal im Monat zu den unterschiedlichster Themen nach Ihrer Auswahl. 
    Hallo liebes Access Team, ich möchte eine Tabelle automatisch aktualisieren. Nun mein Vorgehen. Es wird eine Tabelle aus SAP R/3 gezogen. Diese wird dann in Acess importiert. Da aber die SAP R/3 Tabelle von einer anderen Abteilung gepflegt wird, ändert sie sich ständig. Nur kann ich nicht immer ein update dieser SAP R/3 Tabelle ziehen und sie in Access einpflegen. Für mich ist es wichtig, dass die Änderungen in der SAP R/3 Tabelle automatisch (über Nacht) in die Access Tabelle übertragen wird. Idealerweise aber nur die Neuerungen, nicht die ganze Tabelle. Wenn Ihr da einen Weg fü mich habt, wäre es super. Vielen DankSehr geehrter Herr Daubner, zunächst wäre festzustellen, was für Sie ein neuer Datensatz ist. Gibt es in den SAP-Daten ein "ID"-Feld, also einen eindeutigen Schlüssel?. Dieses Feld könnten Sie als Primärschlüssel in Ihrer Access-Tabelle definieren, so daß die Import-Routine die schon vorhandenen Datensätze nicht nochmals anlegt. Statt dessen würde Access einen Fehler protokollieren (in der "Fehler"-Tabelle) und mit dem nächsten Datensatz weiter machen. Mit freundlichen Grüßen, Tom Jordan _____________________________________ TriniDat Software-Entwicklung GmbH Individual-Software zum günstigen Festpreis. jordan@trinidat.de www.trinidat.de Telefon: 02 11/1 71 93 56 Telefax: 02 11/1 71 93 58

    Datenbanken

     

     

     

     

     

    Maximale Größe einer mdb.Datei

     

     

    Access 97 - 1 Gigabyte zuzüglich verknüpfter Tabellen

     

     

    Access 2000/ XP - 2 Gigabyte zuzüglich verknüpfter Tabellen

     

     

     

     

     

    Maximale Anzahl der Objekte in einer Datenbank

     

     

    Access 97/ 2000/ XP - 32.768

     

     

     

     

     

    Maximale Anzahl Module (einschließlich Formular und Berichte, wenn die HasModule-Eig. auf True gesetzt ist).

     

     

    Access 97/ 2000 - 1.024

     

     

    Access XP - 1000

     

     

     

     

     

    Maximale Anzahl Zeichen in Kennwörtern

     

     

    Access 97/2000/XP - 14

     

     

     

     

     

    Maximale Anzahl Zeichen in Benutzer und Gruppennamen

     

     

    Access 97/ 2000/ XP - 20

     

     

     

     

     

    Maximale Anzahl gleichzeitiger Benutzer

     

     

    Access 97/ 2000/ XP - 255

     

    Projekte

     

     

    Projekte kennt Access erst ab der Version 2002/ XP

     

     

     

     

     

    Maximale Anzahl von Projekten in einem Access Projekt

     

     

    32.768

     

     

     

     

     

    Maximale Anzahl Module (einschließlich Formular und Berichte, wenn die HasModule-Eig. auf True gesetzt ist).

     

     

    1000

     

     

     

     

     

     

    Tabellen

     

     

    Maximale Anzahl Zeichen im Tabellennamen

     

     

    Access 97/ 2000/ XP - 64

     

     

     

     

     

    Maximale Anzahl Zeichen im Feldnamen

     

     

    Access 97/ 2000/ XP - 64

     

     

     

     

     

    Maximale Anzahl Datenfelder

     

     

    Access 97/ 2000/ XP - 255

     

     

     

     

     

    Maximale Anzahl geöffneter Tabellen

     

     

    Access 97/ 2000 - 1024

     

     

    Access XP - 2.048. Die effektive Anzahl kann wegen externer Tabellen, die Access öffnet geringfügig kleiner sein.

     

     

     

     

     

    Maximale Tabellengröße

     

     

    Access 97/ 2000/ XP - 1 Gigabyte

     

     

     

     

     

    Maximale Anzahl Zeichen in Textfeldern - 255

     

     

    Access 97/ 2000/ XP - 255

     

     

     

     

     

    Maximale Anzahl Zeichen in Memofeldern bei Eingabe über die Benutzeroberfläche

     

     

    Access 97/ 2000/ XP - 65535

     

     

     

     

     

    Maximale Anzahl Zeichen in Memofeldern bei Eingabe über ein VBA Programm

     

     

    Access 97/ 2000/ XP - 1 Gigabyte

     

     

     

     

     

    Maximale Größe eines OLE-Feldes

     

     

    Access 97/ 2000/ XP - 1 Gigabyte

     

     

     

     

     

    Maximale Anzahl Indizes

     

     

    Access 97/ 2000/ XP - 32

     

     

     

     

     

    Maximale Anzahl Felder in zusammengesetzten Indizes

     

     

    Access 97/ 2000/ XP - 10

     

     

     

     

     

    Maximale Anzahl Zeichen in einer Gültigkeitsmeldung

     

     

    Access 97/ 2000/ XP - 255

     

     

     

     

     

    Maximale Anzahl Zeichen in einer Gültigkeitsregel

     

     

    Access 97/ 2000/ XP - 2.048

     

     

     

     

     

    Maximale Anzahl Zeichen in einer Tabellenbeschreibung

     

     

    Access 97/ 2000/ XP - 255

     

     

     

     

     

    Maximale Anzahl Zeichen in einer Feldbeschreibung

     

     

    Access 97/ 2000/ XP - 255

     

     

     

     

     

    Maximale Anzahl Zeichen in einem Datensatz

     

     

    Access 97/ 2000/ XP - 2000

     

     

     

     

     

    Maximale Anzahl Zeichen in einer Feldeigenschaft

     

     

    Access 97/ 2000/ XP - 255

     

     

    Abfragen

     

     

     

     

     

    Maximale Anzahl der Tabellen in einer Abfrage

     

     

    Access 97/ 2000/ XP - 32

     

     

     

     

     

    Maximale Anzahl der Felder in einer Datensatzgruppe

     

     

    Access 97/ 2000/ XP - 255

     

     

     

     

     

    Maximale Größe einer Datensatzgruppe

     

     

    Access 97/ 2000/ XP - 1 Gigabyte

     

     

     

     

     

    Maximale Anzahl der Ebenen bei verschiedenen Abfragen

     

     

    Access 97/ 2000/ XP - 50

     

     

     

     

     

    Maximale Anzahl der Zeichen in einer Zelle des Abfrageentwurfsbereichs

     

     

    Access 97/ 2000/ XP - 1.024

     

     

     

     

     

    Maximale Anzahl der Zeichen für einen Parameter

     

     

    Access 97/ 2000/ XP - 255

     

     

     

     

     

    Maximale Anzahl der Zeichen in einer SQL-Anweisung

     

     

    Access 97/ 2000/ ca. 64.000

     

     

     

     

     

     

     

     

    Formulare + Berichte

     

     

     

    Maximale Anzahl der Zeichen in einem Bezeichnungsfeld

     

     

    Access 97/ 2000/ XP - 2.048

     

     

     

     

     

    Maximale Anzahl der Zeichen in einem Textfeld

     

     

    Access 97/ 2000/ XP - 65535

     

     

     

     

     

    Maximale Breite des Formulars oder Berichts

     

     

    Access 97/ 2000/ XP - 55,87

     

     

     

     

     

    Maximale Höhe eines Berichts

     

     

    Access 97/ 2000/ XP - 55,87

     

     

     

     

     

    Maximale Höhe aller Bereiche zuzüglich der Bereichsköpfe (in der Entwurfsansicht)

     

     

    Access 97/ 2000/ XP - 508 cm

     

     

     

     

     

    Maximale Anzahl der Ebenen bei verschiedenen Formularen oder Berichten

     

     

    Access 97/ 2000/ XP - 3

     

     

     

     

     

    Maximale Anzahl der Felder oder Ausdrücke, die in einem Bericht sortiert oder gruppiert werden können.

     

     

    Access 97/ 2000/ XP - 10

     

     

     

     

     

    Maximale Anzahl der gedruckten Seiten in einem Bericht

     

     

    Access 97/ 2000/ XP - 65.536

     

     

     

     

     

    Maximale Anzahl der Steuerelemente und Bereiche, die während der Lebensdauer des Formulars bzw. Berichts insgesamt hinzugefügt werden können

     

     

    Access 97/ 2000/ XP - 754

     

     

     

     

    Makros

     

     

     

     

     

    Maximale Anzahl Aktionen

     

     

    Access 97/ 2000/ XP - 999

     

     

     

     

     

    Maximale Anzahl Zeichen in einem Datensatz

     

     

    Access 97/ 2000/ XP - 2000

     

     

    Hiervon ausgenommen sind lediglich Zeichenketten-Arrays, da die einzelnen String-Elemente unterschiedliche Längen aufweisen.

    Die folgende Funktion fnMwstBerechnen erwartet ein Array von Integer-Werten und berechnet die Mehrwertsteuer für jedes Element der Liste:

    Declare Function fnMwstBerechnen Lib "Finanz.dll" _
            (ByRef intListe As Integer, _
            intElemente As Integer) As Long

    Public Function fnMwstFürListe()

    Dim ret As Long, aryListe(10) As Integer, i As Integer

        For i = 1 To 10 ' Array mit Beispieldaten auffüllen
            aryListe(i) = i * 4
        Next if

        ' Referenz des ersten Elements übergeben
        ret = fnMwstBerechnen(aryListe(1), 10)

    End Function

     

    Access bietet drei verschiedene Sperrmethoden an, die sich auf die Geschwindigkeit der Datenbank und auf die Verfügbarkeit der Daten auswirken. Bei der pessimistischen Sperrung können zwar mehrere Benutzer auf dieselbe Datenbank zugreifen, jeder einzelne Datensatz kann aber nur von einem Benutzer bearbeitet werden. Solange ein Datensatz verändert wird, bleibt der Schreibzugriff auf diese Daten für alle anderen Benutzer gesperrt. Die pessimistische Sperrung ist zwar sicher, verringert aber die Verfügbarkeit und die Geschwindigkeit beim Datenzugriff.

    Nutzen Sie die pessimistische Datensatzsperrung daher nur für Daten, die häufig von unterschiedlichen Mitarbeitern geändert werden.

    Bei der optimistischen Datensatzsperrung können mehrere Access-Benutzer gleichzeitig denselben Datensatz ändern. Beim Speichern gilt aber das Recht des Schnelleren: Wer seine Änderungen zuerst speichert hat keine Probleme. Der zweite Benutzer wird von Access gewarnt, dass dieser Datensatz seit Beginn der Bearbeitung von einem anderen Benutzer geändert wurde.

    Access bietet Ihnen drei Auswege an, um diese Schreibkonflikte zu lösen: Mit der Schaltfläche "Datensatz speichern" überschreiben Sie die Änderungen des Kollegen. Die Schaltfläche "In Zwischenablage kopieren" speichert Ihren Datensatz in der Zwischenablage, damit Sie die Daten des Kollegen anschließend vergleichen und Ihren Datensatz gegebenenfalls aus der Zwischenablage in die Datenbank einfügen können. Wenn Sie die Schaltfläche "Eigene Änderungen verwerfen" anklicken, werden Ihre Änderungen gelöscht.

    Die optimistische Datensatzsperrung empfiehlt sich für zeitkritische Daten, die selten oder nur von einer Person geändert werden.

    Access bietet neben den zwei Datensatzsperrungen eine Dritte Sperrmethode an, die alle Datensätze einer Tabelle sperrt. Diese Methode schränkt den Mehrbenutzerbetrieb aber stark ein und sollte daher nur in Ausnahmefällen gewählt werden.

    Sperren Sie alle Datensätze einer Tabelle, wenn Sie bei einer Auswertung sicherstellen wollen, dass die Daten währenddessen nicht geändert werden.

    Die Sperrmechanismen gehören zu den Standardeinstellung von Access. Um die Netzwerk-Optionen einzustellen, rufen Sie den Befehl Extras > Optionen auf und wählen das Register "Weitere" aus. In der Optionsgruppe "Standard bei Datensatzsperrung" legen Sie fest, wie Access die Datensätze sperrt.

    In der Optionsgruppe "Standard bei Datensatzsperrung" stellt Access standardmäßig die Option "Keine Sperrung" ein. In diesem Fall wendet Access die optimistische Sperrmethode an. Wenn Sie sich für die Sperrmethode "Bearbeiteter Datensatz" entscheiden, verwendet Access die pessimistische Sperrung.

    In VBA können Sie die Datensatzsperrung mit den Methoden GetOption und SetOption einstellen:

        Application.GetOption ("Standard bei Datensatzsperrung")
        Application.SetOption "Standard bei Datensatzsperrung", 0

    Die Methode GetOption gibt die Standard-Sperrmethoden zurück. Die SetOption Methode ändert die Sperrmethode: Der Wert 0 entspricht der Option "Keine Sperrung", während die Optionen "Bearbeiteter Datensatz" und "Alle Datensätze" die Werte 1 und 2 besitzen.

     

    Die in ACCESS eingebaute Funktionen zur Replikation von Daten-banken sorgen dafür, dass alle neu eingegebenen Datensätze stets an alle Datenbanken des Replikationssatzes verteilt werden. Gleiches gilt für alle anderen Objekte der Datenbank, wie Formulare oder Module.

    Ein Beispiel für den Einsatz einer partiellen Replikation ist eine Firma mit mehreren Aussendienstmitarbeitern. Die von den Mitarbeitern eingegebenen Kundendaten werden zwecks Auswertung regelmäßig mit einer zentralen Datenbank repliziert.

    Aus Gründen der Sicherheit und Performance soll allerdings jeder Mitarbeiter nur die von ihm selbst eingegebenen Daten auf seinem Computer vorhalten. Die Replizierung darf also nur in eine Richtung - nämlich vom Aussendienstmitarbeiter zur Zentrale - durchgeführt werden. Zu diesem Zweck stellt ACCESS bei der Synchronize-Methode den Parameter Exchange zur Verfügung, über den die Richtung des Datenaustausches gesteuert werden kann.

    .Synchronize[.]

    Wenn die Replikation vom Aussendienstler aus eingeleitet wird, muss also unter Exchange die Konstante DBRepExportChanges angegeben werden.

    Da nun generell kein Datenfluss mehr von der Zentrale zum Aussendienstmitarbeiter stattfindet, werden auch keine Updates von Objekten der Zentrale übertragen.Gerade das würde jedoch die War-tung und die Fehlerbehebung erheblich erleichtern. Eine Replikation in beide Richtungen kommt aber trotzdem nicht in Frage, da ja weiterhin die Daten des Aussendienstmitarbeiters ausschliesslich lokal vor-gehalten werden sollen.

    Die Lösung besteht nun darin, die Datenbank in zwei getrennte Datenbanken aufzuteilen. Die erste Datenbank enthält alle Objekte, die von dem Ausendienstmitarbeiter zur Zentrale übertragen werden sollen. Dies sind in der Regel die einzelnen Tabellen der Datenbank-anwendung. Die Datenbank wird vom Aussendienstmitarbeiter aus dem Exchange-Wert DBRepExportChanges repliziert.

    Die zweite Datenbank enthölt alle Objekte, die von der Zentrale zum Aussendienstmitarbeiter übertragen werden sollen. dazu gehören Formulare, Berichte, Module oder auch Tabellen, deren Inhalt von der Zentrale vorgegeben wird (z.B. bestimmte Kategorien oder Branchenschlüssel). Diese Datenbank wird mit dem Parameter DBRepImportChanges repliziert. In bestimmten Fällen kann bei dieser Datenbank auch die Option DBRepImpExpChanges zum beidseitigen Datenaustausch eingesetzt werden. Wenn ein Aussendienst-mitarbeiter beispielseise eine neue Kategorie hinzufügt, wird diese dann automatisch zur Zentrale und damit auch zu allen anderen Aussendienstmitarbeitern übertragen.

     

    Beim Einsatz von Unterformularen ist es oftmals erforderlich, bestimmte Daten des Unterformulars im Hauptformular anzuzeigen.

    Um Aggregatdaten wie die Summe, die Anzahl, den Mittelwert oder die Varianz von Werten aus einem Unterformular in einem Hauptformular anzuzeigen, muß die Berechnung schon im Unterformular erfolgen.

    Um beispielsweise die Anzahl der Detaildatensätze des Unterformulars im Hauptformular anzuzeigen, legen Sie innerhalb des Unterformulars ein neues Textfeld an. Damit dieses Textfeld später nicht sichtbar ist, plazieren Sie es im Formularfuß und stellen die Sichtbar-Eigenschaft des Bereichs auf Nein ein.

    In die Steuerelementinhalt-Eigenschaft des neuen Textfeldes tragen Sie anschließend den Ausdruck zur Ermittelung der Datensatzanzahl ein.
    Bei einem Formular, in dem Artikeldatensätze angezeigt werden, könnte dieser folgendermaßen aussehen:

    =Anzahl([Artikel-Nr])

    Im Hauptformular erstellen Sie ein weiteres Textfeld, von dessen Steuerelementinhalt-Eigenschaft Sie auf das Steuerelement des Unterformulars verweisen.
    Hier muß ein Ausdruck in der Form

    [unterformular].[Formular]![steuerelementname]

    eingetragen werden. Der folgende Ausdruck geht davon aus, dass das Textfeld des Unterformulars den Namen Artikelzahl aufweist und das Unterformular den Namen Artikel Unterformular besitzt:

    =[Artikel].[Formular]![Artikelzahl]

    Wie bei allen Funktionen, die in die Eigenschaft Steuerelementinhalt eingetragen werden, brauchen Sie sich um die Aktualisierung der Feldinhalte nicht zu kümmern - dies wird von Access bei jeder Änderung automatisch erledigt.

    Neben der Funktion Anzahl zu Ermittlung der Datensatzanzahl stellt Access noch weitere Aggregatfunktionen zur Verfügung:

    Funktion Berechnung
    Summe Summe der Werte
    Mittelwert Durchschnitt der Werte
    Min niedrigster Wert
    Max höchster Wert
    StdAbw Standardabweichung der Werte
    Varianz Varianz der Werte

     

     
    Passwort vergessen? Kein Problem dieses Produkt ermöglicht das wiederherstellen von Microsoft Access Passwörtern. Außerdem bietet das Programm noch weitere Features wie z.B. eine detailierte Hilfedatei und Tool-Tips. 

    Ein Telefonbuch enthält üblicherweise im Kopfbereich den ersten und letzten Eintrag der aktuellen Seite. Dies erleichtert das Auffinden bestimmter Einträge erheblich.

    Als Beispiel dient ein Bericht, in dem Artikelnamen aufgelistet werden. Der Name des ersten und letzten Artikels einer Seite sollen jeweils im Seitenkopf ausgegeben werden. Plazieren Sie zu diesem Zweck im Kopfbereich ein Textfeld für den jeweils ersten Eintrag. Der Steuerelementinhalt-Eigenschaft weisen Sie einfach den Namen des gewünschten Feldes zu (in diesem Fall also Artikelname).

    In einem zweiten Textfeld namens txtArrayBis soll Access den letzten Eintrag der Seite anzeigen. Diese Information ist etwas schwieriger zu ermitteln. Access muß dazu die gesamten letzten Artikelnamen der einzelnen Seiten in einem ersten Formatierungsdurchgang ausfindig machen und in einem Zeichenketten-Array abspeichern. Die Deklaration dieses Arrays nehmen Sie im Deklarationsbereich des Berichtsmoduls vor. Zusätzlich definieren Sie eine weitere Variable, die den ersten Formatierungsdurchgang vom eigentlichen Ausdruck unterscheidet:

    Private ErsterDurchgang As Boolean
    Private aryFirmaBis() As String

    Sobald der Bericht geöffnet wird, muss der Inhalt der Variablen ErsterDurchgang auf True gesetzt werden. Dies bedeutet, dass der erste Formatierungsvorgang noch bevorsteht. Die Beim Öffnen-Ereignisprozedur hat dementsprechend den folgenden Aufbau:

    Private Sub Report_Open(Cancel As Integer)
        ErsterDurchgang = True
    End Sub

    Das Füllen des Arrays übernimmt die Beim Formatieren-Ereignisprozedur, die an den Seitenfuß geknüpft ist:

    Private Sub Seitenfuß_Format(Cancel As Integer, FormatCount As Integer)

        If ErsterDurchgang Then
            ReDim Preserve aryFirmaBis(Me.Page)
            aryFirmaBis(Me.Page) = Me!Firma
        End If

    End Sub

    Damit der Liste auch der allerletzte Eintrag des Berichts hinzugefügt wird, muß der Berichtsfuß ebenfalls an eine Ereignisprozedur geknüpft werden. Zusätzlich setzt diese Prozedur die Variable ErsterDruchgang auf False, um das Ende des Formatierungsdurchlaufs zu kennzeichnen:

    Private Sub Berichtsfuß_Format(Cancel As Integer, FormatCount As Integer)

        If ErsterDurchgang Then
            ReDim Preserve aryFirmaBis(Me.Page)
            aryFirmaBis(Me.Page) = Me!Firma
            ErsterDurchgang = False
        End If

    End Sub

    Beim nächsten Formatierungsdurchgang (bei dem die Seiten schließlich auch ausgedruckt werden) wird das entsprechende Element aus dem Array ermittelt und dem Textfeld txtArtikelBis zugewiesen. Die Ereignisprozedur Beim Formatieren des Seitenkopfes, in dem sich die Überschriften befinden, hat damit den folgenden Aufbau:

    Private Sub Seitenkopf_Format(Cancel As Integer, FormatCount As Integer)

        If Not ErsterDurchgang Then
            Me!txtFirmaBis = aryFirmaBis(Me.Page) 
        End If

    End Sub

     

    Access-97-Datenbank

    Mit der vorliegenden Datenbank ist die Überprüfung einer aktiven Internetverbindung sowie die Darstellung eines eigenen "kleinen" Webbrowsers unter Microsoft Access möglich. Hilfsmittel sind die Microsoft ActiveX-Komponenten Microsoft Browser und Microsoft Internet Control, die in ein Formular eingebunden werden müssen.

    In der nachfolgenden Funktion wird der zugewiesenen ActiveX Wert der URL in das Textfeld Text geschrieben.

    Erfolgt kein Eintrag, so haben wir einen FALSE-Wert, demnach auch keine aktive Internetverbindung.

    Private Sub Befehl4_Click()

        Text = IE.OpenURL(http://www.fullaccess.de)
        If Text = "" Then MsgBox "Es besteht keine Verbindung!"
        If Text <> "" Then MsgBox "Verbindung ist O.K. !" #

    End Sub

    Mit dem nachfolgenden Befehl weisen wir dem ActiveX Control eine http-Seite zu. Browser.Navigate "http://www.fullaccess.de" & Liste

     

    Mit Hilfe von Kompilerdirektiven können Sie bestimmte Programmteile von der Kompilierung ausnehmen.

    Ein praktisches Beispiel dafür sind Prozeduren, die Sie mit Debug-Code versehen haben. Dieser Code ruft spezielle Debug-Prozeduren auf, die Sie in einem dafür vorgesehenen Modul platziert haben. Wenn Sie die Testphase beendet haben und das Debug-Modul aus der Datenbank entfernen, führen die in den Prozeduren vorhandenen Aufrufe der Debug-Prozeduren natürlich zu einem Kompilierfehler. Setzen Sie in diesem Fall Kompilerdirektiven ein, um diesen Code von der Kompilierung auszunehmen.

    Im folgenden Beispiel wird der Programmcode zwischen der #If- und der #End If-Anweisung nur dann kompiliert, wenn die Kompilerkonstante den Wert True hat:

    #If DebugModus Then

    DieseProzedurGibtEsNicht

    #End If

    Die Definition der Kompilerkonstanten DebugModus nehmen Sie am einfachsten im Register Modul des Dialogfenster Extras, Optionen vor. Zur Definition der Konstante mit dem Wert True, geben Sie unter Bedingte Kompilierungsargumente den folgenden Ausdruck ein:

    DebugModus =-1

    Um der Konstanten den Wert False zuzuweisen, weisen Sie ihr den Zahlenwert 0 zu oder löschen Sie die komplette Definition. Letzteres ist möglich, da nichtdefinierte Kompilerkostanten stets den Wert False aufweisen.

     

    Die Wikipedia ist eine freie Enzyklopädie in mehr als 100 Sprachen. Jeder kann mit seinem Wissen beitragen und die Artikel direkt im Browser bearbeiten. Auf dieser Site wird Ihnen der Beriff "Microsoft Access" erklärt und was genau man unter Microsoft Access versteht. Schauen Sie doch einfach mal rein.

     

    Bei Formularen, denen große Datenmengen zugrunde liegen, können Filter die Arbeit erheblich erleichtern.

    Für jedes Formular können Sie einen individuellen Filter definieren und während der Laufzeit ein- und ausschalten.

    Um den Filter eines Formulars zu aktivieren und die gefilterten Datensätze anzuzeigen, setzen Sie die Eigenschaft FilterOn auf True. Dadurch wird derjenige Filter aktiviert, der momentan in der Formulareigenschaft Filter eingetragen ist.

    Als Filter muss hierbei der WHERE-Teil einer SQL-Abfrage eingetragen werden. Es folgen einige Beispiele:

    [Land] = "Deutschland"

    [Alter] < 18

    [Name] Like "N*"

    Betrachten Sie als Beispiel ein einfaches Formular, in dem Firmendaten anzeigt werden. Der in der Filter-Eigenschaft des Formulars eingetragene Filter des Formulars lautet folgendermaßen:

    [Firma] Like "A*"

    Eine Befehlsschaltfläche im Formularfuß erledigt das Aktivieren und Deaktivieren des Filters. Die Schaltfläche ist mit folgender Beim Klicken-Ereignisprozedur verknüpft:

    Private Sub btnFilter_Click()

        Me.FilterOn = Not Me.FilterOn

    End Sub

    Die folgende Beim Öffnen-Ereignisprozedur aktiviert den Filter bereits beim Öffnen des Formulars:

    Private Sub Form_Open(Cancel As Integer)

        Me.FilterOn = True

    End Sub

    Beachten Sie, dass der Filter beim Öffnen des Formulars nicht automatisch aktiviert wird. Auch wenn Sie das Formular mit einem aktivierten Filter in Formularansicht speichern, öffnet das Formular beim nächsten Mal ohne aktivierten Filter.

     

    In meiner Datenbank habe ich verschiedene Formulare vorbereitet. Aber wenn ich von einem Formular aus ein zweites Formular öffnen möchte, wird nicht zum aktuellen Datensatz gewechselt, sondern immer zum ersten Datensatz.

    Wie kann ich das zweite Formular so öffnen, dass automatisch zum aktuellen Datensatz vom ersten Formular gewechselt wird?

    Mit dem WhereCondition-Parameter der OpenForm-Methode können Sie die Daten einschränken, die das Formular anzeigen soll (z.B. nur den aktuellen Datensatz aus Ihrem ersten Formular).

    Die zweite Möglichkeit wäre die FindFirst-Methode, die Sie in der BeimLaden-Ereignisprozedur des Formulars verwenden können. Damit wechselt das Formular beim Öffnen zum gefundenen Datensatz.

    Wie kann man in Erfahrung bringen, ob in einem gefilterten Formular Daten enthalten sind?

    Mit Hilfe der CurrentRecord-Eigenschaft können Sie den aktuellen Datensatz eines Formulars ermitteln, ob gefiltert oder ungefiltert.

    Wenn CurrentRecord nicht 0 ist, dann enthält das Formular momentan mindestens einen gespeicherten Datensatz. Es kann aber auch vorkommen, dass der Benutzer gerade einen neuen Datensatz bearbeitet. In diesem Fall hat die CurrentRecord-Eigenschaft trotzdem den Wert 0. Hier schafft die NewRecord-Eigenschaft (True für neue Datensätze) Abhilfe.

    Eine allgemeine Eigenschaft-Funktion namens HasRecords, die feststellt, ob ein Formular Datensätze enthält, könnte also so aussehen:

    Private Property Get HasRecords() As Boolean

        If Nz(Len(Me.RecordSource), 0) = 0 Then 
            'Formular hat keine Datensatzherkunft
            HasRecords = False
        Else
            HasRecords = Me.CurrentRecord <> 0 And Not Me.NewRecord 
        End If

    End Property

    Diese schreibgeschützte Eigenschaft können Sie in jedem beliebigen Formular verwenden.

    Das Office 97 Service Release 1 (SR-1) ist eine Zusammenstellung von Updates für Office 97, die es Benutzern unterschiedlicher Versionen von Office erleichtert, Dateien gemeinsam zu verwenden. Service Release 1 mit umfangreichen Bugfix. 

    In vielen Fällen ist es erforderlich, einem Formular beim Öffnen bestimmte Informationen zu übergeben.
    So kann es bei einem Adressenformular beispielsweise erforderlich sein, direkt nach dem Öffnen einen bestimmten Adressendatensatz oder den neuen leeren Datensatz anzuzeigen. Ein einfacher Weg ist hierbei die Verwendung globaler Variablen, die vor dem Öffnen mit Werten (z.B. der Nummer der anzuzeigenden Adresse) versehen werden. Innerhalb der BeimÖffnen-Ereignisprozedur des Formulars können diese Variableninhalte nun ausgewertet werden.

    Eine bessere Möglichkeit zur Übergabe von Informationen an Formulare stellen die so genannten Öffnungsargumente zur Verfügung.

    Der Nachteil dieser Vorgehensweise ist allerdings, dass Sie das Formular zwecks Wiederverwendung nicht ohne weiteres in eine andere Datenbank kopieren können. Hierbei müssen Sie nämlich darauf achten, daß Sie die Definition der globalen Variablen ebenfalls kopieren.

    Die OpenForm-Aktion besitzt einen Parameter mit dem Namen OpenArgs, mit dessen Hilfe dem zu öffnenden Formular Daten in Form eines Variant-Ausdrucks übergeben werden können.

    Der folgende Ausdruck übergibt dem Formular Adressen beispielsweise die Adressennummer 3:

    DoCmd.OpenForm FormName:="Adressen", OpenArgs:=3

    Innerhalb der BeimÖffnen-Ereignisprozedur des Adressenformulars kann das Öffnungsargument nun ausgewertet werden. Zu diesem Zweck stellen alle Formulare die Eigenschaft OpenArgs zur Verfügung, die den Zugriff auf die übergebenen Daten erlaubt.

    Die folgende Prozedur liest die Datensatznummer aus dem Öffnungsargument aus und positioniert den aktuellen Datensatz auf die passende Adresse:

    Private Sub Form_Open(Cancel As Integer)

    'Wenn kein Öffnungsargument angegeben wurde,
    'soll das Formular normal geöffnet werden
        If Not IsNull(Me.OpenArgs) Then
    Select Case Me.OpenArgs Case "Neu"
    'Auf den neuen Datensatz positionieren
    DoCmd.GoToRecord Record:=acNewRec
    Case Else
    'Primärschlüsselfeld aktivieren
    Me!AdresseNr.SetFocus
    'Nach Adressennummer suchen
    DoCmd.FindRecord Me.OpenArgs
    End Select
        End If

    End Sub

    Sollte das Öffnungsargument den Text Neu enthalten, positioniert die Prozedur automatisch auf den neuen Datensatz.

    Obwohl der Datentyp des Öffnungsarguments Variant ist, können einem Formular keine Informationen in Form eines Variant-Arrays übergeben werden.

    Wenn Sie trotzdem mehrere Informationen übergeben möchten, müssen Sie diese hintereinander in der OpenArgs-Zeichenkette anordnen, beispielsweise mit einem Hochkomma als Trennzeichen, und nachher wieder voneinander trennen.

     

    Das Aktualisierungsintervall, das Sie mit dem Befehl Extras / Optionen festlegen, gilt für Datenblätter. Ein Formular besitzt unabhängig davon eigene Netzwerkeigenschaften. Die Aktualisierung des Formularbildschirms müssen Sie mit Hilfe der Refresh-Methode programmieren.

    Nutzen Sie die Methode Refresh, um die Anzeige des Formulars zu aktualisieren:

    Forms![Name].Refresh

    Die Methode Refresh zeigt die geänderten Daten an und markiert gelöschte Datensätze mit dem Text #Gelöscht. Abfragen werden jedoch nicht erneut ausgeführt. Auch die Sortierung der Datensätze und berechnete Felder werden nicht aktualisiert.

    Um sicherzustellen, dass Access alle Daten aktualisiert, rufen Sie den Befehl Datensätze / Filter / Sortierung entfernen auf. Denselben Effekt erreichen Sie bei der Formularprogrammierung mit der Methode Requery, die Sie zum Beispiel im Klick-Ereignis einer Schaltfläche hinterlegen können.

    Forms![Name].Requery

    Beachten Sie, dass die Requery-Methode die Position des Datensatzzeigers verändern kann, so dass der Anwender den aktuellen Datensatz erneut auswählen muss.

     

    Ich möchte ein kleines Softwareinventar machen.

    Wie kann ich über ein Kombinationsfeld den User auswählen, damit die ihm zugewiesene Software aufgelistet wird?

    Im Moment habe ich drei Tabellen: Usertabelle, Softwaretabelle und eine Zwischentabelle, wo die den Usern zugewiesene Software gespeichert sind.

    Access-97-Datenbank mit Usern und Software.

    Mit den drei Tabellen haben Sie schon den richtigen Start. Es ist anzunehmen, dass die Tabellen und deren Beziehungen ungefähr so aussehen: siehe Abbildung 1 unten

    Über ein Kombinationsfeld können Sie auch eine Suchmöglichkeit im Formular anbieten. Das Kombinationsfeld soll alle User anzeigen und zum ausgewählten User wechseln. Erstellen Sie dafür ein Kombinationsfeld mit folgender Datensatzherkunft:

    SELECT UserNr, User FROM Usertabelle ORDER BY User;

    Diese Datensatzherkunft gibt eine Liste aller User zurück. Bei der Auswahl eines Users aus dieser Liste wird folgende Ereignisprozedur NachAktualisierung ausgeführt, um zum gesuchten User zu wechseln:

    Private Sub cmbUser_AfterUpdate()

        Dim rstClone As Recordset

        If Not IsNull(Me!cmbUser) Then

            Set rstClone = Me.RecordsetClone
            rstClone.FindFirst "UserNr=" & Me!cmbUser

            If Not rstClone.NoMatch Then
                'zum gefundenen Datensatz wechseln
                Me.Bookmark = rstClone.Bookmark
            End If

        End If

    End Sub

    Diese Prozedur setzt die Formulareigenschaft RecordsetClone ein, um innerhalb der Datensatzgruppe des Formulars zu suchen. Als Kriterien der FindFirst-Methode wird ein String mit der versteckten Spalte des Kombinationsfelds aufgebaut, die die Usernummer enthält.

     

    Ist es möglich, das Erscheinungsbild des Parameterfensters zu verändern, in dem man die Parameter bei einer Abfrage eingeben muß? Oder ist es vielleicht sogar möglich, ein Formular an die Abfrage zu binden, in dem man direkt alle Parameter eingeben kann?

    Das QueryDef-Objekt bietet eine Parameter-Auflistung, die die Parameterwerte einer Abfrage enthält. Diese Werte kann man natürlich auch mit VBA setzen.

    Man könnte sich vorstellen, ein Formular zu entwickeln, in dem man diese Parameterwerte eingibt. Aufgrund der eingegebenen Werte können Sie das QueryDef-Objekt dynamisch erstellen und ausführen:

    Dim db As Database
    Dim qry As QueryDef
    Dim rst As Recordset

    Set db = Currentdb
    Set qry = db.QueryDefs("qryMeineAbfrage")

    'Parameter mit Formular-Werten füllen

    qry.Parameters("Parameter1") = Me!txtParameter1
    qry.Parameters("Parameter2") = Me!txtParameter2
    qry.Parameters("Parameter3") = Me!txtParameter3

    Set rst = qry.OpenRecordset

    Auf dieser Site präsentiert Ihnen Sebastian Ritter viele Themenbereiche rund um das Thema Microsoft Access.

    In der Rubrik Access Tipps und Downloads werden Ihnen eine Vielzahl von Beispielen zur Verfügung gestellt.

    Der Access-Forum-Bereich bietet Ihnen die Möglichkeit sich mit anderen Besuchern austauschen und so direkt von den Erfahrungen anderer Programmierer zu profitieren.

    Hier kann auch eine CD mit Access-Tippdatenbanken, ASP-Datenbanken etc. bestellt werden.

     

    Fehler beim Datenzugriff lassen sich besonders schwer lokalisieren, wenn die betreffenden Tabellen via ODBC in Access eingebunden sind.

    Verwenden Sie die Errors-Auflistung, um Datenzugriffsfehler aufzuspüren.

    Bei jedem Laufzeitfehler, der im Zusammenhang mit einem Datenzugriff steht, wird die Errors-Auflistung mit mehreren Error-Objekten gefüllt. Jedes dieser Objekte repräsentiert einen Fehler, der in einer bestimmten Datenzugriffsschicht aufgetreten ist. Welche Schicht dies jeweils ist, lässt sich mit Hilfe der Source-Eigenschaft der Error-Objekte ermitteln. Die Beschreibung des Fehlers ist in der Description-Eigenschaft enthalten.

    Das folgende Beispiel provoziert einen Laufzeitfehler. Dazu wird versucht, Daten aus einer nicht existierenden Tabelle abzufragen:

    Sub ErrorsDemo()

        Dim Fehler As Error
        Dim DB As DAO.Database
        Dim R As DAO.Recordset

        On Error GoTo Err

        Set DB = CurrentDb()
        Set R = DB.OpenRecordset("SELECT * FROM ExistiertNicht")

        Exit Sub

    Err:
        For Each Fehler In Errors
            Debug.Print Fehler.Source, Fehler.Description
        Next Fehler
        Exit Sub

    End Sub

    Im Testfenster wird der folgende Text ausgegeben:

    DAO.Database Zugrunde liegende Tabelle oder Abfrage 'ExistiertNicht' nicht gefunden.

     

    Access stellt keine direkte Funktion zur Verfügung, um innerhalb eines Formulars festzustellen, ob momentan der erste oder der letzte Datensatz angezeigt wird.

    Mit Hilfe einer geklonten Datensatzgruppe lässt sich dies jedoch leicht feststellen.

    Die VBA-Funktion CheckRecord erwartet beim Aufruf eine Referenz auf ein bestimmtes Formular. Das Ergebnis ist einer der folgenden Werte:

    Wert Bedeutung
    0 Es wird weder der erste noch der letzte Datensatz angezeigt
    -1 Es wird der erste Datensatz angezeigt
    1 Es wird der letzte Datensatz angezeigt
    -2 Es wird ein neuer Datensatz angezeigt

    Die Funktion hat den folgenden Aufbau:

    Function CheckRecord(FormObj As Form)

        Dim R As Recordset
        Dim Anzahl As Long

        If FormObj.NewRecord Then
            CheckRecord = -2
            Exit Function
        End If

        Set R = FormObj.RecordsetClone
        R.MoveLast
        Anzahl = R.RecordCount
        R.Bookmark = FormObj.Bookmark

        Select Case R.AbsolutePosition

            Case 0
                CheckRecord = -1
            Case Anzahl - 1
                CheckRecord = 1
            Case Else
                CheckRecord = 0

        End Select

    End Function

    Zunächst wird mittels der NewRecord-Eigenschaft überprüft, ob ein neuer Datensatz aktiv ist. Wenn dies nicht der Fall ist, wird mit Hilfe der RecordsetClone-Eigenschaft eine Datensatzgruppe erzeugt, die exakt die gleichen Datensätze enthält, die auch dem Formular zugrunde liegen.

    Nach Ermittlung der Anzahl der Datensätze wird durch Austausch von Lesezeichen (Bookmark-Eigenschaft) innerhalb der Datensatzgruppe der gleiche Datensatz wie im Formular aktiviert. Die Überprüfung, welcher Datensatz aktiv ist, erfolgt schließlich mit Hilfe der AbsolutePosition-Eigenschaft, die die Nummer des aktuellen Datensatzes enthält.
    Wenn beispielsweise der erste Datensatz aktiv ist, besitzt die Eigenschaft den Wert 0; beim letzten Datensatz den Wert Anzahl -1.

     
    Access-home ist eine Site von Thomas Garhammer. Der Newsletter ist ein gemeinsamer Service von Access-home und Access-Paradies. 
    Diese Bildergallerie enthält über 14.000 Bildsymbole, sortiert nach Themenbereiche, die Sie kostenlos in Ihre Anwendungen einbinden können.
     

    Auch ein laufender Zähler der Datensätze in Abfragen kann mit Hilfe eine Unterabfrage erzeugt werden.

    1 Ziehen Sie die Tabelle Bestellungen in den Abfrageentwurf.

    2 Wählen Sie das Felder Kunden-Code als Ausgabefeld aus.

    3 Jetzt fehlt noch das gewünschte Kriterium für das zusätzliche Feld Laufende Nummer.

    Geben Sie in das leere Feld folgende SQL-Anweisung ein:

    Laufende Nummer: (Select Count (*) FROM [Bestellungen] as Temp WHERE
    [Temp].[Bestell-Nr] < [Bestellungen].[Bestell-Nr])+1

     
    Von einem Datenbankformblatt möchte ich mit einem Schalter (Visual.Basictool) eine auf CD ausgelagerte Bilddatei, die dem Datensatz zugeordnet ist, aufrufen und sichtbar machen. Wie geht das?

    Sie müssen im Beim Anzeigen-Ereignis des Formulars die Bilddatei einer Eigenschaft des Bild-Steuerelements zuweisen.

    Alternativ dazu können Sie Ihr Formular auch mit einer Schaltfläche versehen, mit deren Hilfe Sie das Dialogfenster Objekt einfügen öffnen. In das Beim Klicken-Ereignis der Schaltfläche gehört dann eine Ereignisprozedur, die wie folgt aussehen sollte.

    Sub BtnNeu_Click()

        'Beim Auftreten eines Laufzeitfehlers
        'wird mit der nächsten Anweisung fortgefahren
       
        On Error Resume Next
        'Öffnet den Dialog Objekt einfügen
       
        Me!oleBild.Action = acOLEInsertObjDlg
       
        'Deaktiviert alle aktivierten Fehlerbehandlungsroutinen
        On Error GoTo 0

    End Sub

    Folgende Features zeichnen die Software DVD-Datenbank aus:

    • Einfaches Hinzufügen, Löschen und Bearbeiten von DVD-Informationen
    • Komfortable und umfangreiche Suchfunktionen
    • Import-/Export-Schnittstellen für den Datenaustausch im proprietären DVD-Datenbank-Format
    • Benutzerdefinierter Export der wichtigsten Daten in den Formaten Text, XML, Microsoft Excel und Microsoft Access
    • Definition eigener Filter zur schnellen Kategorisierung von DVD-Beständen
    • DTP-ähnlicher Bericht-Designer für ansprechende Reports
    • Verleihwesen mit Alarmfunktion
    • 3 frei verfüg- und konfigurierbare Felder für eigene Informationen
    • Anpassbare Dropdown-Felder
    • Verwalten mehrerer, unterschiedlicher Datenbestände
    • Flexibler Listen-Designer
     
    Ist es möglich eine Abfrage zu erstellen damit Access bei der Eingabe eines Datensatzes in eine bestehende Tabelle sofort erkennt, ob die eingegebene Händleradresse bereits in der Datenbank vorhanden ist? Und zwar nicht nur in der bearbeiteten Tabelle, sondern auch in anderen Tabellen der gleichen Datenbank?

    Hierzu gibt es zwei Lösungsvorschläge.

    Wenn Sie bei der Eingabe prüfen möchten, ob die Adresse bereits in der bearbeiteten Tabelle vorhanden ist, legen Sie für das Adressfeld einen Index an, so daß Duplikate nicht erlaubt sind. Bei der Eingabe einer schon vorhandenen Adresse wird Access sich melden und die Eingabe verhindern. Wenn Sie auch andere Tabellen prüfen möchten, müssen Sie dies mit VBA programmieren. Ausserdem müssen Sie erst ein Formular für Ihre Tabelle anlegen. Im Formular gibt es ein Ereignis Before_Update (Vor_Aktualisieren), in dem Sie die Daten vor dem Speichern prüfen und ggf. verwerfen können.

    Bei Access-Berichten gibt es zahlreiche Möglichkeiten, die Daten zu gruppieren und zu sortieren. So erzielen Sie eine übersichtliche Darstellung. Sie können beispielsweise die Datensätze einer Jahresabrechnung nach dem Monat gruppieren. Zur besseren Übersicht beginnen Sie die Ausgabe jeder Gruppe auf einer neuen Seite.

    Zu diesem Zweck markieren Sie den Kopfbereich der gewünschten Gruppe, indem Sie beispielsweise auf den Titelbalken des Bereich klicken. Aktivieren Sie das Eigenschaftsfenster und stellen Sie hier die Eigenschaft Neue Seite auf Vor Bereich ein.

     

    Bei der Eingabe von Kriterien im QBE-Entwurfsbereich von Abfragen, werden die Benutzereingaben von Access automatisch in gültige SQL-Bedingungen umgewandelt.

    Unser Tipp: Verwenden Sie die BuildCriteria-Funktion, um diese Umwandlung auch von VBA aus durchzuführen.

    Wenn Sie im QBE-Bereich beispielsweise für ein numerisches Feld namens Postleitzahl das Kriterium ">10000 und <50000" eingeben, wird dies von Access in den folgenden SQL-Text umgewandelt:

    Postleitzahl>10000 And Postleitzahl<50000

    Mit Hilfe der BuildCriteria-Anweisung kann die Umwandlung auch innerhalb einer VBA Prozedur erledigt werden. Die Funktion benötigt dazu drei Informationen:

    • den Namen des Datenfeldes
    • den Datentyp des Datenfeldes
    • das vom Benutzer eingegebene Filterkriterium

    Mit diesen Informationen kann die folgende BuildCriteria-Anweisung ebenfalls den obigen SQL-Text erzeugen:

    BuildCriteria("Postleitzahl", dbLong, ">10000und <50000")

     

    Voraussetzung dafür ist, daß Sie den Druckertreiber Ihres Kollegen auf Ihrem Rechner installieren. Um den Bericht in eine Datei umzuleiten, wählen Sie den Menübefehl Datei>Drucken und aktivieren das Kontrollkästchen Druckausgabe in Datei umleiten. Beim Ausdruck werden Sie dann zur Eingabe eines Dateinamens aufgefordert.

    Die fertige Datei (in diesem Beispiel Bericht.prt) können Sie dann via Copy-Befehl von der DOS-Eigabeaufforderung an einen bestimmten Druckerport senden:

    copy Bericht.prt lpt1

     
    In einer Datenbank habe ich ein Datumsfeld, das manuell eingegeben werden soll. Basierend auf dieser Eingabe soll in einem anderen Feld ein Datum automatisch berechnet und angezeigt werden, das genau 3 Jahre in der Zukunft liegt. Beide Datumsfelder sind vom Typ "Datum, kurz".

    Die Funktion DateAdd bietet diverse Möglichkeiten, Datumswerte zu kalkulieren. Die Funktion nimmt einen Format-Parameter an, der bestimmt, was zum Datum addiert werden soll (z.B. Jahre, Monate usw.).

    In der Ereignisprozedur Nach Aktualisierung könnte man beispielsweise folgenden VBA-Code schreiben, um 3 Jahre in der Zukunft zu berechnen:

    Private Sub Datum1_AfterUpdate()

        If Not IsNull(Me!Datum1) Then 
            Datum2 = DateAdd("yyyy­, 3, Datum1) 
        End If

    End Sub

    Das Ergebnis der DateAdd-Funktion wird in das zweite Textfeld kopiert.

    Neuen Berichten weist Access automatisch ein Standardformat zu. Text- oder Bezeichnungsfelder erscheinen dadurch stets in einer bestimmten Schriftart.

    Mit dem Menübefehl Extras / Optionen definieren Sie eine Berichtsvorlage, aus der die Formatierungsattribute für neu angelegte Berichte übernommen werden.

    Öffnen Sie dazu den Optionen-Dialog von Access (Extras / Optionen) und aktivieren Sie das Register Formulare/Berichte. Im Feld Berichtsvorlage geben Sie nun den Namen des Berichts ein, aus dem Access die Formatierungen neuer Bericht entnehmen soll.

    Der Berichtsassistent ist von dieser Einstellung nicht betroffen, da er seine eigenen Vorlagen verwaltet.

     
    John L. Viescas ist Autor zahlreicher Fachbücher, wie "Running Microsoft Access 97" und "Running Microsoft Access 2000" (Microsoft Press). Auf seiner Homepage finden Sie Tipps und Tricks, Links und Downloads. Viescas Consulting Inc. bietet außerdem Beratung und Training speziell zu Access und SQL-Server.  

    Zu diesem Zweck kommt diesmal die API-Funktion GetSaveFileName zum Einsatz.

    Die Funktion erwartet genauso wie die Funktion GetOpenFileName ein Parameter des Typs OPENFILENAME. Damit die Option Mit Schreibschütz öffnen ausgeblendet wird, fügen Sie den Flags die Konstante OFN_HIDEREADONLY hinzu. Diese Konstante können Sie wie folgt deklarieren

    Public Const OFN_HIDEREADONLY = &H4

    und folgendermaßen setzen:

    Dim SaveDlg As OPENFILENAME

    With SaveDlg ' andere SaveDlg Mitglieder setzen
        Flags = OFN_HIDEREADONLY
    End With

    Die Funktion GetSaveFileName gibt einen Dateinamen zurück, die den Anwender aus dem Dialog ausgewählt hat:

    Declare Function GetSaveFileName Lib _
    "comdlg32.dll" Alias "GetSaveFileNameA" _
    (pOpenfilename As OPENFILENAME) As Long

     
    Spotlight Onlinemarketing ist eine Site von Peter Herzog.  
    Bei der Datenerfassung in einem Formular möchte ich mir bestimmte Felder des zuvor eingegebenen Datensatzes vorblenden lassen, so dass ich nur noch Veränderungen erfassen muss.

    Bei der Neuanlage eines Datensatzes bekommt der Anwender in der Regel einen komplett leeren Datensatz präsentiert.

    Oftmals wäre es jedoch vorteilhaft, wenn die einzelnen Datenfelder bereits mit den Inhalten eines anderen Datensatzes (beispielsweise des letzten Datensatzes) vorbelegt wären. Sie können den vorherigen Datensatz mit einer VBA-Funktion duplizieren und in den aktuellen Datensatz übernehmen.

    Der Anwender muss dann nur noch die Änderungen vornehmen.

    Eine solche VBA-Funktion finden Sie in unserer Tipps&Tricks-Rubrik unter Aktuellen Datensatz duplizieren

    Mit diesem Tool können Strukturen zum Textexport festgelegt werden, die auf beliebige Tabellen anwendbar sind. Dadurch ist es dem eingbauten Access-Exportassistenten überlegen. Bereitgestellt von Jochen Rieseberg.

    Abfragen werden oft eingesetzt, um mehrere Tabellen miteinander zu verbinden und deren Daten in einem Datenblatt anzuzeigen. Dabei kann es vorkommen, dass zwei Tabellen ein Datenfeld mit gleichem Namen besitzen.

    Woran erkennen Sie aber, welches Feld aus welcher Tabelle stammt, wenn Sie beide Felder in das Entwurfsraster ziehen?

    Beachten Sie die Zeile Tabelle. Sie verrät Ihnen, mit welcher Tabelle Sie es gerade zu tun haben. Zur besseren Übersicht ist im Entwurfsraster die Zeile Tabellen enthalten. Sobald Sie ein Datenfeld dem Raster hinzufügen, wird in dieser Zeile der zugehörige Tabellenname angezeigt.

     

    Legen Sie dazu im Fußbereich der Gruppierungsebene ein neues Steuerelement mit dem folgenden Steuerelementinhalt an:

    =Format(Summe([Verkaufszahlen])/[txtGesamtsumme];"Prozentzahl")

    Damit dieser Ausdruck keinen Fehler verursacht, muss das Textfeld zur Berechnung der Gesamtsumme des Berichts den Namen txtGesamtsumme tragen. Die Funktion Format() sorgt schließlich dafür, dass die Prozentzahl entsprechend formatiert wird. Neben Summen und Prozentsätze können Sie natürlich noch andere Berechnungen durchführen. Access stellt zu diesem Zweck eine Reihe von Aggregatfunktionen wie Durchschnitt, Varianz und Standardabweichung zur Verfügung.

     

    Wenn eine Optionsgruppe an ein bestimmtes Datenfeld gebunden wird, kann durch die Auswahl einer bestimmten Option ausschließlich ein Zahlenwert in das Feld eingetragen werden.

    In vielen Fällen ist es aber erforderlich, dass die Optionsgruppe an ein Textfeld gebunden wird und dementsprechend je nach Auswahl der Option verschiedene Texte in dem Datenfeld gespeichert werden.

    Um dies zu realisieren, legen Sie innerhalb des betreffenden Formulars eine ungebundene Optionsgruppe mit entsprechend vielen Optionsfeldern an. Um dieses Beispiel nachzuvollziehen, weisen Sie der Optiongruppe den Namen optOptionsgruppe zu. Außerdem tragen Sie in die Marke-Eigenschaft (englisch Tag) den Namen des Datenfeldes ein, an das die Optionsgruppe gebunden werden soll.

    Als nächstes plazieren Sie innerhalb der Optionsgruppe mehrere Optionsfelder und weisen diesen mittels der Optionswert-Eigenschaft eindeutige Werte zu. Beginnen Sie hierbei mit dem Wert 1. Wenn Ihre Optionsgruppe beispielsweise fünf Optionsfelder beinhaltet, numerieren Sie diese von 1 bis 7 durch.

    Das Eintragen der betreffenden Texte in das Datenfeld erledigt Sie mit Hilfe einer Ereignisprozedur, die Sie an das BeimKlicken-Ereignis der Optionsgruppe knüpfen. Wenn Sie beispielsweise einen Wochentag in das Datenfeld eintragen möchten, könnte die Prozedur folgenden Aufbau haben:

    Private Sub optOptionsgruppe_Click()

        Dim Datenfeld As String
        'Name des Datenfeldes ermitteln
        Datenfeld = optOptionsgruppe.Tag
        ‘Wochentag in das Datenfeld eintragen

        Me(Datenfeld) = Choose(optOptionsgruppe.Value, "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag")

    End Sub

    Die Prozedur ermittelt zunächst über die Tag-Eigenschaft das Datenfeld, in der die Wochentage untergebracht werden sollen. Anschließend wird der passende Wochentag gemäß der ausgewählten Option eingetragen.

    Was nun noch fehlt, ist eine Ereignisprozedur, die die richtige Option bei der Auswahl eines neuen Datensatzes markiert. Dies Aufgabe übernimmt folgende Ereignisprozedur, die an die BeimAnzeigen-Ereigniseigenschaft des Formulars geknüpft ist:

    Private Sub Form_Current()

        Dim Datenfeld As String
        'Wird gerade der neue Datensatz angezeigt
        If Me.NewRecord = True Then
            'Wenn ja, dann abbrechen
            optOptionsgruppe.Value = Null
            Exit Sub
        End If

        'Name des Datenfeldes ermitteln
        Datenfeld = optOptionsgruppe.Tag

       'Richtige Option auswählen
       Select Case Me(Datenfeld)
            Case "Montag":     optOptionsgruppe.Value = 1
            Case "Dienstag":   optOptionsgruppe.Value = 2
            Case "Mittwoch":   optOptionsgruppe.Value = 3
            Case "Donnerstag": optOptionsgruppe.Value = 4
            Case "Freitag":    optOptionsgruppe.Value = 5
            Case "Samstag":    optOptionsgruppe.Value = 6
            Case "Sonntag":    optOptionsgruppe.Value = 7
            Case Else:         optOptionsgruppe.Value = Null
        End Select

    End Sub

     
    Wie kann man Datensätze die mttels einer Löschabfrage aus einer Tabelle gelöscht wurden, in einer neuen Tabelle abspeichern?

    Zur Lösung des Problems müssen Sie in zwei Schritten vorgehen:

    1. Erzeugen Sie eine Tabellenerstellungsabfrage (SELECT INTO) und geben Sie hierbei exakt die gleiche WHERE-Bedingung an, die Sie auch beim Löschen der Daten verwenden. Hierdurch werden die zu löschenden Daten in die neue Tabelle kopiert, die außerdem neu angelegt wird. Sollte die Tabelle bereits existieren, verwenden Sie eine INSERT INTO-Anweisung.
    2. Anschließend können Sie die Daten mit Hilfe einer DELETE-Anweisung aus der Tabelle löschen.

    Viele der eingebauten VBA-Prozeduren laufen bei der Übergabe von Variablen mit Inhalt Null auf einen Fehler.

    Verwenden Sie die Nz-Funktion, um den Wert Null in eine beliebige Zeichenkette umzuwandeln.

    Die Nz-Funktion erwartet einen Ausdruck des Typs Variant als Parameter. Sollte dieser den Wert Null haben, gibt die Funktion eine leere Zeichenkette ("") zurück:

    Nz(Null)

    Wenn das Ergebnis nicht Null ist, gibt die Funktion den übergebenen Parameter ohne Änderung zurück.

    Alternativ kann zusätzlich noch eine zweite optionale Zeichenkette angegeben werden. Diese bestimmt das Ergebnis der NZ-Funktion im Null-Fall. Der folgende Ausdruck hat dementsprechend den Text "(Null)" zum Ergebnis:

    Nz(Null, "(Null)")

     
    Dienstleistungsangebot von Avenius: Individual Datenbank Entwicklung auf der Basis von Access. 
    Wie kann ich in einem Formular mit einem Button den aktuellen Datensatz in eine andere Tabelle verschieben?

    Bei einem Klick auf den entsprechenden Button sollte eine Anfüge- und eine Löschabfrage gestartet werden. Die Anfügeabfrage fügt den Datensatz an eine andere Tabelle an, die Löschabfrage löscht ihn aus der aktuellen Tabelle.

    Der Start der Abfragen kann per Makro oder VBA erfolgen.

    Auf dieser Site finden Sie FAQ´s, jede Menge Links und Downloads zum Thema Microsoft Access. 

    Werteliste sind praktisch, da sie die Eingabe erleichtern und schnell erstellt sind. Oft ist es jedoch besser, wenn nicht nur der Wert, sondern auch eine Zuordnung, die den Wert genauer beschreibt, mit in der Liste aufgeführt wird.

    Sie haben beispielsweise ein Datenfeld für die Vorwahl von Städten. Nur die verschiedenen Vorwahlen in einer Werteliste aufzuführen vereinfacht die Eingabe jedoch nicht unbedingt, da die Zuordnung zur Stadt fehlt.

    Erstellen Sie mehrspaltige Wertelisten, die zusätzlich eine Überschrift besitzen.

    Für das oben genannte Beispiel können Sie eine zweispaltige Liste erzeugen. Besonders wichtig ist, dass Sie im Register Nachschlagen in der Eigenschaft Spaltenanzahl den richtigen Wert eintragen. Für das Beispiel also eine 2.

    In der ersten Spalte soll immer der Ort und in der zweiten Spalte dann die Vorwahl angezeigt werden. Gespeichert werden soll die Vorwahl der Stadt. Die Eigenschaft Gebundene Spalte muss daher ebenfalls den Wert 2 erhalten. Da Sie im Kombinationsfeld Überschriften anzeigen lassen wollen, muss die gleichnamige Eigenschaft auf Ja geändert werden.

    Jetzt können Sie in der Datensatzherkunft die Liste eingeben und zwar in der Form:

    Überschrift 1;Überschrift 2;Wert 1 der Spalte1;Wert 1 der Spalte 2;Wert 2 der Spalte 1;Wert 2 der Spalte 2; ... ;Wert n der Spalte 1;Wert n der Spalte 2

    Mit der Eingabe

    Stadt;Vorwahl;Düsseldorf;0211;Duisburg;0203;Köln;0221;
    München;089;Hamburg;040

    bei der Datensatzherkunft erhalten Sie eine Werteliste, wie sie in der folgenden Abbildung dargestellt ist.

     

    Oft sollen bestimmte Steuerelemente nach dem Vorbild anderer Steuerelement formatiert werden.

    Anstatt alle Eigenschaften eines Steuerelements einzeln zu übernehmen, übertragen Sie einfach das komplette Format an ein anderes Steuerelement.

    Das Format übertragen Sie wie folgt:

    1. Markieren Sie das Steuerelement, dessen Eigenschaften Sie auf ein anderes kopieren möchten. 
    2. Klicken Sie dann auf das Format übertragen-Symbol (den Malerpinsel) in der Symbolleiste. 
    3. Klicken Sie auf das Steuerelement, auf das Sie die Eigenschaften übertragen möchten.

    Um das gewünschte Format mehrerer Steuerelemente zu übertragen, führen Sie einen Doppelklick auf das Format übertragen-Symbol durch. Klicken Sie dann nacheinander auf alle Steuerelemente, die das Format erhalten sollen. Um diesen Vorgang zu beenden, klicken Sie erneut auf das Format übertragen-Symbol.

     
    Dieses kostenlose Tool zur Konvertierung von Formularen und Berichten in Datenzugriffsseiten ist komfortabler als als das in Access 2000 eingebaute Werkzeug. 

    Sie wollen die Datenfelder einer Tabelle mittels eines Kombinationsfeldes zur Auswahl stellen, um beispielsweise einen Suchen-Dialog zu realisieren, in dem zunächst ein Tabellenfeld ausgewählt und anschließend ein zu diesem Feld passender Suchtext eingegeben werden kann.

    Theoretisch könnten Sie eine Werteliste erstellen, die die Feldnamen der Tabelle beinhaltet. Sobald aber Änderungen an der Tabelle vorgenommen werden oder Felder hinzukommen, muss auch die Werteliste geändert werden.

    Die Eigenschaft Herkunftstyp im Register Nachschlagen des Tabellenentwurfbereichs stellt noch einen dritten Typ mit dem Namen Feldliste zur Verfügung.

    Wählen Sie diesen Typ aus und tragen Sie bei Datensatzherkunft die Tabelle der Abfrage ein, deren Datenfeldnamen angezeigt werden sollen.

    In der Datenblattansicht können Sie das Ergebnis überprüfen. Ihnen stehen jetzt die Felder der angegebenen Tabelle zur Auswahl.

     

    Diese Site wird präsentiert von Andreas Reichow. Sie bietet Ihnen umfangreiche Informationen zu den folgenden Themenbereichen:

    • Tabellen
    • Abfragen
    • Formularen
    • Berichten 
    • Makros

    Im Downloadbereich finden Sie Tools, Beispiele und fertige Anwendungen zur freien Verfügung.

    Ein besonderer Leckerbissen auf dieser Site ist das Access Lexikon, das viele wichtige Begriffe aus der Access-Welt erklärt.

    Damit ein Feld dem Wert entsprechend automatisch formatiert wird, benötigen Sie eine BeimAnzeigen-Ereignisprozedur, die Access bei jedem Datensatzwechsel ausführt. Eine Funktion, die negative Werte in Rot anzeigt, sieht wie folgt aus:

    Private Sub Form_Current()

        If Feld1>=O Then
            Me![Feld1].ForeColor=0 ' schwarz
        Else
            Me![Feld1].ForeColor=0 255 ' rot
        End If

    End Sub

    Bitte beachten Sie, dass diese Funktion nur bei Formularen richtig funktioniert, in denen die Eigenschaft Standardansicht auf ein Einzelnes Formular gesetzt ist. Wenn Sie nämlich eine Steuerelement-Eigenschaft in der Ansicht Endlosformular ändern, wirkt sich die Farbänderung auf alle sichtbaren Steuerelemente aus.
     

    Beim Export in eine Textdatei können Sie die Daten - beispielsweise aus einer Tabelle - formatiert oder unformatiert in einer Textdatei speichern.

    Speichern Sie die exportierte Textdatei formatiert.

    Wählen Sie zunächst aus dem Menü Datei den Befehl Exportieren aus. Daraufhin wird das Dialogfenster Exportieren von... angezeigt, dass das Kontrollkästchen mit Formatierung enthält.

    Wenn Sie dieses Kontrollkästchen aktivieren, werden die betreffenden Daten kommentarlos in eine Textdatei exportiert. Andernfalls wird das Dialogfenster Textexport-Assistent geöffnet.

    Dort können Sie unter anderem spezielle Trennzeichen (für Felder, Text, Datum oder Zeit) oder Dezimalzeichen festlegen. Außerdem können Sie spezielle Exporteinstellungen als Spezifikation speichern und später wieder verwenden.

     

    Dieses Buch ist ein unentbehrliches Nachschlagewerk für alle Access 7-Anwender. Der Rundgang richtet sich schwerpunktmäßig an Einsteiger. Der Referenzteil erklätert, wie Sie eine Access-Datenbank individuell einrichten. Sie erfahren, wie Sie effektiv Tabellen mit relationalen Verknüpfungen anlegen und wie Sie Abfragen, Formulare und Berichte gestalten. Auch der Datenaustausch mit anderen Anwendungsprogrammen sowie der Einsatz von Access in Mehrbenutzerumgebungen werden ausführlich erläutert. Ein eigener Teil widmet sich der Makro-Programmierung und der Arbeit mit Access Basic/VBA.

    Aus dem Inhalt

    • Einführung in die Programmierung und vollständige Referenz
    • Artikeldatenbank mit zahlreichen Speziallösungen zu Access 7.0
    • Replizieren und Sichern von Datenbanken
    • Zusammenarbeit mit anderen Office-Produkten von Microsoft
    • Access im Netzwerk einsetzen

    Leider müssen wir Ihnen mitteilen, dass das Access 7.0 Buch für Windows 95 nicht mehr im Handel erhältlich ist.

    Bei Amazon.de gibt es die Möglichkeit alte nicht mehr im Handel erhältliche Bücher gebraucht zu kaufen. Schauen Sie doch einfach mal bei Amazone.de vorbei. Vielleicht haben Sie ja Glück.

     

    Beim Löschen von Datensätzen ist immer Vorsicht geboten! Einmal gelöschte Daten können in Access nicht wieder hergestellt werden. Sie sollten also auf Nummer sicher gehen, besonders, wenn Sie viele Daten löschen.

    Mit einer Löschabfrage können Sie sich vor dem Löschen ansehen, welche Daten gelöscht werden.

    Erstellen Sie wie gewohnt eine Auswahlabfrage, fügen Sie Felder hinzu und definieren Sie Kriterien, so dass im Datenblatt der Abfrage nur noch die Datensätze angezeigt werden, die gelöscht werden sollen.

    Wandeln Sie dann die Auswahlabfrage in eine Löschabfrage um, indem Sie den Menübefehl Abfrage/Löschen wählen. Anschließend können Sie die Löschaktion mit einem Klick auf das Symbol Ausführen starten. Bestätigen Sie die Sicherheitsabfrage mit Ja, werden die ausgewählten Daten unwiderruflich gelöscht.

     
    Ich möchte in einigen Formularen verhindern, dass der Benutzer mit "Copy und Paste" ganze Datensätze kopiert und einfügt - die Daten sollen immer Feld für Feld eingegeben werden, da daran gewisse Aktionen geknüpft sind. Wie kann ich das erreichen?

    Bei solchen Dateneingaben würde ich Ihnen zunächst empfehlen, das Formular im Dialog-Modus zu öffnen, z.B.:

    DoCmd.OpenForm "MyForm", WindowMode:=acDialog

    Auf diese Weise können Sie verhindern, daß die Menübefehle Kopieren und Einfügen ausgeführt werden können. Die Formular-Eigenschaft Kontextmenü sollten Sie auch auf "Nein" setzen, damit diese Befehle nicht mit der rechten Maustaste erreichbar sind. Zuletzt sollten Sie auch die Tasten Strg+C, Strg+X und Strg+V abfangen und ggfs. ignorieren:

    Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

        'es darf nicht aus der Zwischenablage
        'eingefügt werden! Strg+V also ignorieren

        If KeyCode = 86 Then KeyCode = 0

    End Sub

    Makros sind im Prinzip eine feine Sache. Mit ihrer Hilfe können durch Aufzeichnung von Aktionen immer wiederkehrende Arbeitsabläufe automatisiert werden.

    Bei der Umsetzung komplexerer Aktionsabläufe mit Hilfe von Makros, beginnen jedoch deren Nachteile immer stärker ins Gewicht zu fallen.

    Das sind im Einzelnen:

    - Makros sind nicht sonderlich flexibel.
    - Makros erlauben keine Fehlerbehandlung.
    - Makros können nicht debuggt werden.
    - Makros sind in mde-Dateien offen zugänglich, können also nicht geschützt werden.

    Deshalb empfiehlt sich zweierlei:

    - Die Verwendung von VBA-Prozeduren anstelle von Makros
    - Die Konvertierung von vorhandener Makros in VBA-Code

     

    Markieren von Text in einem Feld

    Zweck Taste(n)
    Markierung um ein Zeichen nach rechts erweitern Umschalt+Nach-rechts
    Markierung um ein Wort nach rechts erweitern Strg+Umschalt+Nach-rechts
    Markierung um ein Zeichen nach links erweitern Umschalt+Nach-links
    Markierung um ein Wort nach links erweitern Strg+Umschalt+Nach-links

    Markieren eines Feldes oder Datensatzes

    Zweck Taste(n)
    Markieren des nächsten Feldes Tab
    Wechseln zwischen Bearbeitungs- und Navigationsmodus F2
    Wechseln zwischen dem Markieren des aktuellen Datensatzes und dem Markieren des ersten Feldes im aktuellen Datensatz Umschalt+Leertaste
    Erweitern der Markierung auf den vorherigen Datensatz (aktueller Datensatz markiert) Umschalt+Nach-oben
    Erweitern der Markierung auf den nächsten Datensatz (aktueller Datensatz markiert) Umschalt+Nach-unten
    Markieren aller Datensätze Strg+A oder Strg+Umschalt+Leertaste

    Erweitern einer Markierung in der Datenblattansicht

    Zweck Taste(n)
    Erweitern einer Markierung auf benachbarte Felder in derselben Zeile Nach-links bzw. Nach-rechts
    Erweitern einer Markierung auf benachbarte Zeilen Nach-oben bzw. Nach-unten
    Aufhebung der zuletzt vorgenommenen Markierung Umschalt+F8
    Deaktivierung des Erweiterungsmodus Esc

    Markieren und Verschieben einer Spalte in der Datenblattansicht

    Zweck Taste(n)
    Markierung der aktuellen Spalte oder Aufhebung der Spaltenmarkierung Strg+Leertaste
    Markierung der Spalte rechts von der aktuellen Spalte Umschalt+Nach-rechts
    Markierung der Spalte links von der aktuellen Spalte Umschalt+Nach-links
    Aktivierung des Verschiebemodus Strg+Umschalt+F8
     
    Auf dieser Site finden Sie Visual Basic News.  
    Auf dieser Seite finden Sie  

    Dieses Buch führt Sie schrittweise in die Arbeit mit Microsofts Datenbank Access 2.0 für Windows ein.

    Das schreibt der Handelsblatt-Kolumnist Michael Müller zu "Das Access 2.0 Buch":

    Mit neuen Programmen oder neuen Programmversionen ist es oft wie mit neuen Autos: Man hat die Prospekte studiert, Probefahrten gemacht und sich schließlich für ein Modell entschieden. Ein kurzer Blick ins Handbuch offenbart, wo der Scheibenwischer eingeschaltet wird und wie die Nebellampen angemacht werden - und dann geht's los.

    Den meisten Autofahrern reicht das so erworbene Wissen aus. Doch wer den Ölwechsel selbst erledigen will, wer die Zündung einstellen will oder sich sonst wie mit dem Auto beschäftigen will, der stößt bald an die Grenzen des mitgelieferten Handbuches. Auch wer ein neues Programm oder eine neue Programmversion zum ersten Male einsetzt, wird kurz im Handbuch nachblättern, welche Besonderheiten er bei der Installation zu beachten hat, und dann geht's los. Einfache Benutzerführung und interaktive Hilfefunktionen versorgen den Anwender mit allem, was er wissen muss.

    Das Handbuch wird dabei nur selten zu Rate gezogen und wenn doch, dann stellt sich oft genug heraus, dass das Handbuch kaum weniger komplex ist, als das Programm selbst. Das gilt für Datenbank Programme noch mehr, als etwa für Textverarbeitungen oder Tabellenkalkulationen. Schließlich sind Datenbankprogramme nicht nur für Anwender gedacht sondern in erster Linie für Entwickler. Entsprechend komplex sind diese Programme strukturiert: Sie müssen Programmierwerkzeuge für alle nur denkbaren Situationen bieten. Da macht auch Microsofts Usability-Paradepferd Access keine Ausnahme. Natürlich ist es lang her, dass Datenbank Anwender nach dem Programmstart lediglich ein blinkenden Punkt auf dem Monitor sahen und dann selbst weitersehen mussten.

    Access bietet dem Anwender wie dem Entwickler jede nur denkbare Hilfestellung. Doch trotz aller Usability ist Access nun mal ein professionelles Entwicklerpaket und entsprechen komplex. Wer sich ernsthaft mit dem Programm auseinandersetzen will, sucht bald nach einer Ergänzung zum Handbuch. Hier bietet sich "Das Access 2.0 Buch" von Manfred Hoffbauer und Christoph Spielmann an (Sybex Verlag, Düsseldorf, 1000 Seiten, DM 79,-).

    Das Buch ist in vier Teile gegliedert. Der erste Teil hilft beim Start mit Access 2.0, Installation Datenverwaltung, Datenauswertung und -präsentation werden hier ausführlich erläutert.

    Im zweiten Teil geht es um die tägliche Arbeit mit Access. Tabellen, Abfragen, Formulare und Berichte werden hier so vorgestellt, dass nicht nur Access-Neulinge das nötige Rüstzeug für die Arbeit mit der Datenbank bekommen; auch erfahrene Anwender können hier noch neues erfahren.

    Im dritten Teil geht es schließlich ans Eingemachte: Hier lernt man die hohe Schule der Datenbankarbeit. Neben der Datenbankadministration geht es hier hauptsächlich um die Kommunikationsmöglichkeiten, die Access 2.0 bietet. Der Einsatz im Netzwerk wird hier ebenso vorgestellt wie der Datenaustausch via DDE oder OLE.

    Der vierte Teil schließlich befasst sich mit dem Programmieren und enthält einen übersichtlicher Referenzteil. Trotz der trockenen Materie ist der 1000-Seiten Wälzer praxisnah aufgebaut. Die mitgelieferte Diskette enthält neben weiteren Texten zu Access und Beispielen zur Makroprogrammierung eine mit Access entwickelte Adressen- und Projektverwaltung, die Daten sogar per Modem faxen kann. Das nötige Faxprogramm findet sich auf der ebenfalls mitgelieferten CD dazu gibt's hier noch ausführliche Hilfeinformationen und weitere interessante Zusatzprogramme wie den Informationsmanager Idealist für Windows oder die Volltextdatenbank Info Recall. -- Michael Müller

     
    Auf der Web-Seite gibt es technische Informationen, Developer Tools auch für VBA, News, Demos. Software und Training Videos können online bestellt werden. FMS bietet außerdem Produkt Support, einen kostenlosen Newsletter und diverse Newsgroups, u.a. zu Access.  

    Abfragen sind in der Regel starr auf ein spezifisches Problem zugeschnitten. So können über ein Kriterium zum Beispiel alle Datensätze ausgegeben werden, deren Anlagedatum zwischen zwei festen Daten liegen. Wenn Sie einen neuen Zeitraum benötigen, müssen Sie wieder eine neue Abfrage erstellen.

    Verwenden Sie Parameter in Ihren Abfragen.

    Mit Parametern können Sie Ihre Abfragen wesentlich flexibler gestalten. Sie müssen nicht für jede winzige Änderung eine neue Abfrage erstellen, sondern können die Änderungen interaktiv über einen Dialog eingeben.

    Erstellen Sie beispielsweise eine neue Abfrage, die das Anlagedatum der Datensätze enthält. Geben Sie dann als Kriterium statt einer festen Zeitspanne die folgende Zeile ein:

    Zwischen [Anfangsdatum] Und [Enddatum]

    Die Parameter Anfangsdatum und Enddatum werden als Datenfelder interpretiert. Da diese Felder nicht in der zugrundeliegenden Tabelle vorkommen, müssen den Parametern Werte zugewiesen werden.

    Wenn Sie in die Datenblattansicht wechseln, wird ein Dialog geöffnet, in dem Sie zunächst dem ersten Parameter einen Wert zuweisen können. Anschließend geben Sie das Enddatum des Zeitraums ein. Im Datenblatt werden nur die Datensätze aufgelistet, die zwischen den eingegebenen Werten liegen. Bei jedem Öffnen des Datenblattes müssen Sie die Parameter neu eingeben.

    Auf diese Weise können Sie jedes mal entscheiden, welche Zeitspanne Sie einsehen möchten.

     

    Symbolleisten haben manchmal die unangenehme Eigenschaft, dauerhaft zu verschwinden. Die Ursache hierfür besteht in der Regel darin, dass ein Anwender die Symbolleiste versehentlich ausgeblendet hat.

    Da Access sich die Einstellungen für Symbolleisten für jede Ansicht merkt, taucht die Symbolleiste auch nach einem erneuten Programmstart nicht wieder auf.

    Das ist aber kein Programmfehler, sondern eine bewusst implementierte Funktion. Wenn Sie beispielsweise absichtlich eine Symbolleiste schließen wollen, klicken Sie mit der rechten Maustaste an, und wählen Sie den Symbolleistennamen aus dem Kontextmenü. Alternativ können Sie die Symbolleiste auch aus ihrer fixierten Position lösen, um dann auf das Schließen-Symbol zu klicken.

    Wenn Sie eine Symbolleiste vermissen, wählen Sie den Befehl Ansicht / Symbolleisten aus der Menüzeile.

    Wenn Sie die Symbolleiste zu einem späteren Zeitpunkt erneut benötigen, dann wählen Sie den Befehl Ansicht / Symbolleisten aus der Menüzeile. Kreuzen Sie dann diejenigen Symbolleisten an, die Sie in der aktuellen Ansicht sehen wollen.

     

    Das Kopieren von Objekten ist auch noch auf eine andere Art als mit Drag&Drop möglich. Diese kann besonders dann eingesetzt werden, wenn die Größe des Bildschirms nicht groß genug ist, und Access zweimal nebeneinander darzustellen.

    Exportieren Sie Datenbankobjekte in eine andere Datenbank, um Kopien von diesen Objekten zu erstellen.

    Um ein Objekt zu exportieren, müssen Sie dieses im Datenbankfenster markieren und anschließend den Menübefehl Datei/Speichern unter/Exportieren (Access 97) bzw. Datei/Exportieren (Access2000, XP) wählen.

    Im folgenden Dialog muss die Option In eine externe Datei oder Datenbank markiert sein. Der nächste Dialog ermöglicht die Auswahl der Datenbankdatei, in die exportiert werden soll. Ein Klick auf Exportieren startet den Vorgang. Anschließend können Sie dem Objekt einen anderen Namen geben.

    Bei Tabellen besteht noch die Wahl, nur die Tabellendefinition oder die Definition inklusive der Daten zu exportieren. Klicken Sie auf OK, um den Vorgang abzuschließen.

     
    Dieses Handbuch erklärt Ihnen den Umgang mit Access von Anfang an. In einem Schnelleinstieg lernen Sie die Software zunächst im Überblick kennen. Anschließend vertiefen Sie sich in Datenbankgrundlagen, Tabellen, Abfragen, Formulare und Berichte. Fortgeschrittene können sich danach mit den verschiedenen Programmiertechniken auseinandersetzen. Auch eigenständige Anwendungen, Access-Projekte und Access im Internet werden ausführlich dargestellt. Auf der Begleit-CD finden Sie neben den Beispieldatenbanken das komplette Handbuch als eBook.
     

     

    Zu den folgenden Themenbereichen finden Sie Tipps & Tricks sowie Praxisbeispiele:

    Unter "Links" finden Sie eine Auflistung von Deutsch- und Englischsprachigen Access Websites.
    Diese Site bietet eine umfangreiche Link-Sammlung zu Access. Hier findet man Links zu (fast) allen Seiten rund um Microsoft Access.

     

    Daten normalisieren
    Normalisieren Ihre Daten optimal, um Redundanzen zu vermeiden. Sie können auch die Hilfe des Tabellenanalyse-Assistenten benutzen, um Ihre Daten in Detailtabellen aufzuteilen und so effizienter zu speichern. Der Assistent wird über Menübefehl Extras / Analyse / Tabelle gestartet.

    Datentypen und Feldgrößen
    Stellen Sie optimale Datentypen und Feldgrößen ein, um Speicherplatz zu sparen und die Arbeitsgeschwindigkeit zu erhöhen. Halten Sie sich dabei an die einfache Regel: Wählen Sie Datentypen und Feldgrößen so klein wie möglich aus.

    Primärschlüsselfeld
    Jede Tabelle sollte ein Primärschlüsselfeld haben, damit Access schneller auf die einzelnen Datensätze zugreifen kann.

    Indizes
    Indizieren Sie grundsätzlich alle Felder, die sortiert, verknüpft oder für die Kriterien einstellt sind. Vermeiden Sie aber gleichzeitig Indizes in allen anderen Feldern, weil das Anfügen und Löschen von Daten bei indizierten Feldern länger dauert.

     

    Fügen Sie die benötigten Tabellen oder Abfrage per Drag & Drop in den Entwurfsbereich ein. Holen Sie dazu das Datenbankfenster mit der Taste F11 in den Vordergrund und aktivieren Sie das richtige Register. Ziehen Sie dann die gewünschte Tabelle oder Abfrage direkt aus dem Datenbankfenster in den Entwurfsbereich.

    Die Feldliste erscheint nun im Entwurfsbereich.

     

    Berichte wirken in einigen Fällen übersichtlicher, wenn die einzelnen Datensätze seitenweise durchnumeriert sind.

    Verwenden Sie einen Zähler, um diese Numerierung durchzuführen.

    Erstellen Sie im Detailbereich ein Textfeld namens txtDatensatznummer. Damit das Feld bei jedem Datensatz um den Wert 1 erhöht wird, legen Sie für den Detailbereich die folgende Beim Drucken-Ereignisprozedur an:

    Private Sub Detailbereich_Print(Cancel As Integer, PrintCount As Integer)

        If PrintCount = 1 Then txtDatensatznummer = txtDatensatznummer + 1

    End Sub

    Damit der Zähler bei jeder neuen Seite mit dem Wert 1 beginnt, legen Sie für den Seitenkopf ebenfalls eine Beim Drucken-Ereignisprozedur an:

    Private Sub Seitenkopf_Print(Cancel As Integer, PrintCount As Integer)

        txtDatensatznummer = 0

    End Sub

    Wenn Sie lediglich die Anzahl der Datensätze pro Seite im Berichtsfuß ausgedruckt haben möchten, verschieben Sie das Textfeld txtDatensatznummer einfach ein den Fußbereich.

     

    Diese Buchreihe wurde mehrfach mit dem Urteil SEHR GUT! bewertet.

    Alle Details sind bereits didaktisch so zusammengetragen, dass der Leser mit einem Minimum an Aufwand lernt - ohne nachzuschlagen und herumzusuchen. Das kann bis zu 40% Zeitersparnis gegenüber dem Arbeiten mit konventionellen Büchern bedeuten!

    Einsteiger haben schon nach kurzer Zeit die ersten Erfolgserlebnisse.

    Erfahrene Anwender können dank der vollständigen Beschreibung auch die letzten Ressourcen des Programms nutzen und erhalten zahlreiche Tipps

    Das Reihenkonzept bietet: - knappe, klare Formulierungen - Übersichtlichkeit, Verständlichkeit und Kompetenz - kein Computerchinesisch, sondern leicht nachvollziehbare Beispiele und Tipps - Praxisnähe durch Beispiele aus der Praxis für die Praxis - Zeitersparnis durch "Learning by doing" mit Schritt-für-Schritt-Erklärungen - Modularität, so dass der Leser sofort die Lösung zu einem Thema findet - 100 % Programmnutzung (im Grund- u. Aufbaukurs sind alle Programmfunktionen beschrieben)

    Inhalte: Datenbanken erstellen, Tabellen entwerfen und verwalten, Datentypen, Indizes, Schlüssel, Gültigkeitsregeln, Defaultwerte, Nachschlageassistent, Ausdruckseditor, Datenblattlayout, Zugriff in Mehrbenutzerumgebung, Beziehungen zwischen Tabellen, Filter (auswahlbasierte, auswahlausschließende, formularbasierte, Spezialfilter), Auswahlabfragen, Aktionsabfragen, Einführung in die Formular- und Berichterstellung, Korrektur-, Such- und Sortierfunktionen.

    Von Jutta Girsig; Giersig (Juni 2004); Euro 31,00 ; ISBN: 3932421493

     
    Mit dem TriniDat Navigations-Klassenmodul fügen Sie benutzerdefinierte Navigationsschaltflächen in Ihre Formulare ein. Der Vorteil dieses Klassenmoduls ist, dass Sie mehrere Instanzen des Navigations-Formulars für verschiedene Datenformulare erzeugen können. Jede Instanz bleibt mit dem Datenformular verknüpft. Vollversion mit ausführlicher Demo-Datenbank. 
    Diese Site soll Antworten und vielleicht neue Ideen zu Fragen bieten, die sich aus Eurem Umgang mit MS-Office-Anwendungen ergeben.  

    Häufig kommt es vor, daß in einer Tabelle in einem oder mehreren Datenfeldern die gleichen Werte eingetragen werden. In einer privaten Adreßverwaltung wird im Datenfeld Land wahrscheinlich sehr oft der Wert Deutschland stehen und im Feld Stadt Ihr Heimatort. Diese Werte bei jedem neuen Datensatz einzugeben ist überflüssige Arbeit. Lassen Sie Access immer wiederkehrende Werte automatisch in das entsprechende Datenfeld eintragen.

    Nachdem Sie ein Datenfeld beim Tabellenentwurf definiert haben, in dem automatisch Werte abgelegt werden sollen, können Sie im Register Allgemein im unteren Teil des Tabellenentwurffensters bei der Eigenschaft Standardwert genau diesen Wert eintragen. Beim Feld Land würden Sie also hier Deutschland eintragen. Sobald Sie einen neuen Datensatz anlegen, wird dieser Wert in das Feld übernommen.

     

    Bei vielen Aufgaben mit größerem Zeitaufwand bietet es sich an, diese dann zu erledigen, wenn der Benutzer gerade eine Pause macht und nicht mit der Datenbank arbeitet.

    Die Überwachung wird erledigt, indem das aktuelle Formular sowie das aktuelle Steuerelement durch einen Timer regelmäßig überprüft wird. Sollte sich hier längere Zeit nichts ändern, macht der Benutzer wahrscheinlich eine Pause.

    Zur Umsetzung dieser Lösung legen Sie ein neues Formular an und stellen die Zeitgeberintervall-Eigenschaft auf 1000 ein (1000 Millisekunden = 1 Sekunde). Die BeiZeitgeber-Ereigniseigenschaft verknüpfen Sie anschließend mit der folgenden Prozedur:

    Private Sub Form_Timer()

        Static LastFormName As Variant
        Static LastControlName As Variant
        Static IdleTime As Long
        Dim ActiveFormName As Variant
        Dim ActiveControlName As Variant

        On Error Resume Next
        ActiveFormName = Screen.ActiveForm.Name
        ActiveControlName = Screen.ActiveControl.Name

        On Error GoTo 0

        If LastFormName <> ActiveFormName Then
            LastFormName = ActiveFormName
            IdleTime = 0
        End If

        If LastControlName <> ActiveControlName Then
            LastControlName = ActiveControlName
            IdleTime = 0
        End If

        IdleTime = IdleTime + Me.TimerInterval / 1000

        If IdleTime = 60 Then 'Angabe in Sekunden
            IdleTime = 0
            'Hier bitte den Idle-Programmcode einfügen
            MsgBox "Idle!"
        End If

    End Sub

    Damit das Formular nicht auf dem Bildschirm zu sehen ist, öffnen Sie es einfach im unsichtbaren Zustand.

     
    Schnell, unkompliziert, diskret und ohne finanzielles Riskio werden Ihre Daten bei Access Repair Center 24 repariert. 

    Spätere Formatänderungen im Tabellenentwurf werden nicht automatisch übernommen.

    Es ist allerdings durchaus üblich, dass im Formularentwurf mit Hilfe der Eigenschaft Format ein anderes Format als in der zugrunde liegenden Tabelle eingestellt ist.

    Auch hier bleibt Ihnen also eine Überprüfung und eventuelle Korrektur nicht erspart.

     

    In dieser Demo wird gezeigt, wie Sie mit Access 2007 Informationen schnell und einfach nachverfolgen, Berichte darüber erstellen und gemeinsam mit anderen Personen nutzen können. Dank der erheblich ansprechenderen Benutzeroberfläche werden Sie schnell und ohne große Datenbankkenntnisse produktiv.

     
    Die neue Benutzeroberfläche ist das Ergebnis umfangreicher Recherchen und ausgiebiger Tests zur Benutzerfreundlichkeit, und sie wurde so konzipiert, dass Sie benötigte Befehle leichter finden können. Sie lernen die Elemente der neuen Benutzeroberfläche kennen und erfahren, wie sie aussehen und wie sie eingesetzt werden. Sie erfahren außerdem, wie Sie Dokumente im Registerkartenformat in einer Datenbank aktivieren und wie Sie durch die neuen Oberflächenobjekte navigieren. 

    Ich möchte einen Access-Bericht 3 x ausdrucken und auf den Ausdrucken 2 und 3 soll jeweils das Wort Kopie eingefügt werden.

    Wie kann ich das in VBA realisieren?

    Für dieses Problem gibt es zwei Lösungsmöglichkeiten:

    1. Sie führen die DoCmd.OpenReport-Anweisung dreimal aus und übergeben als Argument OpenArgs beim zweiten und dritten mal den Text Kopie. Das Argument werten Sie dann in der Detailbereich_Format-Ereigniseigenschaft aus (z.B. indem Sie ein Label-Feld mit dem Text Kopie ein- oder ausblenden). 
    2. Sie führen die DoCmd.OpenReport-Anweisung dreimal aus. Der Bericht prüft dann im Detailbereich_Format-Ereignis, ob das zugrunde liegende Feld DruckdatumOriginal noch leer ist. Wenn ja, wird der Text Kopie ausgeblendet und das aktuelle Tagesdatum als Druckdatum eingetragen. Wenn bereits ein Druckdatum vorhanden sein sollte, wird der Text Kopie eingeblendet. Abgesehen vom ersten Ausdruck werden so alle weiteren Ausdrucke mit dem Vermerk Kopie gedruckt.

    Sie wollen sich schnell mit dem neuen Bedienungskonzept von Access 2007 vertraut machen und die neuen Möglichkeiten sofort umsetzen? Zwei ausgewiesene Access-Experten, Ralf Albrecht und Natascha Nicol, zeigen Ihnen in diesem Handbuch umfassend und leicht verständlich, wie Sie mit Access 2007 Datenbanken aufbauen, nutzen und weiterentwickeln. Anhand der beiliegenden Beispieldatenbanken können Sie in Schritt-für-Schritt-Anleitungen die wichtigsten Arbeitstechniken erlernen. Hilfreiche Übersichten erleichtern Ihnen den Überblick und Profitipps helfen Ihnen, Zeit zu sparen. Außerdem finden Sie alles, was Sie wissen wollen, schnell und gezielt über die vielfältigen Verzeichnisse und Indizes im Buch oder über die Suchfunktionalität im beiliegenden eBook. Kompetentes Expertenwissen in seiner besten Form: Microsoft Office Access 2007 - Das Handbuch.

    • Fast 1000 Seiten Wissen
    • Durchgehend zweifarbig 
    • Das umfassende Nachschlagewerk für alle Access-Anwender 
    • Mit Profitipps und Praxisindex 
    • Komplettes eBook auf CD: für die bequeme Nutzung unterwegs

    Lesen Sie:

    Schnelleinstieg: Datenbank-Vorlagen, Datenbanken, Ordner & Co., erste Schritte mit Tabellen, Formularen und Berichten, Abfragen, Navigationsbereich, Access-Hilfe

    Tabellen: Datenbankgrundlagen, Tabellenentwurf, Felddatentypen und -eigenschaften, Datenbanken normalisieren und indizieren, Beziehungen zwischen Tabellen, verknüpfen und importieren

    Abfragen: einfache Abfragen, Bedingungen, Parameterabfragen, berechnete Felder, Abfragen mit mehreren Tabellen, Auswertungen mit Aggregatfunktionen, Aktionsabfragen, SQL

    Formulare: Formularentwurf, Steuerelemente und ihre Eigenschaften, Unterformulare, mit Aggregat- und Domänenaggregatfunktionen auf Formularen rechnen, Zugriff auf Daten anderer Formulare, Ereignisse für Formulare und Steuerelemente, Diagrammformulare, Pivot-Ansichten

    Berichte: Berichtsentwurf, Berichtskopf und -fuß, Seitenkopf und -fuß, Daten gruppieren und sortieren, mehrere Spalten, auf Berichten rechnen, Unterberichte, Formulare für Berichte

    Dienstprogramme und Datenweitergabe: Datenbanken komprimieren, reparieren und dokumentieren, Verknüpfungen zu anderen Office-Programmen

    Programmierung: Makros, VBA, Einführung in die Objekttechnik, Funktionen und Methoden, Datenzugriff mit ADO und DAO.

    Komplette Anwendungen: eigenständige Anwendungen erstellen, Kennwörter und Sicherheit, Mehrbenutzerumgebung

    Access im Internet: Hyperlinks, HTML- und XML-Ausgabe, Windows SharePoint Services

    Auf Begleit-CD:

    • alle im Buch beschriebenen Beispieldatenbanken
    • das ganze Handbuch als eBook zur mobilen Nutzung
     
    Über ein Formular soll ein formularbasierter Filter aufgerufen werden. Man trifft bequem seine Auswahl und aktiviert den Filter. Soweit funktioniert alles bestens. Dann möchte ich nur die gefilterten Daten in einem Bericht ausdrucken. Es gibt auch eine Abfrage, welche gleichermaßen die Felder für das Formular, sowie für den Bericht zur Verfügung stellt. Das heißt, die Datenauswahl ist für Formular und Bericht dieselbe. Lediglich ist im Bericht der Filter nicht mehr aktiv. Ich habe einen Schalter auf dem Formular installiert, welcher sofort den Bericht aufruft. Jedoch bringe ich diese beiden Komponenten nicht zusammen.

    Wenn Sie einen formularbasierten Filter aufrufen, wird das SQL-Kriterium des Filters in der Formular-Eigenschaft Filter gespeichert.

    Mit der Formular-Eigenschaft FilterOn können Sie außerdem feststellen, ob der Filter gerade aktiv ist oder nicht. Diese beiden Eigenschaften sind beim Öffnen eines Berichts sehr hilfreich. Für Ihre Schaltfläche, die den Bericht öffnet, verwenden Sie folgenden VBA-Code:

    Private Sub Bericht_Click()
    ' Beim Klicken der Schaltfläche

        Dim BerichtFilter As Variant

        If Me.FilterOn Then
            'Filter ist aktiv, also wir wollen ihn für den
            Bericht verwenden
           
    BerichtFilter = Me.Filter
        Else
            'Kein Filter aktiv, also alle Datensätze im Bericht anzeigen
           
    BerichtFilter = Null
       
    End If

    End Sub

    Der Filter wird also als String-Parameter an die Methode OpenReport übergeben, um die Datensätze ggfs. einzuschränken.

    Auf dieser Microsoft Site werden Ihnen Kurse zum Thema MS Access angeboten.

    • Lektionen zum Selbststudium und Übungsbeispiele.
    • Einen kurzen Test am Ende jeder Lektion; die Tests werden nicht bewertet.
    • Eine Kurzübersichtskarte, die Sie nach dem Kurs behalten können.
     
    Die Site bietet außerdem eine Reihe von Downloads. 

    Kfz-Kennzeichen sind ein beliebtes Merkmal in Datenbanken. Es handelt sich hierbei schließlich um eine der wenigen Informationen, die bundesweit eindeutig sind.

    Um die Eingabe eines Kfz-Kennzeichens zu standardisieren, definieren Sie ein entsprechendes Eingabeformat.

    Das Standardisieren von Kfz-Kennzeichen bringt den Vorteil, dass Sie Ihre Datenbank leichter auswerten können. So finden Sie beispielsweise die Buchstaben für die Stadt bzw. den Kreis stets in den ersten drei Stellen.

    Um diesen Vorteil zu nutzen, definieren Sie folgendes Eingabeformat:

    !>L??" - ">??" "0999;1;K

    Dazu passt folgender Ausdruck für die Eigenschaft Format:

    !@@@ - @@ @@@@

    Um beispielsweise das Kennzeichen D-XX 000 einzugeben, drücken Sie zunächst die Taste d. Danach betätigen Sie zweimal die Leertaste, bevor Sie XX eingeben können. Nach dem erneuten Betätigen der Leertaste können Sie schließlich die 000 eingeben.

     

    Grundlage ist eine aus einer Abfrage erzeugte Tabelle, deren Feldart und Feldanzahl variieren kann. Der Anwender soll nach dem öffnen der Tabelle einen Datensatz durch Doppelklick mit der Maustaste aktivieren können. Wie kann man ein bestimmtes Feld und die Datensatznummer des aktivierten Datensatzes auslesen?

    Da der Weg über ein Formular aufgrund der dynamischen Spalten nicht funktioniert, bleibt als Lösung nur ein mehrspaltiges Listenfeld. Die erste Spalte sollte die ID-Spalte sein, alle weiteren Spalten können dynamisch gefüllt werden. Die Nummer des angeklickten Datensatzes können Sie dann im Click-Ereignis ermitteln.

    Sollte diese Lösung nicht passend sein, kann z.B eine Grid-Komponente eines Drittherstellers zum Einsatz kommen. Hier kommt z.B. das Janus-Grid in Frage, bei dem Spalten dynamisch hinzugefügt werden können. 

    Die Funktion GetPath trennt den Pfad von einem kompletten Dateipfad (strPath), wie zum Beispiel:
    C:\Windows\System\mscdex.exe ab.
    Das Ergebnis wird als String zurückgeliefert (in dem Beispiel würde das Ergebnis C:\Windows\System\ lauten.

    Sie benötigen hierzu auch die Funktion ReverseInStr aus dem Tipp
    Stringmanipulation - Parsen - Textmanipulation (Link siehe unten)

    Public Function GetPath(strPath As String) As String

        Dim intPos As Integer

        intPos = ReverseInStr(0, strPath, "\")
        GetPath = Left(strPath, intPos)

    End Function

     

    Microsoft Access ist ein überaus leistungsfähiges Datenbankprodukt, mit dem nur wenige andere Produkte mithalten können. Als Rapid-Application-Development-(RAD-)Tool stellt es manch anderes Datenbanksystem in den Schatten, wenn es um Schnelligkeit und einfache Bedienung geht. Aber Access ist bekanntermaßen auch eine komplexe Applikation, zu der viele Respekt einflößende und langatmige Dokumentationen angeboten werden.

    Access Tipps & Techniken geht vollkommen anders an das Thema heran: Dieses Buch orientiert sich an den konkreten Aufgabenstellungen von Access-Nutzern und vermittelt nützliche, seriöse und intelligente Techniken, die sich Access-Anwender und -Entwickler schnell aneig-nen können. Ein klares Plus ist dabei die Präsentation der 100 Lösungen, Tipps und Tricks in mundgerechten »Happen«. So erfahren Sie beispielsweise, wie Sie

    • Ihre Access-Anwendung durch selbst geschriebene Funktionen erweitern
    • SQL-Abfragen zum Sortieren, Zusammenfassen und Kombinieren von komplexen Daten verwenden
    • Excel-Funktionen in Access nutzen und Access-Daten automatisch via Outlook versenden
    • Platzhalterzeichen und reguläre Ausdrücke nutzen
    • Access als Frontend für MySQL verwenden
    • Präsentationen erstellen, Videos abspielen und eingebettete Berichte in Access-Formularen betrachten
    • Code schneller und effizienter schreiben und in einer Code-Bibliothek organisieren
    • XML-Daten importieren und exportieren und Access als XML-Datenbank nutzen

    Mit diesem Buch gelingt es jedem Access-Nutzer und -Entwickler leicht, Probleme gezielt zu lösen, Access-Kenntnisse auszubauen, neue Features zu entdecken und damit deutlich mehr aus diesem Programm herauszuholen.

     

    In Berichten werden häufig Namen aus Titel, Vor- und Nachnamen durch Leerzeichen getrennt zusammengesetzt:

    [Titel] & " " & [Vorname] & " " & [Nachname]

    Fehlen hierbei Titel oder Vorname, so ergeben sich unschöne führende Leerzeichen im Ausdruck.

    Entfernen Sie diese Leerzeichen mit Hilfe der Funktion LTRIM.

    Der notwendige Ausdruck schaut wie folgt aus:

    LTRIM([Titel] & " " & [Vorname] & " " & [Nachname])

     

    Access zeigt die Symbolleisten stets unterhalb der Menüzeile an.

    Im Formularentwurf sind es die Symbolleisten Formularentwurf und Format (Formular-/Berichtsentwurf). Dazu gesellt sich noch die Toolbox, die Access als frei schwebende Symbolleiste öffnet.

    Bei vielen Symbolleisten wird der Bildschirm schnell unübersichtlich. Fixieren Sie Ihre Symbolleisten deshalb am Rand des Bildschirms. Damit die Toolbox die Arbeit mit Steuerelementen nicht weiter behindert, können Sie sie am linken, rechten, unteren oder oberen Rand fixieren. Ziehen Sie sie dazu einfach an einen der Ränder.

    Auf die gleiche Weise können Sie mit allen Symbolleisten verfahren. Ziehen Sie sie aus ihrer angestammten Position unterhalb der Menüzeile an eine beliebige andere Stelle der Arbeitsoberfläche.

     

    Abfragen können nicht nur zum Ausfindigmachen von Informationen genutzt werden, sondern auch dazu, um Lücken im Datenbestand zu ermitteln.

    In einer Adressverwaltung haben Sie sicherlich nicht zu jeder Person das Geburtsdatum gespeichert? Sie würden aber gerne heraus bekommen, von wem Sie das Datum nicht wissen, ohne die ganze Tabelle durchzugehen. Erstellen Sie eine Abfrage, die nach leeren Datenfeldern sucht.

    Genau für diesen Zweck gibt es den Ist Null-Ausdruck. Fügen Sie das Feld, das Sie überprüfen wollen im Entwurfsraster ein und geben Sie als Kriterium

    Ist Null

    ein.

    Sie können nun noch zusätzliche Felder hinzufügen, um die leeren Datensätze zuordnen zu können. Wechseln Sie in die Datenblattansicht, um das Ergebnis einzusehen.

    Mit dem Kriterium "Ist Null" lassen sich leere Datenfelder herausfinden.

     

    Das Datenbankfenster ist die Schaltzentrale für alle Operationen während der Datenbankentwicklung. Bei der Ausführung und Bedienung einer Datenbank ist es jedoch überflüssig, da alle Funktionen, die in der Datenbank integriert sind, normalerweise über Menüs oder Symbolleisten ausgeführt werden.

    Das Datenbankfenster ist ein Fenster wie jedes andere auch. Um das Datenbankfenster unsichtbar zu machen, brauchen Sie es nur aktivieren und anschließend den Menübefehl Fenster>ausblenden wählen. Das Datenbankfenster ist dann versteckt.

    Um das Datenbankfenster oder auch ein beliebiges anderes Fenster wieder einzublenden, führen Sie den Menübefehl Fenster>Einblenden aus. In einem Dialog können Sie dann das wieder herzustellende Fenster auswählen.

    Sind alle Fenster ausgeblendet, finden Sie den Menüpunkt Einblenden im Menü Datei.

     

    Beim Start von Access 97 / 2000 wird standardmäßig am Anfang der Start-Dialog angezeigt, über den verschiedene Optionen zur Verfügung gestellt werden.

    Wenn Sie jedoch Datenbank-Dienstprogramme ausführen wollen, Zugriffsrechte definieren oder ganz einfach lieber über die Standardmenübefehle eine Datenbank öffnen, müssen Sie den Start-Dialog durch einen Klick auf Abbrechen schließen.

    Um das Start-Dialogfeld zu deaktivieren, muss zunächst eine Datenbank geöffnet sein, damit der Menübefehl Extras / Optionen auswählbar wird. Starten Sie irgendeine Datenbank. Wählen Sie anschließend den Menüpunkt Extras / Optionen und aktivieren Sie das Register Ansicht.

    In der Optionsgruppe Einblenden müssen Sie die Option Start-Dialogfeld deaktivieren und auf OK klicken, um Ihre Änderungen wirksam zu machen. Beim nächsten Start von Access erscheint das Dialogfeld nicht mehr. Siehe Abbildung 1.

    Wenn Sie bei jedem Laden von Access lieber individuell festlegen wollen, ob der Dialog angezeigt werden soll, benutzen Sie die Befehlszeilenoption /NoStartup. Durch diese Option wird das Anzeigen des Start-Dialogfeldes unterdrückt.
     

    Im letzten Tipp wurde gezeigt, wie Sie mit dem Sternchen aus der Feldliste einer Tabelle alle Datenfelder mit einer Aktion in das Entwurfsraster ziehen können. Um Kriterien zu definieren müssen Sie jedoch die entsprechenden Felder zusätzlich hinzufügen.

    Es gibt auch eine Möglichkeit, nur die Felder, für die Kriterien definiert werden sollen, hinzuzufügen, und trotzdem alle Datenfelder im Datenblatt anzeigen zu lassen.

    Aktivieren Sie im Optionen-Dialog das Register Tabellen/Abfrage. Wenn Sie wollen, das immer alle Datenfelder der Abfrage angezeigt werden, egal, wie viele Sie in das Raster gezogen haben, müssen Sie die Option Alle Felder ausgeben in der Sektion Abfrageentwurf markieren.

    Sie können diese Option auch für jede Abfrage einzeln einstellen. Klicken Sie mit der rechten Maustaste in einen freien Bereich des Abfragefensters und wählen Sie im Kontextmenü den Befehl Eigenschaften aus.

    Im Eigenschaftenfenster finden Sie auch die Eigenschaft Alle Felder ausgeben. Dort ist standardmäßig der Wert eingetragen, den Sie über den Optionen-Dialog festgelegt haben. Ändern Sie den Wert, bezieht sich die Änderung nur auf die aktuelle Abfrage.

     

    Das Service-Pack enthält wichtige Sicherheits-, Stabilitäts- und Leistungsverbesserungen. Einige der in Microsoft Office XP Service Pack 3 (SP3) enthaltenen Updates wurden zuvor bereits als separate Updates freigegeben. Diese werden in diesem Service Pack in einem einzigen Update zusammengefasst. Jede Version von Microsoft Office XP kann auf Office XP SP3 aktualisiert werden. Es sind also keine früheren Service Packs erforderlich, um Office XP Service Pack 3 installieren zu können.

     

    Access-Programmierung für die Praxis von Praktikern beschrieben!

    Dieses Buch "Microsoft Office Access 2003 Programmierung" bietet Ihnen eine fundierte Einführung in die Datenbankprogrammierung mit Access 2003 unter Verwendung von Visual Basic für Applikationen (VBA) und SQL, ausführliches Know-how über die Gestaltung der Benutzerschnittstelle sowie jede Menge universell einsetzbarer Routinen und die richtigen Lösungen für Ihre Probleme. Die nötigen theoretischen Grundlagen werden Ihnen klar und verständlich vermittelt, ansonsten orientiert sich der Inhalt an praktischer Verwendbarkeit und Nutzen der besprochenen Beispiele und Konzepte. Mit diesem Ansatz stellt das Buch ohne unnötigen Ballast die Informationen zur Verfügung, die Sie brauchen, um schnell zu Ergebnissen zu kommen und spart Ihnen so eine Menge Zeit und Nerven bei der Entwicklung Ihrer Datenbanklösungen. Und auf den im letzten Kapitel enthaltenen umfangreichen Praxisteil mit zahlreichen anwendungsbereiten Beispielen sollte kein Entwickler verzichten!

    Von Walter Boberenz und Thomas Kowalski (2004); Euro 59,90; ISBN: 3-86063-094-6

     

    Für die Ablage von Dokumenten wie zum Beispiel Briefe, Rechnungen oder Verträge, bietet Microsoft Access eine ideale und noch dazu kostenlose Beigabe auf der Office CD, den Snapshot Viewer. Nach Installation der Software erhalten Sie automatisch das *.snp Format in den Common Dialogs zur Verarbeitung angezeigt.

    Erstellen Sie einen Bericht unter dem Namen repBericht und ein Formular mit einem Button namens button.

    Private Sub Befehl0_Click()

        Dim strOutputFormat As String
        Dim strname As String

        DoCmd.Hourglass True
        strname = "repBericht"
        strOutputFormat = "Snapshot Format"

        DoCmd.SendObject acSendReport, strname, strOutputFormat, "test@test.de", , , "Das ist ein Test", "Das ist der body", 0

        '1 = nachträgliche Bearbeitung in Outlook - Eine weiterführende_
        'Beschreibung des SendObject Befehls erhalten Sie in der Access Hilfe.

        DoCmd.Hourglass False

    End Sub

     

    Ich brauche für folgende SQL - Programmierung die entsprechende ACCESS - "Übersetzung".

    case WHEN ([Zuschlag?]="ja") AND [Jahr] = 2004 AND [Monat] <= 0002 THEN '18%' WHEN ([Zuschlag?]="ja") AND [Jahr] < 2004 THEN '18%' WHEN ([Zuschlag?]="ja") AND [Jahr] = 2004 AND [Monat] >= 0003 THEN '14,1%' WHEN ([Zuschlag?]="ja") AND [Jahr] > 2004 THEN '14,1%' ELSE '' END AS [Zuschlag alt/neu2], Es geht hierbei um eine zeitliche Abgrenzung. Zum einen bis Februar 2004 und ab Februar 2004. Als Variable stehen [Monat] und [Jahr] zur Verfügung. Weitere Bedingung ist [Zuschlag?]="ja". ich habe habe es mit einer "Wenn" - Funktion bzw. mit einer "Schalter" - Funktion versucht -- allerdings ohne Erfolg.

    das CASE-Statement kann man so nicht verwenden, aber Sie können mit verschachtelten IIF-Statements das gleiche Ergebnis erreichen: iif (Zuschlag=Ja and Jahr=2004 and Monat <= 0002; 18%; iif (Zuschlag=Ja and Jahr < 2004; 18%; iif(Zuschlag=Ja and Jahr= 2004 and Monat >=0003; 14,1%; iif(Zuschlag=Ja and Jahr> 2004; 14,1%; "") ) ) ) Bei weiteren Fragen wenden Sie sich bitte unter jordan@trinidat.de direkt an mich. 
       
    Mit dem TriniDat SmartList Klassenmodul können Sie auf einfache Weise Listen- und Kombinationsfelder mit den Namen aller Datenbankobjekte Ihrer Datenbank (Formulare, Berichte usw.) füllen.
    Vollversion mit ausführlicher Demo-Datenbank.
     

    Bei mehrseitigen Berichten ist es wichtig, dass jede Seite mit einer passenden Seitennummer versehen wird. Genauso wichtig ist es, daß direkt auf der ersten Seite die Anzahl aller Seiten ausgedruckt wird.

    So ist sichergestellt, dass keine Seiten des Berichts verlorengehen und Ihr Kunde nicht etwa nur die Hälfte einer Rechnung bezahlt.

    Mit Hilfe eines ungebundenen Textfeldes können Sie die Gesamtzahl aller Seiten eines Berichts ausdrucken.

    Platzieren Sie dazu im Bericht an der gewünschten Position ein neuen Textfeld. Unter der Steuerelementinhalt-Eigenschaft des Textfeldes geben Sie dann den folgenden Ausdruck ein:

    =[Seiten]

    Sobald Sie in die Seitenansicht des Berichts umschalten, zeigt Access innerhalb des Textfeldes die Anzahl der Seiten an.

     

    Das Wählen einer Telefonnummer direkt aus einem Adressenformular ist eine praktische Sache.

    Der Schaltflächenassistent wird normalerweise automatisch gestartet, sobald Sie mit Hilfe der Toolbox eine neue Schaltfläche anlegen. Sollte dies bei Ihnen nicht der Fall sein, markieren Sie einfach die Schaltfläche Steuerelementassistenten in der Toolbox.

    Nach dem erfolgreichen Start des Assistenten wählen Sie in der Liste Kategorien den Eintrag Diverse aus und markieren Sie als Option den Eintrag Telefonnummernwähler. Nachdem Sie mit Fertigstellen bestätigt haben, erscheint die neue Schaltfläche innerhalb Ihres Formulars. Sie ist einsatzbereit, sobald Sie in die Formularansicht umschalten.

     

    Auf dieser Site finden Sie die aktuellsten Neuigkeiten rund um das Thema Microsoft Access. 

    Hier finden Sie folgende Themenbereiche:

    • Auflistung häufiger Fragen
    • Tipps
    • Downloads
    • Uploads
    Microsofts deutsche Seite zum Downloaden von Patches, Tools, Hilfen, Konverter, Vorlagen, Add-Ins und ähnlichem zu Microsoft Office bzw. ACCESS. 

    Die Ausführung der Start-Optionen (Menü-Extras-Start) lassen sich durch Drücken der Shift-Taste deaktivieren. Wird die Datenbank geöffnet, erscheint das Anmeldungsfenster. Hier werden Name und Passwort eingegeben.

    Drückt man bei aktiver Shift-Taste auf OK, wird die Datenbank geladen und es erscheint das Datenbankfenster. Datenbankbenutzer können jetzt Tabellen ansehen, versteckte sichtbar machen, eigene Tabellen und Abfragen (wenn erlaubt) erstellen usw. Sollte sich dies nicht verhindern lassen, ist das Sicherheitssystem von Access absolut nicht sicher. Auch die Zuteilung eines Passwortes für die Datenbank ändert die Situation nicht.

    Wie kann man eine Datenbank davor schützen?

    Durch das Drücken der Shift-Taste beim Datenbank-Start kann der Benutzer sowohl das Autoexec-Makro als auch die Startoptionen umgehen.

    Wie Sie sagten, erscheint dann nur das Datenbankfenster. Wenn Sie die Shift-Taste während des Startvorgangs deaktivieren möchten, können Sie die Datenbank-Eigenschaft AllowBypassKey auf "False" setzen. In diesem Falle wird das Autoexec-Makro bzw. die Startoptionen auf jeden Fall ausgeführt.

    Die Sicherheitssystem von Access geht allerdings viel weiter als die Deaktivierung der Shift-Taste. Die einzelnen Objekte können vor unerwünschtem Zugriff geschützt werden, beispielsweise Änderungen am Formularentwurf oder von Abfragen. Sie können auch verhindern, dass neue Objekte wie Tabellen und Abfragen angelegt werden.

    Berichte übernehmen bei der Erstellung die Einstellungen der zugrunde liegenden Tabelle oder Abfrage.

    Spätere Formatänderungen im Tabellenentwurf werden nicht automatisch übernommen.

    Es ist allerdings durchaus üblich, dass im Berichtsentwurf mit Hilfe der Eigenschaft Format ein anderes Format als in der zugrunde liegenden Tabelle eingestellt ist.

    Auch hier bleibt Ihnen also eine Überprüfung und eventuelle Korrektur nicht erspart.

     

    Hierbei spielt eine Datenstruktur namens DEVMODE eine wichtige Rolle, in der die Seitenoptionen durch einzelne Elemente repräsentiert werden. Die Struktur muss auf die folgende Weise im Dekalrationsbereich eines Standardmoduls deklariert werden:

    Type strDEVMODE
        RGB As String * 94
    End Type

    Type strctDEVMODE
        dmDeviceName As String * 16
        dmSpecVersion As Integer
        dmDriverVersion As Integer
        dmSize As Integer
        dmDriverExtra As Integer
        dmFields As Long
        dmOrientation As Integer
        dmPaperSize As Integer
        dmPaperLength As Integer
        dmPaperWidth As Integer
        dmScale As Integer
        dmCopies As Integer
        dmDefaultSource As Integer
        dmPrintQuality As Integer
        dmColor As Integer
        dmDuplex As Integer
        dmResolution As Integer
        dmTTOption As Integer
        dmCollate As Integer
        dmFormName As String * 16
        dmPad As Long
        dmBits As Long
        dmPW As Long
        dmPH As Long
        dmDFI As Long
        dmDFr As Long
    End Type

    Mit Hilfe dieser Struktur wechselt die folgende Prozedur die Papierausrichtung des Berichtes vom Hoch- ins Querformat (oder umgekehrt):

     

    DoCmd.SetWarnings True

    Sub AusrichtungWechseln(Berichtname As String)

    Const DM_HOCHFORMAT = 1
    Const DM_QUERFORMAT = 2

    Dim DeviceStrng As strDEVMODE   'die Zeichenfolge
    Dim DeviceMode As strctDEVMODE  'die Struktur
    Dim DeviceModeExtra As String   'TMP Zeichenfolge für DEVMODE
    Dim rpt As Report

      'Bericht in Entwurfsansicht öffnen
      DoCmd.OpenReport Berichtname, acDesign

      Set rpt = Reports(Berichtname)
     
      If Not IsNull(rpt.PrtDevMode) Then
       
        'DEVMODE-Struktur abfragen
        DeviceModeExtra = rpt.PrtDevMode
       
        'PrtDevMode ist genau 94 Bytes lang
        DeviceStrng.RGB = DeviceModeExtra
       
        'Zeichenfolge der Struktur zuweisen
        LSet DeviceMode = DeviceStrng
       
        DeviceMode.dmFields = DeviceMode.dmFields _
                              Or DeviceMode.dmOrientation
       
        'Ausrichtung wechseln
        If DeviceMode.dmOrientation = DM_HOCHFORMAT Then
          DeviceMode.dmOrientation = DM_QUERFORMAT
        Else
          DeviceMode.dmOrientation = DM_HOCHFORMAT
        End If
       
        'Eigenschaft aktualisieren.
        LSet DeviceStrng = DeviceMode
       
        'die Struktur der Zeichenfolge zuweisen
        Mid$(DeviceModeExtra, 1, 94) = DeviceStrng.RGB
       
        'in Bericht zurückschreiben
        rpt.PrtDevMode = DeviceModeExtra
     
      End If

    End Sub

     

    Wahrscheinlich haben Sie schon gemerkt, dass Access, wenn Sie den Felddatentyp Zahl auswählen, als Feldgröße LongInteger auswählt. Bei Textfeldern wird als Feldgröße 50 Zeichen eingetragen. Wenn Sie andere Einstellungen bevorzugen, müssen Sie jedes mal die Eintragungen ändern. Definieren Sie Ihre eigene Standardfeldgröße.

    Wählen Sie den Menüpunkt Extras/Optionen. Holen Sie dann im Öffnen-Dialog die Registerkarte Tabellen/Abfragen nach vorne. In der Rubrik Tabellenentwurf können Sie in der Sektion Standardfeldgröße für die Felddatentypen Text und Zahl eigenen Wert definieren. Diese werden dann beim nächsten Feld, das Sie anlegen, automatisch verwendet.

     

    Eine Datenbank lässt sich nicht mehr öffnen. Es erscheint die folgende Fehlermeldung: Die Datenbank wurde von einer früheren Version von MS Access konvertiert, wobei die DAO CompactDatabase-Methode statt des Befehls Datenbank konvertieren (Menü Extras) verwendet wurde. Die Datenbank wurde daher nur teilweise konvertiert. Falls Sie ein Exemplar der Originaldatenbank zur Verfügung haben, verwenden Sie den Befehl Datenbank konvertieren, um sie zu konvertieren. Ist die Originaldatenbank nicht mehr verfügbar, legen Sie eine neue Datenbank an und importieren Sie die Tabellen und Abfragen, um die Daten wiederherzustellen. Die anderen Datenbankobjekte können nicht wiederhergestellt werden. Da die Originaldatenbank nicht vorhanden ist, habe ich den 2. Vorschlag durchgeführt. Allerdings erscheint beim Import-Versuch wieder die selbe Fehlermeldung.

    Hätten Sie einen Vorschlag zur Lösung diese Problems?

    Versuchen Sie die Datenbank in Access 97 zu öffnen und diese dort zu reparieren/komprimieren. Danach können Sie die Datenbank wieder in Access 2000 importieren.

    Dazu markieren Sie den Menüpunkt Einzelschritt "Siehe Abbildung 1" des Menüs Makro oder das gleichnamige Symbol der Symbolleiste. Das Makro befindet sich nun im Einzelschrittmodus. Um den Einzelschrittmodus wieder zu deaktivieren, wählen Sie den Menüpunkt ein zweites Mal aus oder klicken erneut auf das Einzelschritt-Symbol.

    Sobald Sie das Makro im Einzelschrittmodus auf die gewohnte Art und Weise ausführen, erscheint vor der Abarbeitung der ersten Aktion das Dialogfenster Einzelschritt. "Siehe Abbildung 2"

    Hier zeigt Access den Makronamen sowie den Namen der Aktion an, die momentan ausgeführt wird. Zusätzlich wird die Bedingung angezeigt, die zur Ausführung der Aktion geführt hat. Der Text in dem Feld Bedingung besitzt den folgenden Aufbau: Zunächst wird das Ergebnis der Bedingung angezeigt (Wahr oder Falsch). Haben Sie für die aktuelle Aktion keine Bedingung angegeben, erscheint stets der Text Wahr. Anschließend folgt ein Doppelpunkt und – falls eine Bedingung angegeben wurde – der vollständige Text dieser Bedingung. Das Feld Argumente enthält die Inhalte aller Aktionsargumente. Diese werden – jeweils durch ein Semikolon getrennt – in der gleichen Reihenfolge angegeben, mit der die Aktionsargumente im Makrofenster angeordnet sind. Die vier Felder dienen lediglich zur Kontrolle der Aktion. Änderungen können nicht vorgenommen werden!

    Das Dialogfenster Einzelschritt erscheint auf dem Bildschirm, bevor Access die betreffende Aktion ausgeführt hat. Über die Schaltfläche Schritt können Sie nun die Anweisung geben, die Aktion auszuführen. Access arbeitet diese Aktion ab und zeigt die nächste Aktion im Einzelschritt-Fenster an. Über die Schaltfläche Halt können Sie die Ausführung des Makros unterbrechen. Die Schaltfläche Weiter bewirkt, daß Access den Einzelschrittmodus deaktiviert und die restlichen Aktionen des Makros ohne Unterbrechung abarbeitet.

    Tritt im Unterbrechungsmodus oder während der normalen Makroausführung ein Fehler auf – beispielsweise wenn auf ein nicht geöffnetes Formular bezug genommen wird –, zeigt Access zunächst ein Dialogfenster mit dem jeweiligen Fehlertext an. Anschließend erscheint das Dialogfenster "Aktion ist fehlgeschlagen", das den gleichen Aufbau wie das Einzelschritt-Fenster hat. Durch die Informationen in diesem Dialogfenster können Sie die Fehlerursache weiter eingrenzen. Zum Schließen des Dialogfensters betätigen Sie die Halt-Schaltfläche. Alle anderen Schaltflächen des Dialogfensters sind beim Auftreten eines Fehlers deaktiviert und haben damit keine Funktion.

     
    Das Service Pack 1 enthält unter anderem alle bisher erschienen Patches und Einzel-Updates zu Office XP. Zusätzlich enthält es noch einige Verbesserungen, die Stabilität und Sicherheit von Office XP steigern sollen.  

    Zu einem guten Programmierstil gehört es, alle möglicherweise auftretenden Laufzeitfehler durch Fehlerbehandlungsroutinen abzufangen. Nicht immer ist es allerdings sinnvoll, auftretende Laufzeitfehler innerhalb der Prozedur zu verarbeiten, in der sie auftreten.

    Mit Hilfe der Raise-Methode des Err-Objekts können Sie Laufzeitfehler an aufrufende Prozeduren weitergeben oder sogar neue Fehler definieren.

    Die Raise-Methode besitzt insgesamt 5 Argumente, über die der auszulösende Laufzeitfehler definiert wird. Besonders wichtig sind die beiden Argumente Number und Description.

    Über Number weisen Sie Ihrem ausgelösten Laufzeitfehler eine Fehlernummer zu. Damit es hier zu keinen Konflikt mit den Standardfehlernummern von Access kommt, sollten Ihre selbstdefinierten Fehlernummer auf der Konstanten vbObjectError basieren. Addieren Sie zu dieser Konstanten einfach eine Zahl zwischen 1 und 2147221504.

    Mit Hilfe des zweiten Arguments können Sie den Laufzeitfehler mit einer Beschreibung versehen, die Sie genau wie bei normalen Laufzeitfehlern anschließend über die Description-Eigenschaft des Err-Objekts abrufen können.

    Die folgende Beispielprozedur überprüft, ob das Archivbit einer bestimmten Datei Ihrer Festplatte gesetzt ist. Sollte keine Datei mit dem angegebenen Namen vorhanden sein, wird mittels Err.Raise ein Laufzeitfehler ausgelöst. Dieser kann anschließend von der aufrufenden Prozedur auf die gewohnte Art und Weise mit Hilfe der On Error-Anweisung abgefangen und ausgewertet werden.

    Function IstArchivbitGesetzt(Dateiname As String) As Boolean

        'Existiert die Datei?
        If Dir(Dateiname) = "" Then
            Err.Raise Number:=vbObjectError + 1, Description:="Der angegebene Name ist ungültig!"
            Exit Function
        Else
            IstArchivbitGesetzt=((GetAttr(Dateiname) And vbArchive) <> 0)
        End If

    End Function

     

    Diese Datenbank mit insgesamt 30 Beispielen demonstriert Ihnen die Möglichkeiten des Access-Berichtsgenerators und gibt Ihnen Hilfestellung bei dem Umgang mit Access.

    Hier können Sie unter anderem folgende Beispiele nachschlagen:

    • Erstellen eines Top 10 Reports
    • Ausdruck von Berichten
    • Abschirmen einzelner Zeilen
    • Verweisen auf Parameter der RecordSource-Abfrage
    • Automatisieren von Report-Ausdrucken
    • Faxe mit MSFax versenden

    Zu jedem Beispiel gibt es eine ausführliche Erklärung.

     
    Das 32bit-Windows-API verfügt standardmäßig über keine einfach zu handhabende Lösung zur Auswahl eines Dateiordners. Abhilfe schafft die TriniDat ActiveX-Ordnerauswahl-Komponente. Diese als DLL ausgelegte Komponente können Sie mit wenigen Handgriffen in Ihre Datenbank einbauen, um beispielsweise das CD-ROM-Laufwerk oder den Server-Pfad vom Benutzer abzufragen.
    Vollversion mit ausführlicher Demo-Datenbank.
     

    Nach dem Anlegen der Arbeitsgruppendatei und der Aktivierung des Anmeldeverfahrens, dass in der Folge Datenbanksicherheit 2 beschrieben wurde, müssen abschließend noch Benutzer- und Gruppenrechte festgelegt werden.

    Neuen Benutzer anlegen
    Erstellen Sie zunächst ein neues Benutzerkonto. Wählen Sie dazu aus dem Menü Extras den Befehl Sicherheit / Benutzer- und Gruppenkonten (Access 2000/XP) bzw. Zugriffsrechte / Benutzer- und Gruppenkonten (Access 97) aus.

    Notieren Sie sich auf jeden Fall den Namen und die PID des neu angelegten Benutzers, damit Sie gegebenenfalls ein gelöschtes Benutzerkonto wiederherstellen können. Fügen Sie das neue Benutzerkonto der Gruppe Administratoren hinzu. Starten Sie Access neu und melden Sie sich unter dem neuen Benutzernamen (ohne Kennwort!) als an.

    Weil dieser Benutzer zu der Gruppe der Administratoren gehört, erfolgt auch die Anmeldung als Administrator. Legen Sie anschließend über den Menübefehl Extras / Sicherheit / Benutzer- und Gruppenkonten (Access 2000/XP) bzw. Extras / Zugriffsrechte / Benutzer- und Gruppenkonten (Access 97) ein Kennwort für den neuen Benutzer fest. Beenden Sie anschließend Access.

    Datenbank kopieren
    Erstellen Sie eine neue, leere Datenbank und importieren Sie alle Datenbankobjekte aus der Datenbank, die gesichert werden soll. Vergessen Sie dabei nicht den Import von Beziehungen, Menü- und Symbolleisten und Import- bzw. Exportspezifikationen. Durch den Import wird der angemeldete Benutzer der neuen Datenbank automatisch auch Eigentümer dieser Objekte.

    Rechte festlegen bzw. entziehen
    Löschen Sie zunächst mit dem Menübefehl Extras / Sicherheit / Benutzer- und Gruppenkonten (Access 2000/XP) bzw. Extras / Zugriffsrechte / Benutzer- und Gruppenkonten (Access 97) die Gruppenzugehörigkeit des Benutzerkontos Administrator zur Gruppe der Administratoren. Dadurch ist nur noch der aktuelle Benutzer der Datenbank Mitglied dieser Gruppe.

    Die Gruppenrechte werden im Dialogfenster Benutzer- und Gruppenberechtigungen erstellt. Dieses wird über Extras / Sicherheit / Benutzer- und Gruppenberechtigungen (Access 2000/XP) bzw. Extras / Zugriffsrechte / Benutzer- und Gruppenberechtigungen (Access 97) aufgerufen.

    Dort wird standardmäßig eine Liste der Benutzer angezeigt. Aktivieren Sie die Option Gruppen und wählen Sie aus der Liste der Gruppenkonten das Gruppenkonto Benutzer aus, denn alle neu angelegten Benutzer gehören automatisch dieser Gruppe an.

    Wählen Sie dann im Kombinationsfeld Objekttyp die Objekttypen und in der Liste Objektname die dazugehörigen Objekte aus. Löschen Sie jeweils alle Berechtigungen. Dies geschieht durch die Deaktivierung der entsprechenden Kontrollkästchen im Bereich Berechtigungen. Dazu zählt auch das Öffnen der Datenbank.

    Anschließend ist ohne die zur Datenbank gehörende Arbeitsgruppendatei kein Zugriff auf die Datenbank mehr möglich.

    Gruppenkonten anlegen und Zugriffsrechte zuteilen
    Legen Sie nun für die gewünschten unterschiedlichen Zugriffsberechtigungen jeweils ein neues Gruppenkonto an. Dies geschieht genau so, wie die Anlage der Benutzerkonten.

    Teilen Sie dann jeder Gruppen die entsprechenden Zugriffsrechte auf die einzelnen Datenbankobjekte zu. Neue Benutzer brauchen dann nur noch einer bestimmten Gruppe zugeordnet werden, um alle Rechte bzw. Einschränkungen dieser zu bekommen.

     

    Bei Listenfeldern mit vielen Einträgen kann die Suche nach einem bestimmten Eintrag schon einmal zum Geduldsspiel werden.

    Gruppieren Sie die Einträge eines Listenfeldes nach dem Anfangsbuchstaben, um die Übersichtlichkeit zu erhöhen.

    Um dies zu realisieren, benötigen Sie eine Tabelle namens JaNein mit einem einzigen Feld des Typs Ja/Nein. Die Tabelle enthält genau zwei Datensätze mit den Inhalten Ja und Nein.

    Anschließend erstellen Sie eine Abfrage, die Daten aus der JaNein-Tabelle sowie der eigentlichen Datentabelle des Listenfeldes enthält.

    Fügen Sie der Abfrage keine Tabellenfelder hinzu, sondern tragen Sie die folgenden Abfragefelder von Hand ein:

    Nummer:
    Wenn([JaNein];[Produkte].[Produktnummer] ;Null)

    Überschrift:
    Wenn([JaNein];[Produkte].[Produktname]; Links([Produkte].[Produktname];1))

    Name:
    Wenn([JaNein];[Produkte].[Produktname]; "---- "+Links([Produkte].[Produktname]; 1)+" ----")

    Preis:
    Wenn([JaNein];[Produkte].[Preis];"-----")

    Die hier angegebenen Felder beziehen sich auf eine Tabelle namens Produkte mit den Feldern Produktnummer, Produktname und Preis. Weisen Sie der Abfrage über das Eigenschaftsfenster außerdem folgende Eigenschaften zu:

    Eigenschaft Wert
    Alle Felder ausgeben Nein
    Keine Duplikate Ja
    Eindeutige Datensätze Nein

    Die fertige Abfrage ruft nicht nur die Datensätze aus der Tabelle Produkte ab, sondern erstellt auch Überschriften für jeden Anfangsbuchstaben. Sie können Sie Abfrage nun einem beliebigen Listen- oder Kombinationsfeld zugrunde legen, das an die erste Spalte Produktnummer gebunden ist.

    Sollte kein Produkt, sondern eine Überschrift ausgewählt sein, hat das Feld den Wert NULL. 

      
     

    Folgende Prozedur setzt die nötigen Funktionen ein, um den Titel des Fensters ausblenden und dabei den Rahmen beizubehalten:

    Option Compare Database
    Option Explicit

    Public Const LOGPIXELSX = 88 ' Logical pixels/inch in X
    Public Const LOGPIXELSY = 90 ' Logical pixels/inch in Y
    Public Const GWL_STYLE = (-16)
    Public Const WS_CAPTION = &HC00000
    Public Const WS_BORDER = &H800000
    Public Const SWP_NOMOVE = &H2
    Public Const SWP_NOSIZE = &H1
    Public Const SWP_NOZORDER = &H4
    Public Const SWP_SHOWWINDOW = &H40
    Public Const SWP_NOACTIVATE = &H10
    Public Const SWP_FRAMECHANGED = &H20

    Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long

    Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, _
                    ByVal nIndex As Long) As Long

    Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, _
                    ByVal hdc As Long) As Long

    Declare Function GetWindowLong Lib "user32" Alias _
                    "GetWindowLongA" (ByVal hwnd As Long, _
                    ByVal nIndex As Long) As Long

    Declare Function SetWindowLong Lib "user32" Alias _
                    "SetWindowLongA" (ByVal hwnd As Long, _
                    ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

    Declare Function GetDesktopWindow Lib "user32" () As Long

    Declare Function SetWindowPos Lib "user32" _
                    (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
                    ByVal x As Long, ByVal y As Long, ByVal cx As Long, _
                    ByVal cy As Long, ByVal wFlags As Long) As Long

    Public Sub TitelEntfernen(F As Form)

    Dim OldStyle As Long, NewStyle As Long
    Dim Breite As Long, Höhe As Long
    Dim TwipsPerPixelX As Long, TwipsPerPixelY As Long
    Dim hdc As Long

        ' Handle des Desktop-GerätKontextes ermitteln
        hdc = GetDC(GetDesktopWindow())

        ' Auflösung in Twips umrechnen und Handle wieder freigeben 
        TwipsPerPixelX = 1440 / GetDeviceCaps(hdc, LOGPIXELSX)
        TwipsPerPixelY = 1440 / GetDeviceCaps(hdc, LOGPIXELSY)
        ReleaseDC GetDesktopWindow(), hdc

        ' aktuellen Fensterstil ermitteln
        OldStyle = GetWindowLong&(F.hwnd, GWL_STYLE)
        ' neuen Fensterstil definieren und setzen
        NewStyle = (OldStyle And Not WS_CAPTION) Or WS_BORDER
        SetWindowLong F.hwnd, GWL_STYLE%, NewStyle&

        ' Fenstergröße anpassen
        Breite = F.Width \ TwipsPerPixelX
        Höhe = F.Section(acDetail).Height \ TwipsPerPixelY

        ' Fenster mit neuen Eigenschaften anzeigen
        SetWindowPos F.hwnd, 0, 0, 0, Breite, Höhe, _
                        SWP_NOMOVE Or SWP_NOZORDER _
                        Or SWP_FRAMECHANGED

    End Sub

    Zunächst ermittelt diese Prozedur die Maße des Bildschirms, die für die spätere Anpassung der neuen Fenstergröße wichtig sind. Mit GetWindowLong und SetWindowLong werden die Attribute des Fensters abgefragt bzw. ohne den Titel neu gesetzt, wobei der Fensterrahmen erhalten bleibt. Zuletzt wird die Fenstergröße neu angepaßt und angezeigt.

     
    Ich arbeite mit Access 97 und SQL-Server 6.5. Nun möchte ich über einen ODBCDirekt-Arbeitsbereich auf eine Server-Tabelle zugreifen. Der Zugriff funktioniert. Ich kann die Datensätze lesen, jedoch nicht mit Edit bearbeiten. Wie könnte der Verbindungsaufbau aussehen?

    Zuerst sollte ich vielleicht erwähnen, dass sich der große Vorteil an ODBCDirekt unter Access 97 nicht bemerkbar macht. ODBCDirekt ist vor allem sehr attraktiv, weil man die Jet-Engine gar nicht erst laden muss. Access 97 muss jedoch die Jet-Engine ohnehin laden, um die internen System-Tabellen zu verwalten.

    Um eine Datensatzgruppe mit ODBCDirekt zu bearbeiten, würde ich Ihnen "Batch-Updating" empfehlen. Mit Batch-Updating wird eine Datensatzgruppe auf dem Client-PC lokal bearbeitet und anschließend an den Server zurückgeschickt. Wenn mehrere Clients dieselben Datensätze gleichzeitig aktualisieren (wollen), kann es zu Konflikten kommen. Diese müssen Ihre Prozeduren auch abfangen und lösen (über die BatchCollisions-Auflistung).

    Um den Arbeitsbereich für Batch-Updating vorzubereiten, setzen Sie die DefaultCursorDriver-Eigenschaft auf dbUseClientBatchCursor. Wenn Sie das Recordset-Objekt erstellen, setzen Sie den LockEdits-Parameter der OpenRecordset-Methode auf dbOptimisticBatch. Die Datensatzgruppe muss natürlich auch editierbar sein (also kein Snapshot).

    Eine Verbindung für Batch-Updating könnte ungefähr so aussehen:

    Dim wrk As Workspace
    Dim strConnect As String
    Dim conTest As Connection
    Dim rstTestRecords As Recordset

    Set wrk = CreateWorkspace("TestWorkspace", "admin", _
    "", dbUseODBC)
    wrk.DefaultCursorDriver = dbUseClientBatchCursor

    strConnect = _
    "ODBC;DSN=TestDB;UID=sa;PWD=;DATABASE=TestDB"
    Set conTest = wrk.OpenConnection("", , , strConnect)

    Set rstTestRecords = conTest.OpenRecordset _
    ("SELECT * FROM Kunden WHERE PLZ='40211';", _
    dbOpenDynaset, 0, dbOptimisticBatch)

    Do While Not rstTestRecords.EOF
        rstTestRecords.Edit rstTestRecords!LokalerOrt = -1 rstTestRecords.Update
    Loop

    rstTestRecords.MoveNext

    Auswahlbasierte Filter sind die schnellste Methode, um bestimmte Datensätze zu selektieren. Um ein Kriterium zu definieren, müssen Sie lediglich den Teil eines Feldinhaltes markieren und den Filter aktivieren. Es werden dann nur noch die Datensätze angezeigt, die in diesem Feld ebenfalls den markierten Feldinhalt enthalten.

    Markieren Sie beispielsweise im Datenfeld PLZ die erste Ziffer einer Postleitzahl. Klicken Sie in der Symbolleiste auf das Symbol Auswahlbasierter Filter. Im Datenblatt werden nur noch die Datensätze angezeigt, deren Postleitzahl mit derselben Ziffer beginnt.

    Je nachdem, welchen Teil eines Feldes Sie markieren, bekommt das Filterkriterium eine andere Bedeutung. In der nachstehenden Tabelle sind diese aufgelistet:

    Position Filterkriterium
    Anfang Inhalt*
    Mitte *Inhalt*
    Ende *Inhalt

    Mit dem Symbol Filter entfernen erhalten Sie wieder alle Datensätze im Datenblatt.

    Der wesentliche Unterschied zur Aktualisierungsabfrage besteht darin, dass eine Anfügeabfrage für jeden Datensatz aus dem Abfrageergebnis in der Zieltabelle einen neuen Datensatz anlegt. Anfügeabfragen eignen sich daher nicht, um bereits bestehende Datensätze zu aktualisieren.

    Wenn Sie Datensätze an eine Tabelle anfügen wollen und keine Abfragekriterien benötigen, sollten Sie dazu das Datenbankfenster verwenden. Markieren Sie zunächst die Tabelle, aus der die Daten gelesen werden sollen. Wählen Sie dann nacheinander die Befehle Bearbeiten/Kopieren und Bearbeiten/Einfügen, so dass Access den Dialog Tabelle einfügen als anzeigt. Geben Sie den Namen der Tabelle ein, an die die Daten angefügt werden sollen, und markieren die Option Daten an vorhandene Tabelle anfügen, bevor Sie mit OK bestätigen.

    Erstellen Sie zunächst eine neue Abfrage, und fügen Sie die benötigten Tabellen hinzu. Wählen Sie dann den Befehl Abfrage/Aktualisieren, oder klicken Sie auf das gleichnamige Symbol, um die Auswahlabfrage in eine Aktualisierungsabfrage umzuwandeln. Access fügt dem Entwurfsbereich eine neue Zeile mit der Bezeichnung Aktualisieren hinzu. Ziehen Sie nun alle Datenfelder, deren Werte Sie ändern wollen, in den Entwurfsbereich. Tragen Sie dann in die Aktualisieren-Zeile die neuen Werte für die Datenfelder ein. Definieren Sie gegebenenfalls Abfragekriterien, um die Menge der zu aktualisierenden Datenfelder einzuschränken. Wenn Sie die Aktualisierungsabfrage ausführen lassen, ersetzt Access die Felder des Entwurfsbereichs durch die neuen Werten aus der Aktualisieren-Zeile. Sie können in die Aktualisieren-Zeile beliebige Ausdrücke eintragen. Besonders interessant sind natürlich Bezüge auf Datenfelder derselben oder einer anderen Tabelle. Häufig werden Sie in Aktualisierungsabfragen auch Konstanten wie das Tagesdatum oder die Systemzeit verwenden.

     

    Fügen Sie neue Datenfelder in der Datenblattansicht hinzu, und fahren Sie direkt mit der Eingabe fort.

    Klicken Sie im Datenblatt mit der rechten Maustaste auf die Spaltenüberschrift, vor der Sie das neue Datenfeld einfügen wollen. Wählen Sie aus dem Kontextmenü den Befehl Spalte einfügen. Sie können jetzt noch die Spaltenüberschrift ändern und sofort Daten in die neue Spalte eingeben.

    Mit der Umstellung der Währung auf den Euro in der Systemsteuerung von Windows (Start/Einstellungen/Systemsteuerung/Ländereinstellungen, Registerkarte Währung) allein ist es leider nicht getan.

    Access berücksichtigt diese Einstellung zwar für die Anzeige in Formularen, Berichten und Datenblättern. Dauerhaft gespeichert wird diese Einstellung allerdings nicht.

    Sie müssen vielmehr die entsprechenden Felder in jedem einzelnen Objekt - Tabelle, Formular, Bericht - manuell anpassen und speichern.

    In Access 2000/XP können der Datentyp Währung mit dem Format Euro eingestellt werden. Auf diese Art und Weise kann das Zeichen € angezeigt werden.

    Falls Sie allerdings in der Systemsteuerung die ISO-Bezeichnung EUR auswählen, müssen Sie Ihre Datenbankobjekte wieder manuell anpassen.

     

    Ich möchte in einigen Formularen verhindern, dass der Benutzer mit "Copy and Paste" ganze Datensätze kopiert und einfügt - die Daten sollen immer Feld für Feld eingegeben werden, da daran gewisse Aktionen geknüpft sind.

    Wie kann ich das erreichen?

    Bei solchen Dateneingaben würde ich Ihnen zunächst empfehlen, das Formular im Dialog-Modus zu öffnen, z.B.:

    DoCmd.OpenForm "MyForm", WindowMode:=acDialog

    Auf diese Weise können Sie verhindern, dass die Menübefehle Kopieren und Einfügen ausgeführt werden können. Die Formular-Eigenschaft Kontextmenü sollten Sie auch auf Nein setzen, damit diese Befehle nicht mit der rechten Maustaste erreichbar sind. Zuletzt sollten Sie auch die Tasten Strg+C, Strg+X und Strg+V abfangen und ggfs. ignorieren:

    Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

        'es darf nicht aus der Zwischenablage eingefügt werden!
        'Strg+V also ignorieren

        If KeyCode = 86 Then KeyCode = 0

    End Sub

    Hier finden sie ein Access-Tutorial das Ihnen eine versionsunabhängige Einführung in die Officedatenbank Microsoft Access bietet.

    Diese Site bietet Ihnen außerdem interessante Access-Links und Tipps zu den folgenden Themenbereichen:

    • Design
    • Tabellen
    • Abfragen
    • Makros
    • Module

    Zu guter letzt hat hier der Access-Stammtisch Rhein-Main seine offizielle Homepage.
    Dort treffen sich in lockerer Runde allmonatlich Access-Interessierte.

     

    Der Operator UNION bewirkt, dass nur eindeutige Datensätze zurückgegeben werden.

    Verwenden Sie UNION ALL, um alle Datensätze, einschließlich der Duplikate, abzurufen Das folgende Beispiel gibt alle Datensätze aus den Tabellen Lieferanten und Kunden zurück:

    SELECT [Firma], [Ort] FROM [Lieferanten]

    UNION ALL SELECT [Firma], [Ort] FROM [Kunden];

     

    Im Formular- und Berichtsentwurf können Sie in der Regel nur die Steuerelemente markieren, die auch auf dem Bildschirm liegen. Bei kleinen Bildschirmen bzw. großen Formularen wirkt sich das schon einmal im intensiven Gebrauch der Rolleisten aus.

    Um Steuerelemente per Lineal zu markieren, ziehen Sie mit der Maus einen Bereich auf dem horizontalen oder dem vertikalen Lineal auf. Access markiert dann alle Steuerelemente, die innerhalb dieses Bereichs liegen. Das gilt auch für solche Steuerelemente, die nicht im sichtbaren Bereich des Formularfensters liegen.

     
    Kann das Kalender-Steuerelement für Access 8.0 oder 9.0 automatisch aktualisiert werden?

    Sie können dem Kalender-Steuerelement während der Laufzeit jedes beliebige Datum zuweisen. Nachdem der Benutzer ein Datum in ein Textfeld eingibt, können Sie das Steuerelement wie folgt aktualisieren:

    Private Sub txtDatum_AfterUpdate()

        If IsDate(Me!txtDatum) Then
            Me!Calendar1 = Me!txtDatum
        End If

    End Sub

    Häufig kommt es vor, dass Sie alle Felder einer Tabelle in den Entwurfsbereich übernehmen wollen, die Abfrage also nicht zur Selektion von Datenfeldern, sondern ausschließlich von Datensätzen benutzen. Bei Tabellen mit vielen Feldern ist es aufwendig, jedes Feld einzeln zu übergeben.

    Fügen Sie alle Felder einer Tabelle in einem Schritt im Entwurfsraster ein.

    In jeder Feldliste, die dem Entwurfsbereich hinzugefügt wird, werden alle Datenfelder dieser Tabelle aufgeführt. Zusätzlich finden Sie an erster Stelle der Liste immer ein Sternchen. Dieses Sternchen steht als eine Art Platzhalter für alle Felder der Tabelle. Wenn Sie diese Sternchen dem Entwurfsraster hinzufügen, wird zwar nur eine Spalte besetzt, in der Datenblattansicht werden aber alle Datenfelder mit ihren Inhalten angezeigt. Sie können allerdings kein Kriterium für diese Spalte definieren. Wenn Sie für ein bestimmtes Feld einen Filter erstellen wollen, müssen Sie dieses zusätzlich in das Raster ziehen. Damit das Datenfeld nicht zweimal im Datenblatt angezeigt wird, können Sie das Kontrollkästchen Anzeigen dieser Spalte deaktivieren. Die Spalte dient dann als reines Filterkriterium.

     

     
    Das Service Pack 2 zu Office XP enthält alle aktuellen Updates in einem Paket. Hinweis: Voraussetzung für dieses Update ist die Installation des Office XP Service Pack 1 

    Gelegentlich ist es wichtig zu wissen, ob die aktuelle Datenbank unter der Vollversion von Access oder etwa der Runtime-Version ausgeführt wird.

    Verwenden Sie die SysCmd-Funktion, um die Access-Version zu ermitteln.

    Zu diesem Zweck muss der SysCmd-Funktion die Konstante acSysCmdRuntime als Parameter übergeben werden. Das Ergebnis ist True, falls die Runtime-Version von Access eingesetzt wird. Unter der normalen Access-Version hat der folgende Ausdruck also False zum Ergebnis:

    SysCmd(acSysCmdRuntime)

    Neben der Konstanten acSysCmdRuntime können der SysCmd-Funktion noch weitere Konstanten übergeben werden. Es folgt eine Liste der nützlichsten Informationen:

    Konstante Beschreibung
    acSysCmdRuntime Gibt True zurück, falls die aktuelle Datenbank unter der Runtime-Version von Access ausgeführt wird
    acSysCmdAccessVer Ermittelt die Versionsnummer von Access
    acSysCmdAccessDir Macht das Installationsverzeichnis von Access ausfindig
    acSysCmdGetWorkgroupFile Stellt den Pfad zur Arbeitsgruppen-Datei SYSTEM.MDW fest

     

     

    Eine komfortable MS-Access-Datenbankanwendung zur Verwaltung einer Gewichtsberechnungsdatenbank für kleine und mittlere Betriebe.

    Die Formeln, die Sie für die Gewichtsberechnung benötigen sind bereits in der Datenbank gespeichert und können natürlich jederzeit geändert und neue hinzugefügt werden. Sie brauchen nur noch einzelne Strecken eingeben. Die Volumenberechnung erfolgt dann vollkommen automatisch.

    Außerdem enhält das Tool eine einfache Winkelfunktionsberechnung für Excel.

     

    Es kommt nicht vor, dass ein Mensch älter als 130 Jahre wird. Wenn Ihre Tabelle Geburtsdaten von lebenden Personen speichert, können Sie die Eingabe folglich mit einer Gültigkeitsregel überprüfen.

    Überprüfen Sie mit einer Gültigkeitsregel, dass das Geburtsdatum nicht mehr als 130 Jahre zurückliegt.

    Für die Überprüfung des Geburtsdatums ist folgende Gültigkeitsregel geeignet:

    DatDiff("jjjj";[Geburtsdatum];Datum())<=130 Oder [Geburtsdatum] Ist Null

    Die DatDiff-Funktion von VBA berechnet den Unterschied zwischen zwei Datumswerten. Konkret wird der Unterschied zwischen dem Systemdatum und dem eingegebenen Geburtsdatum ermittelt.

    Der Parameter jjjj bewirkt hierbei, dass der Unterschied in Jahren berechnet wird. Mit anderen Parametern wie beispielsweise m können Sie den Zeitunterschied auch in Monaten oder anderen Intervallen berechnen lassen.

    Wenn der Zeitunterschied kleiner oder gleich 130 Jahre ist, wird die Eingabe akzeptiert. Der Zusatz Oder [Geburtsdatum] Ist Null bewirkt, dass sich die Eingabe in das Feld Geburtsdatum auch wieder löschen lässt. Andernfalls könnten Sie beispielsweise folgende Gültigkeitsmeldung anzeigen lassen:

    Das Geburtsdatum darf nicht mehr als 130 Jahre zurückliegen.

     

    Bei großen Datenbanken müssen die Tabellenstrukturen und die Beziehungen zwischen den Tabellen genau vorher geplant werden, um später Änderungen, die sehr zeit- und kostenintensiv sein können, zu vermeiden.

    Wenn Sie aber lediglich eine Tabelle erstellen wollen, um Ihre Adressen abzulegen, müssen Sie sich keine Gedanken über Datenfelder, Datentypen oder Feldgrößen machen.

    Erzeugen Sie die Tabellenstruktur einfach durch Eingeben Ihrer Daten.

    Access bietet die Möglichkeit, ein leeres Datenblatt, ähnlich wie in Excel zu öffnen, ohne dass vorher Felder definiert werden müssen. Aktivieren Sie dafür zunächst im Datenbankfenster das Register Tabellen und klicken Sie auf Neu. Wählen Sie dann im Dialog Neue Tabelle den Eintrag Datenblattansicht und bestätigen Sie mit OK.

    Es wird ein leeres Datenblatt angezeigt. Die Spaltenüberschriften mit Feld1, Feld2 usw. beschriftet sind. Sie können jetzt mit der Dateneingabe beginnen. Sie sollten lediglich für alle Datensätze die gleiche Feldreihenfolge einhalten, zum Beispiel: Nachname, Vorname, Straße, PLZ, Ort, Geburtstag und Telefon.

    Nachdem Sie alle Eingaben gemacht haben, können Sie die Tabelle unter einem passenden Namen abspeichern. Anschließend wird noch nachgefragt, ob Sie einen Primärschlüssel definieren wollen. Beantworten Sie die Frage mit Ja, wodurch noch ein Primärschlüsselfeld mit dem Namen ID eingefügt wird.

    Wenn Sie Daten in der Datenblattansicht eingegeben haben, können Sie automatisch ein Primärschlüsselfeld von Access definieren lassen.

     

    Dies bedeutet, dass der Datensatzzeiger in der einen Datensatzgruppe auf den gleichen Datensatz wie in der anderen Datensatzgruppe zeigt.

    Mit Hilfe der RecordsetClone-Methode von Formularen können Sie eine Datensatzgruppe mit allen Datensätzen eines Formulars erstellen. Der Austausch von Lesezeichen zwischen dem Formular und der Datensatzgruppe ist ebenfalls möglich.

    Sie können den Austausch von Lesezeichen dazu verwenden, um den Datensatzzeiger sowohl im Formular als auch in der Datensatzgruppe auf den gleichen Datensatz zu positionieren.
    Mit dieser Technik ist beispielsweise eine komfortable Suche nach einem bestimmten Datensatz möglich.

    Sie legen zunächst mit Hilfe der RecordsetClone-Eigenschaft eine Datensatzgruppe auf der Basis eines Formulars an. Hier suchen Sie dann nach dem gewünschten Datensatz und machen diesen nach erfolgreicher Suche auch im Formular zum aktuellen Datensatz.

    Die folgende Beispielprozedur sucht im Formular Adressen nach dem ersten Datensatz, dessen Vor- und Nachname mit dem Buchstaben "D" beginnt:

    Public Sub Suchen()

        Dim R As Recordset
        Dim Bedingung As String
       
       
    'Bedingung zusammenstellen
        Bedingung = "Vorname Like 'D*' and Nachname Like 'D*'" 

        'Datensatzgruppe auf der Basis des Formulars anlegen
        Set R = Forms!Adressen.RecordsetClone
        
        'Ersten Datensatz suchen
        R.FindFirst Bedingung
        'Wurde ein Datensatz gefunden?
        
        If R.NoMatch = False Then
            'Datensatz im Formular auswählen
            Forms!Adressen.Bookmark = R.Bookmark
        Else 
            MsgBox "Kein Datensatz gefunden!" 
        End If

    End Sub

     

    Die Änderungen und den praktischen Umgang mit der neuen Access Version vermittelt dieses Buch. Der Leser erfährt, wie eine relationale Datenbank aufgebaut ist und wie man mit Access eine Datenbank optimal anlegen kann. Er lernt Tabellen zu entwerfen, mit Daten zu füllen und sie mit Feldeigenschaften und Regeln anzupassen.

    Datenauswertung mit Abfragen sowie Dateneingabe mit Formularen und die Erstellung von Berichten und Diagrammen werden ebenfalls behandelt.

    Außerdem vermittelt Access 2003 – Das Buch den Umgang mit Makros zur Automatisierung von Arbeitsabläufen und Access-Dienstprogrammen.

    Der Datenbankentwickler erfährt auch Wissenswertes über die Internet- und Netzwerkfunktionen von Access und den Datenaustausch mit anderen Office-Programmen. 

    Von Stefan Truckenmüller; Sybex (2003); Euro 39,95; ISBN: 3815503612

     

     
    Mit TriniDat Adressen 95 und TriniDat Adressen 97 verwalten Sie Firmen, Gruppen und Personen mit mehreren Anschriften und beliebig vielen Kommunikationsarten (Telefon, Telefax, e-Mail, usw.). Sie können die Beziehungen zwischen Firmen, Gruppen und Personen einfach und schnell in Ihrer Datenbank abbilden. Darüber hinaus verwaltet Adressen vergangenheits- und zukunftsbezogene Aktivitäten inkl. ToDo-Liste und Historie-Funktion. Ein besonderes Highlight sind die Funktionen zum Schreiben von Briefen. Damit erledigen Sie Ihre Korrespondenz im Handumdrehen. Natürlich ist auch eine Anbindung an Microsoft Word vorhanden.
    Vollversion
     

    Bei manchen Datenfeldern ist es sinnvoll, eine Eingabe zu erzwingen oder ein bestimmtes Eingabeformat vorzugeben. Der Anwender braucht sich dann nicht mehr um bestimmte Konventionen zu kümmern, da diese von Access aus überwacht werden.

    Sie wollen beispielsweise, dass im Feld Postleitzahl immer fünfstellige Zahlen eingegeben werden. Wenn das Feld vom Datentyp Text ist, können Sie die Feldgröße auf fünf beschränken. Sie können aber nicht verhindern, dass nur drei oder zwei Ziffern eingegeben werden.

    Definieren Sie für Felder, die bestimmten Konventionen unterliegen sollen, ein Eingabeformat.

    Markieren Sie im Tabellenentwurfsbereich das Datenfeld, für das Sie ein Eingabeformat definieren wollen. Klicken Sie dann im Register Allgemein in das Eingabefeld der Eigenschaft Eingabeformat.

    Rechts neben dem Eingabefeld erscheint nun eine Assistentenschaltfläche. Starten Sie den Eingabeformatassistenten mit einem Klick auf die Schaltfläche.

    Der Assistent schlägt in einem Listenfeld bereits verschiedene Formate für Datum, Zeit, Telefonnummer und auch Postleitzahlen vor.
    Markieren Sie beispielsweise den Eintrag Postleitzahl. Um die Spezifikationen des Formats einzusehen, klicken Sie auf Bearbeiten. Dort können Sie das Format Ihren Vorstellungen anpassen.
    Um das Format zu übernehmen betätigen Sie die Schaltfläche Fertigstellen. Der Assistent wird geschlossen und das Format bei der Eigenschaft Eingabeformat eingetragen.

    Wenn Sie später in diesem Feld Daten eingeben, müssen Sie für eine Postleitzahl genau fünf Ziffern eingeben. Bei weniger Ziffern erscheint eine Fehlermeldung, mehr Ziffern können erst gar nicht eingegeben werden.

    Mit dem Eingabeformat-Assistenten legen Sie fest, welche und wie viele Zeichen oder Ziffern in ein Feld eingegeben werden müssen.

     

    Dieser leicht verständlich geschriebene Praxisratgeber unterstützt Sie dabei, Ihr Online-Business mit wenig Aufwand rechtlich abzusichern und juristische Fragen sofort zu lösen. Anhand konkreter Probleme und Fragestellungen demonstrieren die Autoren, wie Sie sich effektiv vor unberechtigten Reklamationen, Abmahnungen oder Online-Betrügern schützen. Inklusive Musterformulierungen und Musterschreiben für den direkten Einsatz.

    Verträge, Versand & Co.:
    Allgemeine Geschäftsbedingungen, Impressum
    und Preisangaben korrekt formulieren und
    präsentieren Absicherung gegen Rücktrittsmissbrauch

    Virtuelle Auktionshäuser:
    Grundlagen zum Geschäft mit und über
    eBay Informationspflichten und Fernabsatzrecht -
    praktische Tipps für gewerbliche Anbieter und PowerSeller

    Reklamation und Gewährleistung:
    Richtiges Verhalten bei Reklamationen,
    Widerruf, Rückgabe und Garantieansprüchen

    Schutz vor Haftung:
    Risiken kennen und vermeiden: rechtliche
    Verantwortung für Webseiten, Werbebanner,
    Partnerprogramme, Foren, Blogs und Links

    Wettbewerbs- und Werberecht:
    Beispiele (un)zulässiger Werbemassnahmen
    Werbeanrufe, Newsletter, Spam & Faxwerbung
    Rabatte, Zugaben und Lockangebote

    Steuerrecht und E-Commerce:
    Der Fiskus surft mit: So vermeiden Sie Ärger
    mit dem Finanzamt

    Abmahnungen und Gerichtsverfahren:
    Ärger im Vorfeld vermeiden Richtig reagieren
    bei Abmahnungen und einstweiliger Verfügung
    Eigene Rechte durchsetzen und sich gegen
    unberechtigte Angriffe verteidigen

     

    In einer unter Access 97 erstellten Datenbank habe ich folgendes Problem:

    Sämtliche Datumsfunktionen, wie Date(), Datepart(..), sind nach dem Übertragen der Datenbank auf einen anderen Rechner, auf dem ebenfalls Access 97 installiert ist, nicht mehr verfügbar. Die Fehlermeldung lautet Funktion Date() nicht verfügbar.

    Kann man unter Access 97 Datumsfunktionen aktivieren bzw. deaktivieren? Wie kann ich dieses Problem lösen?

    Das Problem hat wahrscheinlich weniger mit aktivierten oder nicht aktivierten Datumsfunktionen zu tun, sondern mit den Referenzen auf Bibliotheken.

    Es kann nämlich sein, dass die Objektbibliotheken sich nicht auf dem zweiten Rechner befinden. Sie können dies prüfen, indem Sie:

    1. Ein Modul in der Entwurfsansicht öffnen
    2. Den Menübefehl Extras/Verweise auswählen
    3. Irgendwelche Einträge, die als NICHT VORHANDEN gekennzeichnet sind, deaktivieren und neu verknüpfen

    Ich habe ein Hauptformular, das mit einem Unterformular verknüpft ist.

    In dem Hauptformular will ich nun die Anzahl der Personen angeben, die im Unterformular ein bestimmtes Kontrollkästchen angeklickt haben.

    Mit der DomAnzahl-Funktion können Sie die Anzahl der Datensätze mit bestimmten Kriterien auslesen. Das Textfeld im Hauptformular hätte beispielsweise folgenden Steuerelementinhalt:

    = DomAnzahl("PersonID"; "Personen"; "Aktiv=True AND HauptID=" & [ID])

    Diese Funktion ermittelt die Anzahl der Personen, die mit dem aktuellen Primärschlüssel im Hauptformular verknüpft sind. Als weiteres Kriterium muss das Feld Aktiv den Wert True haben.

    Eine komplette Programmbeschreibung mit Schritt-für-Schritt-Anleitungen zum Erlernen der Arbeitstechniken, schnell zugänglichen Übersichten und Tipps von den Profis. Dieses Buch hat sich zum Ziel gesetzt Ihnen den Umgang mit Access von den Grundlagen bis hin zu fortgeschrittenen Themen wie der Programmierung mit VBA grundlegend und verständlich zu erklären. Geben Sie sich nicht mit irgendeinem Buch zufrieden, denn es gibt "Das Handbuch" - direkt von Microsoft Press.

    Von Natascha Nicol, Ralf Albrecht; Microsoft Press (1998); Euro 39,90; ISBN: 3-86063-135-7

     

    Standardmäßig zeigt Access im Modulfenster immer nur eine einzelne Prozedur und keinen vollständigen Quelltext an. Wenn Ihr Modul viele kleine Prozeduren enthält, wird der Wechsel zwischen den einzelnen Prozeduren schnell lästig.

    Aktivieren Sie in diesem Fall die volle Modulansicht.

    Bei dieser Ansicht werden alle Prozeduren eines Moduls nacheinander in einem zusammenhängenden Programmtext aufgelistet. Sie aktivieren diese Ansicht im Register Modul des Dialogfenster Extras / Optionen. Markieren Sie hier die Option Volle Modulansicht.

    Damit die Prozeduren zu besseren Unterscheidung durch eine horizontale Linie getrennt werden, aktivieren Sie zusätzlich die Option Prozedurtrennzeichen.

     

    Bei der Arbeit mit Dateien muß ein Dateiname oft in einen Pfad und den eigentlichen Dateinamen zerlegt werden.

    Diese Zerlegung des Dateinamens erleichtert die Prozedur DateinameZerlegen.

    Die Prozedur hat den folgenden Aufbau:

    Sub DateinameZerlegen(PfadName As String, Pfad As String, Name As String)

        Dim pos As Integer
        Dim i As Integer
        pos = -1

        'Backslash suchen
        For i = Len(PfadName) To 1 Step -1
            If Mid(PfadName, i, 1) = "\" Then pos = i
                Exit For
            End If
        Next i

        'Zerlegen
        If pos <> -1 Then
            Pfad = Left(PfadName, pos - 1) Name = Right(PfadName, Len(PfadName) - pos)
        Else
            Name = PfadName
        End If

    End Sub

    Beim Start übergeben Sie der Prozedur den kompletten Namen der Datei inklusive dem Pfad. Außerdem übergeben Sie zwei leere Variablen, die anschließend das Ergebnis aufnehmen.

     

    Für bestimmte Verarbeitungsvorgänge ist der Zugriff auf den Wert des letzten Datensatzes notwendig. Dies erledigen Sie normalerweise in einer VBA-Prozedur, die ein Recordset öffnet und diesen Wert ausliest. Sie können dies allerdings auch in einer Abfrage erledigen.

    Ein typisches Beispiel für eine solche Verarbeitung ist die Berechnung der gefahrenen Kilometer eines Autos zwischen zwei Datumswerten. Damit können Sie beispielsweise ein Fahrtenbuch führen oder den Verbrauch berechnen.

    Ausgangspunkt ist eine Tabelle (siehe Abbildung 1), die neben der ID zwei Felder für Datum und Kilometerstand enthält. Die ID muss ein fortlaufender numerischer Wert sein, so wie er vom Datentyp AutoWert erzeugt wird.

    Erstellen Sie nun eine Abfrage mit diesen drei Feldern und fügen Sie ein berechnetes Feld LetzterKilometerstand mit folgendem Ausdruck hinzu:

    LetzterKilometerstand: DomWert("[Kilometerstand]";"tblKilometer";"[KilometerID] = " &
    [KilometerID]-1)

    Die DomWert-Funktion liest das Feld Kilometerstand aus. Das Kriterium ist die KilometerID des letzten Datensatzes.

    Das berechnete Feld LetzterKilometerstand kann dann zu weiteren Berechnungen verwendet werden.

     

    Die Funktion einiger Steuerelemente sind oftmals so komplex, dass sich eine entsprechende Erklärung nur schwer in der Statuszeile oder in einem ToolTips unterbringen lässt.

    Das Ereignis Bei Mausbewegung eignet sich sehr gut zur Anzeige zusätzlicher Informationen in einem Textfeld.

    Sobald der Mauszeiger über ein Steuerelement bewegt wird, löst Access für dieses Steuerelement das Mausbewegung-Ereignis aus. Eine entsprechende Ereignisprozeudur kann nun einen beliebigen Informationstext ausgeben. Dies kann in einem Textfeld des aktuellen Formulars oder auch auf einem speziellen Informationsformular erfolgen.

    Die folgende Ereignisprozedur wählt den ersten Weg und gibt den Informationstext im Steuerelement txtHinweis des aktuellen Formulars aus. Sie ist an das Mausbewegung-Ereignis einer Schaltfläche gebunden, zu der die Informationen angezeigt werden sollen:

    Private Sub Schaltfläche0_MouseMove(Button As Integer, 

        'Hinweis ausgeben
        Me!txtHinweis = "Hinweis zur Schaltfläche 0..."

    End Sub

    Wenn Sie den Mauszeiger vom Steuerelement wegbewegen, muss der Hinweistext wieder gelöscht werden. Diese Aufgabe übernimmt das Mausbewegung-Ereignis des Detailbereichs: ´

    Private Sub Detailbereich_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

        'Hinweis löschen
        txtHinweis = ""

    End Sub

    Für den Fall, dass Sie Hinweise zu Steuerelementen in Kopf- oder Fußbereichen anzeigen möchten, müssen Sie die betreffenden Bereiche ebenfalls mit einer Mausbewegung-Ereignisprozedur zum Löschen des Hinweises versehen.

     

    Um die positiven und negativen Zahlen beispielsweise in verschiedenen Farben anzuzeigen gehen Sie wie folgt vor:

    Markieren Sie das Formular im Datenbankfenster und öffnen Sie dieses in der Entwurfsansicht. Dort klicken Sie mit dem Mauszeiger auf das Zahlen-Textfeld. Öffnen Sie das Eigenschaftenfenster des gewünschten Zahlenfeldes und tragen Sie in die Format-Eigenschaft das Anzeigeformat ein.

    Um negative Zahlen rot anzuzeigen, geben Sie den folgenden Ausdruck ein:

     -#.##0,00 € [Rot]

    Um positive Zahlen schwarz anzuzeigen, geben Sie den folgenden Ausdruck ein:

    #.##0,00 €[Schwarz]

     

    VBA-Code aus dem Startformular heraus ausführen
    Wenn Sie beim Datenbankstart VBA-Code ausführen wollen und ein Startformular verwenden, sollte dieser Code aus dem Startformualr heraus ausgeführt und nicht etwa durch ein Autoexec-Makro aufgerufen werden. Beim Laden des Startformulars wird nämlich automatisch auch das Formularmodul geladen. Dieser Code wird schneller ausgeführt, als der Code in einem Standardmodul, der über ein Autoexec-Makro aufgerufen wird.

    VBA-Code im Startformular minimieren
    Beschränken Sie den VBA-Code in einem Startformular auf das Notwendigste. Vor allem Operationen wie Datenzugriffe oder die Überprüfung von Datenbankobjekten können möglicherweise auch zu einem späteren Zeitpunkt ausgeführt werden. Wenn Sie Ihren Code unter diesen Gesichtspunkten überprüfen und den Ablauf entsprechend ändern, startet Ihre Datenbank schneller und flüssiger.

     
    Auf OfficeDaily.de gibt es hilfreiche Tipps und Problemlösungen für alle Anwendungen des Office-Paketes. Der tägliche Newsletter liefert nützliche News und Ratschläge immer aktuell direkt auf den heimischen PC und lässt die Leser täglich besser werden im Umgang mit MS-Office. 

    Der Informationsdienst Access_aktuell ist die schnelle und direkte Hilfe für Access-Entwickler. Ergänzend zum monatlichen Newsletter finden Sie hier Muster-Datenbanken, Formulare, VBA-Code und viele nützliche Tipps und Tricks für Ihre tägliche Arbeit mit Access. Mit diesem nützlichen Profi-Know-how werden Sie zukünftig noch schneller und effizienter neue Datenbanken entwickeln und laufende Projekte optimieren.

    Access-Profi Thomas Tai und sein Team präsentiert Ihnen Monat für Monat folgende Rubriken:

    • Downloads und Updates: Kostenlose Access-Tools und wichtige Updates, mit denen Sie Ihr Access besser, sicherer und effizienter machen.
    • VBA – fix und fertig: Fertige VBA-Routinen zum sofortigen Einsatz. Alle Prozeduren sind nach dem Import über einen einfachen Funktionsaufruf sofort einsetzbar.
    • Formulartipps: Machen Sie Ihre Formulare mit den Tipps aus Access_aktuell intelligent und leistungsfähig.
    • SQL-Corner: Praxisorientierte Lösungen für die wichtigsten Anwendungssituationen rund um SQL.
    • Präsentieren und Auswerten mit Berichten: Viele Tipps, mit denen Sie in Berichten verblüffende Effekte erzielen und aussagekräftige Auswertungen erhalten können.
    • ... und noch vieles mehr.

    Mit Access_aktuell nutzen Sie die erfolgserprobten Instrumente der Access-Profis und gestalten so Ihre Arbeit mit Access noch erfolgreicher.

     
    Mit dem TriniDat MsgBox-Assistenten fügen Sie MsgBox-Anweisungen auf komfortable Weise in Ihren Programmcode ein. Der Assistent erlaubt Ihnen hierbei die Konfiguration aller Parameter über einen komfortablen Dialog. Mit einer Test-Funktion können Sie das fertige Dialogfenster vor dem Einsatz begutachten. Auf Wunsch fügt der Assistent zusätzlich auch eine If-Anweisung zur Abfrage der angeklickten Schaltfläche in das Modul ein. Vollversion mit ausführlicher Demo-Datenbank  

    Da die Eigenschaft Standardansicht (engl. DefaultView) leider nur in der Entwurfsansicht eingestellt werden darf, müssen Sie eine Kopie des Unterformulars erstellen.

    Markieren Sie dazu das Unterformular im Datenbankfenster, wählen Sie den Menübefehl Bearbeiten / Kopieren und anschließend Bearbeiten / Einfügen.

    Geben Sie der Kopie einen aussagekräftigen Namen wie beispielsweise Unterformular - Datenblatt. Für die gerade erstellte Kopie aktivieren Sie nun noch die Datenblattansicht.
    Öffnen Sie die Kopie im Entwurfsmodus und ändern Sie die Standardansicht-Eigenschaft in Datenblatt. Ihre Datenbank sollte jetzt zwei identische Formulare enthalten, die sich nur durch den Inhalt der Standardansicht-Eigenschaft unterscheiden.

    Die folgende Prozedur verändert den Inhalt der Eigenschaft Herkunfsobjekt (engl. SourceObject), um jeweils das eine oder das andere Unterformular zu laden. Sie können Sie Prozedur direkt an das Klick-Ereignis einer Schaltfläche binden.

    Vor dem Einsatz der Prozedur müssen Sie den Namen des Steuerelements sowie den Namen des Unterformularsteuerelements (in diesem Beispiel Bestellungsdaten) entsprechend anpassen.

    Private Sub btnAnsicht_Click()

        Dim uform As Control
        Set uform = Me![Bestellungsdaten]

        If uform.SourceObject = "Unterformular - Einzeln" Then
            uform.SourceObject = "Unterformular - Datenblatt "
        Else
            uform.SourceObject = "Unterformular - Einzeln "
        End If

    End Sub

    Das Unterformular in der Datenblattansicht..... (siehe Abbildung 2)

     
    Auf seiner Homepage gibt es News für Entwickler, eine umfangreiche FAQ-Datei mit konkreten Lösungen auch für VBA sowie eine detaillierte kritische Bewertung von Access 2000. Darüber hinaus bietet Donaubauer Datenbankentwicklung und Schulung an. 

    Zur Vorbereitung benötigen Sie den folgenden Programmcode im Deklarationsbereich:

    Public Const HKEY_CURRENT_USER = &H80000001
    Public Const KEY_QUERY_VALUE = &H1
    Public Const ERROR_SUCCESS = 0&
    Public Const REG_SZ = 1
    Public Const KEY_SET_VALUE = &H2

    Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias _
           "RegOpenKeyExA" (ByVal hKey As Long, _
           ByVal lpSubKey As String, ByVal ulOptions As Long, _
           ByVal samDesired As Long, phkResult As Long) As Long

    Declare Function RegSetValue Lib "advapi32.dll" Alias _
            "RegSetValueExA" (ByVal hKey As Long, _
            ByVal lpValueName As String, ByVal Reserved As Long, _
            ByVal dwType As Long, lpData As Any, _
            ByVal cbData As Long) As Long
                            
    Declare Function RegCloseKey Lib "advapi32.dll" _
           (ByVal hKey As Long) As Long

    Der betreffenden Schlüssel zum Ändern des Standardverzeichnisses finden Sie im Bereich HKEY_CURRENT_USER unter Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders.

    Eine VBA-Funktion, die den neuen Standardordner für Office-Dokumente ändert, sieht wie folgt aus:

    Public Function PrivatordnerÄndern(strNeuerOrdner As String)

    Dim strSchlüssel As String, lSchlüssel As Long
    Dim Länge As Long

        strSchlüssel = "Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"

        Länge = Len(strNeuerOrdner)

        If RegOpenKeyEx(HKEY_CURRENT_USER, strSchlüssel, _
                                       ByVal 0&, KEY_SET_VALUE, lSchlüssel) _
                                       = ERROR_SUCCESS Then

            If RegSetValue(lSchlüssel, "Personal", ByVal 0&, _
                                             REG_SZ, ByVal strNeuerOrdner, Länge) _
                                             = ERROR_SUCCESS Then

                Debug.Print "Privatordner geändert"

        Else

                Debug.Print "Privatordner nicht geändert"

        End If

        RegCloseKey lSchlüssel

        End If

    End Function

    Um den Privatordner in "C:\MeineDokumente" zu ändern, rufen Sie die Funktion folgendermaßen auf:

    PrivatordnerÄndern ("C:\MeineDokumente")

    Beachten Sie, daß die Änderung erst beim nächsten Start der Anwendung wirksam wird.

    Bei der Lösung kniffliger Probleme mit Hilfe von Makros ist die Grenze des Machbaren schnell erreicht. Abhilfe schafft nur die Übersetzung des Makros in die Programmiersprache VBA, um hier von dem wesentlich größeren Funktionsumfang zu profitieren.

    Zur Konvertierung der gewünschten Makros in VBA-Code stellt Access eine spezielle Funktion zur Verfügung.

    Markieren Sie dazu im Datenbankfenster das gewünschte Makro und wählen Sie den Menüpunkt Extras/Makro/Makros zu Visual Basic konvertieren aus.

    Es folgt ein weiteres Dialogfenster, über das Sie die Fehlerbehandlung und das Einfügen von Makrokommentaren in den VBA-Code konfigurieren können. Mit Konvertieren starten Sie die Umwandlung. Das Ergebnis ist ein neues Modul, in dem jedes Untermakro durch eine eigene Function-Prozedur repräsentiert wird.

    Nach der erfolgreichen Konvertierung werden Sie durch ein Dialogfenster informiert. Siehe Abbildung 1.

    Die Konvertierung eines Makros eignet sich sehr gut zum Erlernen der Programmiersprache VBA. Erstellen Sie einfach ein beliebiges Makro und studieren Sie nachher die VBA-Übersetzung.

     
    Der TriniDat Dialog-Assistent reduziert das lästige Anlegen von Dialogfenstern auf wenige Mausklicks. Im übersichtlichen Startfenster legen Sie den Aufbau Ihres Dialogfensters fest. Ein Vorschau-Fenster gibt Ihnen einen Eindruck vom Aussehen des fertigen Dialogfensters. Der Dialog-Assistent ist nahtlos in die Access-Benutzeroberfläche integriert. Beim Anlegen eines neuen Formulars erscheint er automatisch in der Auswahlliste aller Formularassistenten. Vollversion  
    Die Seite ist als Service für die Leser des gleichnamigen im Haufe-Verlag erscheinenden Magazins und alle Accessentwickler und -anwender gedacht.  

    Access verwendet zur Anzeige von Währungsfeldern das Format, das in den Ländereinstellungen der Systemsteuerung von Windows festgelegt ist. Manchmal ist es aber erforderlich, Währungsfelder in einem individuellen Format anzuzeigen.

    Um die Anzeige nur eines bestimmten Währungsfeldes zu ändern, müssen Sie die Eigenschaft Format anpassen.

    Die Anpassung der Eigenschaft Format nehmen Sie am besten auf der Ebene des Tabellenentwurfs vor. Access berücksichtigt das neue Währungsformat dann in allen neuen Formularen und Berichten, die auf der Tabelle basieren.

    Geben Sie beispielsweise folgenden Ausdruck für die Eigenschaft ein:

    #.##0,00" US-$";(#.##0,00" US-$)"[Rot]

    Dieser Ausdruck enthält zwei durch Semikola getrennte Bereiche. Der erste Bereich gilt für positive Werte und zeigt den Text US-$ als Währungssymbol an.

    Der zweite Bereich gilt für negative Werte. Er hat das gleiche Währungssymbol, zeigt aber statt eines Minuszeichens zwei runde Klammern an. Außerdem werden negative Werte in roter Schrift formatiert. Die folgende Tabelle enthält einige Beispiele für formatierte Währungsbeträge.

    Währungsbetrag Farbe
    18,00 US-$ Standard
    (2.000,00 US-$) Rot
    (50.000.000,00 US-$) Standard
    40.000,00 US-$ Rot
    0,00 US-$ Standard
    25,00 US-$ Rot
     

    Um die Steuerelementgröße ganz genau anzupassen, gehen Sie wie folgt vor: 

    1. Markieren Sie eines oder mehrere Steuerelemente. 
    2. Betätigen Sie bei gedrückter Shift-Taste die Pfeiltasten.

    Die Tasten  und ? verändern die linke und rechte und die Tasten ? und ? verändern die obere und untere Steuerelementbegrenzung.

     

    Bei Access kommen häufig Kombinationsfelder zur Anwendung, die die Eingabe anhand einer so genannten Nachschlagetabelle erleichtern. So kann beispielsweise bei der Eingabe von Adressen ein Kombinationsfeld zur Auswahl einer Branche vorkommen.

    Erst die Zuweisung eines Standardwerts verhindert, dass Kombinationsfelder leer bleiben und irgendwelche Gültigkeitsregeln verletzt werden. Tragen Sie den folgenden Ausdruck für die Eigenschaft Standardwert des Kombinationsfeldes ein:

    =DomMin("[Branche-Nr]";"Branchen")

    Die DomMin-Funktion ermittelt den kleinsten Wert des Feldes Branche-Nr aus der Tabelle "Branchen". Bei Ihren eigenen Kombinationsfeldern müssen Sie den Feldnamen Branche-Nr gegen das Feld austauschen, das Sie mit der Eigenschaft Gebundene Spalte spezifiziert haben. Ersetzen Sie außerdem den Tabellennamen "Branchen" gegen den Namen der Tabelle oder Abfrage, in der das Datenfeld enthalten ist.

     

    Wenn Sie umfangreiche Vorgänge an Formularen durchführen, die mit Bildschirmaktualisierungen verbunden sind, kosten diese oftmals sehr viel Zeit.

    Mit Hilfe der Painting-Eigenschaft können Sie die Bildschirmaktualisierung eines Formulars verhindern, um so die Abarbeitungsgeschwindigkeit zu beschleunigen.

    Besonders stark macht sich die Zeitverzögerung des Bildschirmaufbaus beim Einsatz der Requery-Methode bemerkbar, die die Datenquelle eines Formulars auf den neusten Stand bringt. Hierbei wird nämlich automatisch zum ersten Datensatz der Datenquelle gewechselt.

    Wenn Sie aber direkt nach der Aktualisierung sowieso auf einen anderen Datensatz positionieren möchten, ist der Wechsel zum ersten Datensatz eher störend.

    Setzen Sie in diesem Fall die Painting-Eigenschaft des Formulars vorher auf False, um Bildschirmaktualisierungen zu verhindern. Anschließend führen Sie die Requery-Methode aus und positionieren auf den richtigen Datensatz.

    Damit Access diesen auch im Formular präsentieren kann, dürfen Sie anschließend nicht vergessen, die Painting-Eigenschaft wieder auf True zu setzen. Wenn Sie dies vergessen, reagiert das Formular auf keine Benutzeraktionen mehr und Sie könnten den Eindruck eines Systemabsturzes erhalten.

    Das folgende Beispiel positioniert in einem Adressenformular auf die Adresse mit der Nummer 3. Vor der Positionierung erfolgt eine Aktualisierung der Datenquelle:

    Sub PaintingDemo()

    Dim FormObj As Form
    Dim R As Recordset
    On Error GoTo Err
    Set FormObj = Forms!Adressen

    FormObj.Painting = False
    FormObj.Requery
    Set R = FormObj.RecordsetClone
    R.FindFirst "AdresseNr = 3"
    If Not R.NoMatch Then FormObj.Bookmark = R.Bookmark

    Ende: FormObj.Painting = True Exit Sub

    Err: MsgBox Err.Description Resume Ende

    End Sub

    Beachten Sie, dass die Painting-Eigenschaft in diesem Beispiel auch dann wieder auf True gesetzt wird, falls ein Laufzeitfehler auftritt.
     

    Wenn Ihnen die Drag&Drop-Methode nicht zusagt, probieren Sie doch die folgende Möglichkeit.

    Klicken Sie doppelt auf den Feldnamen, den Sie dem Entwurfsraster hinzufügen wollen. Das Datenfeld wird in der ersten freien Spalte plaziert. Mit dieser Methode können Sie nur einzelne Felder hinzufügen.

     

    Um die Berechnung in einem Formular durchzuführen, tragen Sie den folgenden Ausdruck in die Eigenschaft Steuerelementinhalt eines ungebundenen Steuerelements ein:

    =DatTeil("ww";[Datumswert];2;2)

    Ersetzen Sie dabei Datumswert durch den Datumsausdruck, dessen Kalenderwoche Sie berechnen wollen.

     

    Access zeigt in der Titelzeile standardmäßig einen kleinen Schlüssel als Anwendungssymbol an.

    Dieses Symbol können Sie entweder einmal festlegen oder auch während der Laufzeit verändern, um den Anwender beispielsweise über bestimmte Zustände der Datenbank zu informieren.

    Besonders vorteilhaft ist diese Art der Signalisierung, wenn das Hauptfenster von Access minimiert ist. Bei längeren Aufgaben kann sich der Anwender so direkt via Task-Leiste über den Fortschritt informieren.

    Um das Symbol einmal für die gesamte Datenbank zu verändern, wählen Sie den Menüpunkt Extras / Start... aus. Geben Sie im Textfeld Anwendungssymbol die Symboldatei ein, die Sie verwenden möchten. Siehe Abbildung 1.

    Das Ändern des Anwendungssymbols während der Laufzeit erledigen Sie mittels der AppIcon-Eigenschaft, die von Database-Objekten zur Verfügung gestellt wird. Dieser Eigenschaft kann der Name einer ICO- oder BMP-Grafikdatei zugewiesen werden. Damit sich die Änderungen sofort auswirken, muss anschließend die RefreshTitelBar-Eigenschaft des Application-Objekts ausgeführt werden.

    Da es sich bei der AppIcon-Eigenschaft um eine benutzerdefinierte Eigenschaft handelt, muss diese vor dem ersten Zugriff neu angelegt werden. Das folgende Beispiel zeigt, wie dies funktioniert:

    Public Sub AnwendungssymbolÄndern()

        Dim Prop As Property
        Const Grafikdatei = "F:\Bitmaps\buttons\TriniDat.ico"
        On Error GoTo Err ErneuterZugriff:

        DBEngine(0)(0).Properties!AppIcon = Grafikdatei Application.RefreshTitleBar
        Exit Sub

    Err: 
        If Err.Number = 3270 Then
            'Eigenschaft hinzufügen
            Set Prop = DBEngine(0)(0).CreateProperty("AppIcon", dbText, " ")
            DBEngine(0)(0).Properties.Append Prop
            Resume ErneuterZugriff
        Else
            MsgBox Err.Description
        End If

    End Sub

     

    Bei der Neuanlage eines Datensatzes bekommt der Anwender in der Regel einen komplett leeren Datensatz präsentiert. Oftmals wäre es jedoch vorteilhaft, wenn die einzelnen Datenfelder bereits mit den Inhalten eines anderen Datensatzes vorbelegt wären.

    Dies bewerkstelligen Sie, indem Sie einen bestimmten Datensatz duplizieren. Das Duplizieren eines Datensatzes kann entweder von Hand oder über eine VBA-Prozedur erledigt werden.

    Die Vorgehensweise ist hierbei identisch: Zuerst muß der aktuelle Datensatz im Formular markiert werden. Dann wird er mit dem Menübefehl Bearbeiten>Kopieren in die Zwischenablage kopiert und von hier aus mittels Bearbeiten>Am Ende Anfügen an das Ende angehängt.

    Genau die gleichen Schritte erledigt die folgende VBA-Prozedur:

    Public Sub DatensatzDuplizieren()

        On Error GoTo Err
        'Datensatz markieren

        DoCmd.DoMenuItem acFormBar, acEditMenu, acSelectRecord, , acMenuVer70

        'Kopieren
        DoCmd.DoMenuItem acFormBar, acEditMenu, acCopy, , acMenuVer70

        'Am Ende anfügen
        DoCmd.DoMenuItem acFormBar, acEditMenu, 5, 0, acMenuVer70

    Exit Sub

    Err:
        Beep
        MsgBox "Der Datensatz kann nicht dupliziert werden!"
        Exit Sub

    End Sub

    Rufen Sie die Prozedur einfach von einer Schaltfläche aus auf, die Sie innerhalb des Formulars platzieren.

    Die Prozedur enthält eine Fehlerbehandungsroutine, um eventuell auftretende Fehler abzufangen. Ein Fehler kann beispielsweise bei dem Versuch auftreten, den neuen Datensatz zu duplizieren.

     

    Über ein Kombinationsfeld kann in einem Formular ein bestimmter Datensatz gesucht werden. Wende ich einen Filter an, sollen auch die Einträge des Kombinationsfeldes gefiltert werden.

    Wie übertrage ich einen Formularfilter auf ein Kombinationsfeld?

    Die RowSource-Eigenschaft erwartet entweder den Namen einer Tabelle bzw. Abfrage oder einen SQL-Befehl als String.

    Ich würde an Ihrer Stelle die Filter-Eigenschaft des Formulars abfragen. Diese Eigenschaft enthält die Where-Klausel, die die Daten filtert, wie z.B.:

    (Kunden.Position = "Chef")

    Diesen Text können Sie dann an die RowSource-Eigenschaft (einen SQL-Befehl) des Kombinationsfeldes anfügen, um diese Daten auch zu filtern:

    Me.Kombinationsfeld.RowSource = _
    Me.Kombinationsfeld.RowSource & Me.Filter

    Access stellt eine Reihe von Möglichkeiten zur Verfügung, eine Datenbank zu schließen. Nicht alle Möglichkeiten lassen sich von VBA aus kontrollieren. In der Praxis kann es aber notwendig sein, beim Beenden der Datenbank bestimmte Aufgaben durchzuführen.

    Um über das Beenden der Datenbank informiert zu werden, verwenden Sie ein unsichtbares Formular.

    Alles was Sie benötigen, ist ein leeres Formular, für das Sie eine BeimSchließen-Ereignisprozedur anlegen. Hier platzieren Sie den Programmcode, der beim Schließen der Datenbank abgearbeitet werden soll.

    Das Formular muss nun lediglich noch direkt nach dem Öffnen der Datenbank im unsichtbaren Zustand geöffnet werden. Dies erledigen Sie am einfachsten vom AUTOEXEC-Makro aus über die ÖffnenFormular-Aktion.

    Stellen Sie hierbei das Fenstermodus-Argument auf Ausgeblendet ein. Sobald die Datenbank beendet wird, schließt Access auch das unsichtbare Formular, was dann wiederum zur Ausführung der BeimSchließen-Ereignisprozedur führt.

    Wenn Sie das Schließen der Datenbank verhindern möchten, setzen Sie einfach die Cancel-Eigenschaft innerhalb der BeimSchließen-Ereignisprozedur des unsichtbaren Formulars auf True.

     

    Diese Buchreihe wurde mehrfach mit dem Urteil SEHR GUT bewertet!

    Alle Details sind bereits didaktisch so zusammengetragen, dass der Leser mit einem Minimum an Aufwand lernt - ohne nachzuschlagen und herumzusuchen. Das kann bis zu 40% Zeitersparnis gegenüber dem Arbeiten mit konventionellen Büchern bedeuten! Einsteiger haben schon nach kurzer Zeit die ersten Erfolgserlebnisse. Erfahrene Anwender können dank der vollständigen Beschreibung auch die letzten Ressourcen des Programms nutzen und erhalten zahlreiche Tips Das Reihenkonzept bietet: - knappe, klare Formulierungen - Übersichtlichkeit, Verständlichkeit und Kompetenz - kein Computerchinesisch, sondern leicht nachvollziehbare Beispiele und Tips - Praxisnähe durch Beispiele aus der Praxis für die Praxis - Zeitersparnis durch "Learning by doing" mit Schritt-für-Schritt-Erklärungen - Modularität, so daß der Leser sofort die Lösung zu einem Thema findet - 100 % Programmnutzung (im Grund- u. Aufbaukurs sind alle Programmfunktionen beschrieben)

    Von Jutta Giersig; Giersig (2003); Euro 33,50; ISBN: 3932421507

     

    Passen Sie Größe und Position Ihrer Formulare vor dem Speichern an.

    Sie können dieses Problem leicht beheben, indem Sie den Befehl Fenster>Größe an Formular anpassen aus der Menüzeile wählen. Access stellt die Größe des Fensters dann automatisch so ein, daß das Formular genau hineinpaßt. Mit der Auswahl des Befehls Datei>Speichern oder einem Klick auf das gleichnamige Symbol können Sie die Fenstergröße und -position in der Datenbank speichern. Damit ist sichergestellt, daß das Formular auch beim nächsten Öffnen an der richtigen Stelle erscheint.

     

    Wenn Sie beispielsweise in einem Adressenbericht den folgenden Ausdruck verwenden

    ="Familienname: " & [Name]

    zeigt Access anstelle des Datenfeldes Name den Namen des Berichts an.
    Dies können beispielsweise folgendermaßen aussehen:

    Familienname: Adressen

    Ein Feld mit dem Namen Name können Sie nur dann problemlos einsetzen, wenn es nicht Teil eines Ausdrucks ist. Für das obige Beispiel würde dies bedeuten, dass Sie den Namen und den Text Familienname in zwei getrennten Steuerelementen anzeigen müssen.

    Eine andere Alternative besteht darin, dass Sie dem Bericht eine Abfrage zugrunde legen, in der Sie mit Hilfe von Ausdrücken neue Felder definieren. Hier können Sie den Bezeichner Name problemlos verwenden.

    Wie kann ich Etiketten mehrfach mit dem gleichen Datensatz ausdrucken?

    Auf einer Seite sind 12 Etiketten. Ich habe nur einen Kunden-Datensatz, der aber 100 mal gedruckt werden soll.

    Wie ist dies mit Microsoft Access 97 zu lösen?

    Die einfachste Lösung für Etiketten wäre, ein zusätzliches Feld namens AnzahlEtiketten in der Kunden-Tabelle hinzuzufügen. In diesem Feld steht die Anzahl der Etiketten, die für den Kunden ausgedruckt werden sollen.

    Damit der Bericht auf das Feld AnzahlEtiketten zugreifen kann, fügen Sie es in den Detailbereich des Berichts ein. Sie können das Feld dann unsichtbar machen, so dass es nicht ausgedruckt wird.

    Damit ein Etikett mehrmals gedruckt wird, benötigen Sie eine VBA-Prozedur für das Bericht-Ereignis Detail1_Print:

    Private Sub Detail1_Print(Cancel As Integer, PrintCount As Integer)

        If AnzahlEtiketten = 0 Then
            'gar nichts drucken
            Me.NextRecord = True
            Me.MoveLayout = False
            Me.PrintSection = False
        Else 'Druckvorgang wiederholen,
            'wenn AnzahlEtiketten ' noch nicht erreicht ist
            If PrintCount < AnzahlEtiketten Then
                Me.NextRecord = False
            End If
        End If

    End Sub

    Access erhöht die Druckanzahl (PrintCount) des aktuellen Datensatzes automatisch. Wenn die Druckanzahl also den Wert im Feld AnzahlEtiketten noch nicht erreicht hat, wiederholt Access den Druckvorgang für den aktuellen Datensatz. Andernfalls wird der nächste Datensatz ausgedruckt. Es ist natürlich erforderlich, dass Sie das Format des Berichts für Ihre eigenen Etiketten anpassen. Zum leichteren Einstieg haben wir Ihnen eine kleine Beispieldatenbank zusammengestellt

    Ist es möglich Berichte, mit einem anderen Drucker als dem Standartdrucker auszudrucken?Wenn Sie einen Bericht in der Entwurfsansicht öffnen und dann den Menüpunkt "Datei/Seite einrichten" auswählen, können Sie im Register "Seite" den gewünschten Drucker auswählen.

    Der Entwurfsbereich von Berichten bietet eine sehr große Flexibilität. Besondere Layouts oder Texteffekte lassen sich trotzdem leichter mit einer Textverarbeitung wie Microsoft Word verwirklichen.

    Fügen Sie Word-Texte einfach via OLE in einen Access-Bericht ein.

    Mit dem Menübefehl Einfügen / Objekt öffnen Sie das Dialogfenster zum Einfügen eines OLE-Objekts. Wenn das Objekt bereits als Datei auf Ihrer Festplatte vorliegt, wählen Sie die Option Aus Datei erstellen. Mit Durchsuchen navigieren Sie anschließend zur gewünschten Datei.

    Alternativ können Sie auch ein komplett neues Word-Objekt erstellen.

    Dafür ist die Option Neu erstellen zuständig. Zum Einfügen eines Word-Objekts wählen Sie aus der Liste Objekttyp den Eintrag Microsoft Word-Dokument aus und bestätigen mit OK. Dadurch wird Word gestartet und Sie können mit dem Entwurf des Berichtskopfes beginnen.

    Die Eigenschaft Größenanpassung des OLE-Objektes sollten Sie abschließend auf Abschneiden setzen, damit die Originalgröße des Dokuments erhalten bleibt und keine Verzerrungen auftreten.

     

    Eine Unterabfrage ist quasi eine Abfrage innerhalb einer Abfrage.

    Das folgende Beispiel verwendet die Tabelle Artikel aus der Datenbank Nordwind und gibt alle die Datensätze zurück, deren Preis mit dem Preis des Artikels Chai identisch ist.

    1 Ziehen Sie die Tabelle Artikel in den Abfrageentwurf.

    2 Wählen Sie die Felder Artikelname und Einzelpreis als Ausgabefelder aus.

    3 Jetzt fehlt noch das gewünschte Kriterium für das Feld Einzelpreis.

    Geben Sie als Kriterium folgende SQL-Anweisung ein:

    (SELECT [Einzelpreis] FROM [Artikel] WHERE [Artikelname] ="Chai")

    Sie erkennen leicht, dass diese SQL-Anweisung - abgesehen von den runden Klammern - eine ganz normale Auswahlabfrage darstellt, die ohne weitere auch separat ausgeführt werden kann.

     

    Wir sind ein mittelständisches Softwareberatungsunternehmen und befassen uns schwerpunktmäßig mit Entwicklung und Vertrieb von Software für soziale Einrichtungen. Zurzeit sind wir auf der Suche nach einer neuen Entwicklungsumgebung. Access 97 kam dabei in die engere Wahl. Um zu einer abschließenden Entscheidung zu gelangen, benötigen wir allerdings noch folgende Informationen:

    1. Welche Limits existieren für die JET-Engine bezüglich User und Datensätzen? Ab wann ist der Einsatz von Access nicht mehr sinnvoll möglich?

    2. Welche Erfahrungen gibt es mit Access 97 und Microsoft SQL-Server als Datenbank? Sind damit Anwendungen in größerem Umfang zu realisieren?

    Die Anzahl der gleichzeitig angemeldeten Benutzer ist auf 255 beschränkt. Die Anzahl der Datensätze ist von dem jeweiligen Speicherplatzbedarf abhängig. Eine einzelne Access-Tabelle kann maximal 1 GB an Daten aufnehmen. Access arbeitet leider noch nicht perfekt mit dem SQL-Server zusammen, was sich in einem deutlich höheren Entwicklungsaufwand bemerkbar macht. In der Praxis ist es beispielsweise problematisch, ein Access-Formular direkt an eine SQL-Server-Tabelle zu binden. Bei dieser Vorgehensweise lassen sich die vom SQL-Server gemeldeten Fehler nicht abfangen. Es ist daher in der Praxis erforderlich, mit dem SQL-Server ausschließlich via SQL zu kommunizieren, was natürlich einen Großteil der Vorteile von Access zunichte macht. Aus diesem Grund setzen viele Entwickler in diesem Fall lieber Visual Basic anstatt Access ein.

    Als Fazit lässt sich festhalten, dass Sie - wenn möglich - auf einen SQL-Server verzichten sollten. Voraussetzung dafür sind leistungsstarke PCs, ein schnelles Netzwerk sowie relativ wenige Datenbankzugriffe bzw. Auswertungen. Unter dieser Voraussetzung haben wir vor ca. einem halben Jahr eine File-Server-Lösung (ohne SQL-Server) für 10 Benutzer entwickelt. Die Datenbank hatte einen Umfang von ca. 120 MB mit ca. 600.000 Datensätzen und war von der Performance her mit einem SQL-Server vergleichbar.

    Systemobjekte, die normalerweise nicht im Datenbankfenster angezeigt werden, lassen sich auf ähnliche Weise, wie ausgeblendete Objekte einblenden. Wählen Sie den Menübefehl Extras>Optionen und aktivieren Sie das Register Ansicht. In der Sektion Einblenden müssen nun die Option Systemobjekte markieren und auf OK klicken.

     

    Wenn von VBA-Prozeduren oder anderen Benutzern einer Tabelle neue Datensätze hinzugefügt werden, dann spiegeln sich diese Änderungen nicht sofort in geöffneten Formularen wider. In diesem Fall ist eine Aktualisierung des Formulars erforderlich, was mit Hilfe der Requery-Methode erledigt werden kann.

    Bei diesem Vorgang positioniert Access jedoch immer auf den ersten Datensatz, was in vielen Fällen nicht erwünscht ist.

    Die Prozedur FormularAktualisieren behebt dieses Problem, indem sie trotz Aktualisierung den aktuellen Datensatz beibehält.

    Beim Start muss der Prozedur lediglich ein Verweis auf das zu aktualisierende Formular übergeben werden.

    Sub FormularAktualisieren(FormObj As Form)

        Dim Lesezeichen As Variant
        Lesezeichen = FormObj.Bookmark
        FormObj.Requery
        FormObj.Bookmark = Lesezeichen

    End Sub

    Die Prozedur markiert den aktuellen Datensatz mit Hilfe eines Lesezeichens. Nach der Aktualisierung wird dann wieder auf diesen Datensatz positioniert.
     
    Microsoft Jet ist das Datenbankmodul, das standardmäßig von Microsoft Access verwendet wird. Dieser Artikel beschreibt die empfohlenen Vorgehensweisen, die Sie bei der optimalen Pflege Ihrer Jet-Datenbank unterstützen können. In diesem Artikel werden die Datenbanken in Einzelbenutzer- und Mehrbenutzerumgebungen beschrieben.

    Office Access 2007 enthält eine Reihe von Verbesserungen, die das Erstellen einer Datenbank einfacher als je zuvor machen. Benutzer, die bereits Datenbanken in Access erstellt haben, werden zu schätzen wissen, dass Datenbanken dank dieser neuen und optimierten Features schneller erstellt werden können.

    Es gibt mehrere Möglichkeiten, die Arbeit mit Microsoft Office Access 2007 zu beginnen, je nachdem, ob Sie Access zum ersten Mal verwenden, Daten aus einem anderen Datenbank- oder Tabellenkalkulationsprogramm nach Access verschieben oder eine frühere Access-Version aktualisieren. In diesem Artikel werden auftretende Fragen zu diesen verschiedenen Situationen erläutert.

     

    Bei umfangreichen Modulen geht schnell die Übersicht über den Programmcode verloren. Das Auffinden einer bestimmten Prozedur kann da schon einmal etwas dauern.

    Wenn die gesuchte Prozedur von der aktuellen Prozedur aus aufgerufen wird, markieren Sie einfach den Prozedurnamen und klicken Sie die rechte Maustaste. Wählen Sie anschließend den Kontextmenübefehl Definition aus.

    Access öffnet daraufhin das Modul, in dem die Prozedur definiert ist, und bringt diese zur Anzeige. Alternativ können Sie die Shift-F2 -Taste drücken, um die gesuchte Prozedur anzuzeigen.

     

    Ich möchte ein Datum in Quartalen darstellen. Zum Beispiel: 15-01-2004 = 2004Q1 Gibt es in Access eine Funktion zum aufrunden?

    Die folgende VBA-Funktion ermöglicht Ihnen die Ausgabe des Quartals in dem von Ihnen gewünschten Format:

    Function Quartal(MeinDatum As Date)

        Quartal = CStr(Year(MeinDatum)) + "Q" +
    Format(MeinDatum, "q")

    End Function

    Sie haben in einer Tabelle ein Datenfeld, in dem ein Prozentsatz gespeichert wird, und möchten dieses verbal dokumentieren.

    Bis zu einem Prozentsatz von 15 % soll der Wert Niedrig und ab einem Prozentsatz von 15 % der Wert Hoch dargestellt werden. Mit einem entsprechenden Kriterium in einer Auswahlabfrage ist dies kein Problem.

    Benutzen Sie die Wenn-Funktion, um in einer Auswahlabfrage verschiedenen Wertebereichen unterschiedliche Werte zuzuweisen.

    Erstellen Sie eine Auswahlabfrage und ziehen Sie das Feld Prozentsatz in das Entwurfsraster. Machen Sie dann in der nächsten freien Spalte in der Zeile Feld die folgende Eingabe:

    Beurteilung: Wenn([Prozentsatz]<0,15;"Niedrig";"Hoch")

    Die Wenn-Funktion hat genau die im ersten Absatz beschriebene Wirkung. Der erste Parameter der Funktion legt die Bedingung fest. Der zweite Parameter wird verwendet, wenn die Bedingung erfüllt ist, der dritte Parameter, wenn die Bedingung nicht erfüllt ist.

     

    Voraussetzung dafür ist, dass Sie den Druckertreiber Ihres Kollegen auf Ihrem Rechner installieren. Um den Bericht in eine Datei umzuleiten, wählen Sie den Menübefehl Datei>Drucken und aktivieren das Kontrollkästchen Druckausgabe in Datei umleiten.

    Beim Ausdruck werden Sie dann zur Eingabe eines Dateinamens aufgefordert. Die fertige Datei (in diesem Beispiel Bericht.prt) können Sie dann via Copy-Befehl von der DOS-Eigabeaufforderung an einen bestimmten Druckerport senden:

    copy Bericht.prt lpt1

     

    Diese Dialoge können Sie mit Hilfe von API-Funktionen auch in Ihren Access-Anwendungen einsetzen.

    Den Dialog zum Öffnen einer Datei erreichen Sie beispielsweise mit der Funktion GetOpenFileName, die Sie folgendermaßen deklarieren:

    Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" _(pOpenfilename As OPENFILENAME) As Long

    Der Parameter pOpenfilename ist ein benutzerdefinierter Datentyp, der Information zur Funktionalität und zum Aussehen des Dialogs enthält. Diesen Datentyp sollten Sie zusammen mit ein Paar nützlichen Konstanten in einem Access-Modul definieren:

    Public Const OFN_FILEMUSTEXIST = &H1000
    Public Const OFN_READONLY = &H1
    Public Const OFN_HIDEREADONLY = &H4

    Type OPENFILENAME

    lStructSize As Long ' Länge des Datentyps OPENFILENAME
    hwndOwner As Long ' Fenster, unter dem Dialog erscheint
    hInstance As Long ' nicht setzen
    lpstrFilter As String ' Zeichenkette von Anzeigenfiltern im Dialog
    lpstrCustomFilter As String ' nicht setzen
    nMaxCustFilter As Long ' nicht setzen
    nFilterIndex As Long ' 1 zum Benutzen der FIlter
    lpstrFile As String ' String, der ausgewählte Datei bekommt
    nMaxFile As Long ' Länge von lpstrFile
    lpstrFileTitle As String ' Dateiname ohne Pfad
    nMaxFileTitle As Long ' nicht setzen
    lpstrInitialDir As String ' Standardordner
    lpstrTitle As String ' Titel des eigentlichen Dialogfensters
    Flags As Long ' verschiedene Optionen
    nFileOffset As Integer ' nicht setzen
    nFileExtension As Integer ' nicht setzen
    lpstrDefExt As String ' Standarderweiterung
    lCustData As Long ' nicht setzen
    lpfnHook As Long ' nicht setzen
    lpTemplateName As Long ' nicht setzen

    End Type

    Einige Elemente dieses Typs sind für unsere Zwecke nicht interessant bzw. können unter Access nicht eingesetzt werden.

    Bei der Übergabe von Zeichenketten an Elemente des Typs String ist es sehr wichtig, dass Sie einen NULL-Wert an den String anhängen. Dies erledigen Sie mit Hilfe des Ausdrucks

    Chr$(0): MyString = MyString & Chr$(0)

    Das Element lpstrFilter repräsentiert einen Zeiger auf einen String, den Sie mit einer Beschreibung des Filters und dem eigentlichen Filter aufbauen. Der String darf auch mehrere Filter beinhalten, solange sie durch NULL-Werte getrennt werden. Das Ende des Strings wird von zwei NULL-Werten abgerundet.

    Nehmen Sie beispielsweise an, Sie möchten folgende Filter in Ihrem Dialog zur Verfügung stellen:

    Beschreibungstext Filter
    Datenbanken *.mdb, *.mda
    Word-Dokumente *.doc
    Alle Dateien *.*

    Den Filter-String setzen Sie dann wie folgt zusammen:

    Filter:="Datenbanken" & Chr$(0) & "*.MDB;*.MDA" & Chr$(0) & _
    "Word-Dokumente" & Chr$(0) & "*.DOC" & Chr$(0) & _
    "Alle Dateien" & Chr$(0) & "*.*" & Chr$(0) & Chr$(0))

    Die vollständige Funktion, die einen Dialog zum Öffnen einer Datei anzeigt und die ausgewählte Datei zurückgibt, könnte wie folgt aufgebaut sein:

    Public Function DateiÖffnen(Optional Titel, Optional Filter, Optional DefExtension, Optional AktDir) As String

        Dim strDateiName As String, strDlgTitel As String 
        Dim strFilter As String, strDefExtension As String 
        Dim strAktDir As String, OpenDlg As OPENFILENAME 
        Dim strNull as String 

        strNull = Chr$(0) 
        'der String sollte lang genug für einen Win-95 Pfad sein 
        strDateiName = String$(512, 0)

        If IsMissing(Filter) Then 
            'alle Dateien anzeigen 
            strFilter = "Alle Dateien" & strNull & "*.*" & strNull & strNull 
        Else 
            strFilter = Filter 
        End If

        If IsMissing(DefExtension) Then 
            strDefExtension = strNull ' keine Default-Erweiterung 
        Else 
            strDefExtension = DefExtension & strNull 
        End If

        If IsMissing(AktDir) Then 
            strAktDir = CurDir$ & strNull ' aktuelles Verzeichnis ermitteln 
        Else 
            strAktDir = AktDir & strNull 
        End If

        With OpenDlg 

            .lStructSize = Len(OpenDlg) 
            .hwndOwner = Screen.ActiveForm.Hwnd 
            .lpstrFilter = strFilter 
            .nFilterIndex = 1 
            .lpstrFile = strDateiName 
            .nMaxFile = Len(strDateiName) 
            .lpstrInitialDir = strAktDir 
            .lpstrTitle = strDlgTitel 
            .Flags = OFN_FILEMUSTEXIST Or OFN_READONLY 
            .lpstrDefExt = strDefExtension

            If GetOpenFileName(OpenDlg) <> 0 Then 
                ' restliche NULL-Werte abschneiden 
                DateiÖffnen = Left$(.lpstrFile, InStr(.lpstrFile, strNull) - 1) 
            Else
                DateiÖffnen = "" 
            End If 

        End With

    End Function

    If IsMissing(Titel) Then
    strDlgTitel = "Datei öffnen" & strNull ' Standardtitel verwenden
    Else strDlgTitel = Titel & strNull
    End If

    Ein typischer Aufruf der Funktion könnte ungefähr so aussehen:

    Private Sub btnDateiÖffnen_Click()

        Dim fn As String 

        fn = DateiSpeichern(Titel:="Testdialog - Öffnen", DefExtension:="txt", _
        Filter:="Datenbanken" & strNull & "*.MDB;*.MDA" & strNull & _
        "Word-Dokumente" & strNull & "*.DOC" & strNull & _
        "Alle Dateien" & strNull & "*.*" & strNull & strNull)

    End Sub

     

    Viele Wege führen nach Rom! So ist es auch mit dem Hinzufügen von Feldern aus einer Feldliste in das Entwurfsraster. Bei den nächsten drei Tricks ist für jeden was dabei.

    1. Klicken Sie auf das Feld, das Sie hinzufügen wollen und halten Sie die Maustaste gedrückt. Ziehen Sie das Feld dann in die Spalte des Rasters, in der das Feld angelegt werden soll. Wenn Sie ein Datenfeld auf eine bereits besetzte Spalte ziehen, wird das Feld vor der besetzten Spalte hinzugefügt.

    2. Klicken Sie doppelt auf den Feldnamen, den Sie dem Entwurfsraster hinzufügen wollen. Das Datenfeld wird in der ersten freien Spalte platziert. Mit dieser Methode können Sie nur einzelne Felder hinzufügen.

    3. Auswahl über das Kombinationsfeld. Die letzte Möglichkeit nutzt das Entwurfsraster selbst.
     
    Diese Site bietet ein Artikelarchiv und zahlreiche Access-Tipps. 

    Bei Abfragen, die eine lange Ausführungszeit benötigen, ist das Warten auf das Ergebnis ein unvermeidliches Übel. Besonders, wenn Sie in einem Netzwerk auf Abfragen mit komplexen Kriterien, die auf Tabellen mit vielen Indizes und mehreren zehntausend Datensätzen zugreifen, kann die Wartezeit viele Minuten in Anspruch nehmen.

    Wenn dann zwei Berichte, denen die gleiche Abfrage zugrunde liegt, nacheinander aufgerufen werden, können die Daten der Berichte, zum Beispiel die Gesamtsumme, unterschiedlich sein. Damit die Berichte garantiert auf den selben Datenbestand zugreifen, sollten Sie das Abfrageergebnis in einer neuen Tabelle lokal speichern.

    Erstellen Sie wie gewohnt die Abfrage, die Sie benötigen. Fügen Sie alle Felder hinzu, die die neue Tabelle enthalten soll, möglichst auch das Primäschlüsselfeld. So können Sie die neue Tabelle später besser verwalten.

    Wählen Sie dann den Menübefehl Abfrage/NeueTabelle erstellen aus. Im gleichnamigen Dialog müssen Sie der Tabelle einen Namen geben.

    Über die Option Andere Datenbank läßt sich die Tabelle auch in einer externen Datenbank speichern. Damit die neue Tabelle mit den Daten der Abfrage erzeugt wird, klicken Sie auf das Ausführen-Symbol in der Symbolleiste. Bestätigen Sie die Sicherheitsabfrage mit Ja.

    Sie haben nun direkten Zugriff auf alle Daten, ohne lange Wartezeiten.

     

    Programmierumgebung von Access kennenlernen, objektorientierte Entwicklung mit Klassenmodulen, Fehlerbehandlung von Laufzeitfehlern u.a.

    Von Ralf Albrecht und Natascha Nicol; Addison-Wesley (2000); Euro 49,95; ISBN: 3827315476

     

    Die 14 Entwicklertools auf der CD kann man ohne zeitliche und räumliche Einschränkung verwenden. Die meisten liegen sogar im Quellcode vor; Anpassungen an individuelle Bedürfnisse und die Weitergabe als Bestandteil eigener Anwendungen sind erlaubt.

    Unter den offenen Tools befindet sich etwa der Änderungsprotokollmanager, der Funktionen zum Mitschreiben von Änderungen am Inhalt von Datenbanktabellen liefert und damit hilft, der in manchen Branchen üblichen Dokumentationspflicht nachzukommen.

    Der Fehlerprotokollmanager dient als Waffe gegen eine der unangenehmsten Aufgaben von Programmierern: der Fehlerbehebung nach nicht nachvollziehbaren Fehlerberichten unerfahrener Anwender. Dabei rückt das Tool den standardmäßig nicht besonders aussagekräftigen Fehlermeldungen von Access auf den Pelz. Nach dem Einbau des Fehlerprotokollmanagers spuckt die betroffene Anwendung wesentlich gehaltvollere Angaben über den Fehler und seinen Auslöser aus, die der Anwender wahlweise per E-Mail, Fax oder einfach per Ausdruck an den Hersteller weiterleiten kann.

    In ganz hartnäckigen Fällen kann man dem Fehlerprotokollmanager noch den Ereignisprotokollmanager zur Seite stellen, der Vorgänge mit beliebigem Detaillierungsgrad mitloggt - sei es das Öffnen eines Formulars oder die Eingabe in ein bestimmtes Textfeld.

    Die Einbettung der genannten Tools in eigene Anwendungen durch den Import bestimmter Datenbankobjekte und das Hinzufügen weniger Codezeilen ist ausführlich dokumentiert.

    Sehr nützlich sind auch die Zip-Komponente in Form einer DLL, die alle wichtigen Zip-Funktionen für den Zugriff per VB, VBA und .NET bereitstellt, die TAPI-Schnittstelle zum datenbankgesteuerten Telefonieren oder der Mail-Manager zum Versenden von Mails aus einer Access-Datenbank heraus.

    Der Bereich Software enthält einige hundert freie Beispiele; unter anderem den AP-Adress-Manager, der auch ausgefallene Adressen und Anredefloskeln aus den zugrunde liegenden Informationen zusammensetzt.

    Im Bereich Tipps & Tricks befinden sich über 300 Beiträge verschiedener Autoren, die alle nennenswerten Bereiche von Access wie Tabellen, Abfragen, Formulare, Berichte und VBA abdecken. Die Tipps enthalten in den meisten Fällen Codeschnippsel zum Einbau in eigene Anwendungen, aber auch ausführliche Anleitungen und Beispieldatenbanken.

    Wesentlich mehr ins Detail gehen die Workshops. Auch hier kommen verschiedene Autoren zum Zuge und erläutern Themen wie die Modellierung relationaler Datenbanken, codegesteuerte Strukturänderungen an Datenbanken, die Anwendung des HTML Help Workshop, die Erstellung von Setups mit dem kostenlosen Tool Inno Setup als Alternative zum herkömmlichen Setup-Assistenten von Microsoft oder die Erstellung von Add-Ins.

    Als klassischer Jäger und Sammler wird man aber erst in der Rubrik Datenpool glücklich: Hier findet man diverse und teilweise recht kuriose Datensammlungen. Da wären zum Beispiel die Bankleitzahlen deutschsprachiger Länder, internationale Postleitzahlen, Telefonvorwahlen von Deutschland und weiteren Ländern, Kfz-Kennzeichen von Deutschland und Umgebung, Vornamen und anderen Auflistungen wie von Berufen oder Krankheiten. Selbst wenn man keinen konkreten Bedarf für diese Daten hat, lassen sie sich leicht als Grundlage für die Erstellung von Beispieldaten verwenden.

    Gemessen an den Einzelpreisen der enthaltenen Lösungen rentiert sich die Anschaffung der CD bereits, wenn man nur ein oder zwei der Tools verwenden kann.

    AP-Access-Tools-CD (Vol. 2)
    Access-Entwickler-Tools, Know-how, Workshops und Datenpool für Microsoft Access
    Hersteller: Microsys Kramer
    Systemanforderung: Access 97 oder höher
    Preis: EUR 24,95

    Bei großen Datenmengen lässt die Performance von Abfragen oft zu Wünschen übrig.

    Verwenden Sie den Assistenten zur Leistungsanalyse (Menüpunkt Extras / Analyse / Leistung).

    Indizieren Sie alle Felder, die an Beziehungen beteiligt sind.

    Verwenden Sie bei Verknüpfungen mit mehreren Feldern Mehrfelderindizes.

    Wenn eine Tabelle einen aus mehreren Feldern zusammengesetzten Primärschlüssel enthält, weisen Sie jedem einzelnen Feld einen zusätzlichen Index zu. Bei Primärschlüsseln mit einem einzelnen Feld legen Sie dagegen keinen zusätzlichen Index an.

    Verwenden Sie wenn möglich keine Inklusionsverknüpfungen (outer joins), da diese die Optimierungsmöglichkeiten von Access einschränken.

     

    Seit Access 7.0 ist es sogar möglich, ein Array innerhalb einer Variant-Variablen zu speichern.

    Um mehrere einzelne Ausdrücke einer Variant-Variablen in Form eines Arrays zuzuweisen, verwenden Sie einfach die Array-Funktion.

    Der Array-Funktion können beliebig viele Parameter unterschiedlichen Datentyps übergeben werden. Das Ergebnis ist ein sogenanntes Variant-Array, das einer Variant-Variablen zugewiesen werden kann.

    Das folgende Beispiel definiert ein solches Variant-Array mit insgesamt 5 Elementen:

    Sub VariantTest()

        Dim VarArray As Variant
        Dim Element As Variant

        VarArray = Array(1, "Text", #1/30/01#, 1.6, 1000000)
        
        For Each Element In VarArray
            Debug.Print Element 
        Next Element

    End Sub

    Die einzelnen Elemente werden mittels einer For Each-Schleife im Testfenster ausgegeben. Als Alternativ kann auch eine herkömmliche For-Next-Schleife zum Einsatz kommen:

    Sub VariantTest2()

        Dim VarArray As Variant 
        Dim i As Integer

        VarArray = Array(1, "Text", #1/30/01#, 1.6, 1000000) 
        For i = LBound(VarArray) To UBound(VarArray)
            Debug.Print VarArray(i) 
        Next i

    End Sub

    Der große Vorteil von Variant-Arrays gegenüber normalen Arrays besteht darin, dass Sie Elemente mit unterschiedlichen Datentyypen aufnehmen können. Außerdem ist keine Pflege der Array-Grenzen beim Hinzufügen oder Löschen von Elementen erforderlich.

     

    Viele Funktionen zum Suchen nach bestimmten Datensätzen benötigen Informationen über das Primärschlüsselfeld einer bestimmten Tabelle.

    Die folgende Function-Prozedur erwartet beim Start den Namen einer Tabelle der aktuellen Datenbank. Die Tabelle muss hierbei im ACCESS-Format vorliegen. Das Ergebnis ist der Feldname des Primärschlüssels. Sollte der Primärschlüssel aus mehreren Feldern zusammengesetzt sein, gibt die Prozedur eine Werteliste zurück, bei der die einzelnen Feldnamen durch Semikola getrennt aufgelistet sind.

    Function Primärschlüssel(Tabellenname As String) As String

        Dim DB As DAO.Database 
        Dim TableDefObj As DAO.TableDef 
        Dim IndexOb As DAO.Index 
        Dim FieldObj As Field 
        Dim Result As String

        On Error GoTo Err

        Set DB = CurrentDb()
        Set TableDefObj In TableDefs(Tabellenname)

        For Each IndexObj in TableDefObj.Indexes

            If IndexObj.Primary Then 
                For Each FieldObj In IndexObj.Fields 
                    Result = Result & FieldObj.Name ";" 
                Next FielObj 
                If Len(Result) <> 0 Then 
                    Result = Left(Result, Len(Result) - 1) 
                    Primärschlüssel = Result 
                    Exit Function 
                EndIf 
            EndIf

        Next IndexObj 

        Primärschlüssel = "" 
        Exit Function

    Err: 
        Primärschlüssel = ""
        End Function

    End Function

     

    Bei einer Access-Datenbank soll eine globale Änderung vorgenommen werden.

    Zum Beispiel soll überall, wo in einem Feld oder in einer Spalte der Wert "CD Koffer" steht der Wert "CD Koffer 1" eingesetzt werden.

    Wie kann ich das realisieren? 

    Mit Bearbeiten/Suchen und Bearbeiten/Ersetzen können Sie möglicherweise einen Teil der Änderungen automatisieren. Sie können auch den Datenbank-Dokumentierer verwenden und alle Vorkommen des Datenbankfeldes aufspüren. Am sichersten ist aber die Methode, den gesamten Programmcode und die gesamte Anwendung manuell zu durchsuchen.

    Beim Importieren einer Datei in eine bestehende Datenbank bekomme ich nach der Auswahl der zu importierenden Datei eine Fehlermeldung wie folgt: "Objektdarstellung durch ActiveX-Komponenten nicht möglich".

    Woran kann das liegen?

    Dieses Problem liegt höchstwahrscheinlich daran, dass bei der Installation von Access 97 die DAO350.dll fehlerhaft registriert wurde.

    Öffnen Sie im Startmenü Ausführen und geben Sie

    RegSvr32 C:\Programme\Gemeinsame Dateien\Microsoft Shared\DAO\DAO350.dll

    ein. Damit sollte das Problem gelöst sein. Falls nicht, deinstallieren Sie Office 97 und löschen Sie den Ordner C:\Programme\Gemeinsame Dateien\Microsoft Shared\DAO. Installieren Sie anschließend Office 97 erneut

    Diese Site bietet Ihnen viele hilfreiche Informationen, wie Z.B Einführungsartikel zum Thema Access:

    • Data Sheets
    • Reports
    • Daten analyse
    • Relationships
    • Expressionen
    • Daten Typen

     

    Im Downloadbereich finden Sie Tools, Beispiele und fertige Anwendungen zur freien Verfügung.

    Microsoft Access is a development environment used to create computer databases for the Microsoft Windows family of operating systems. This site provides lessons, examples, and links on how to use and explore MS Access. We also provide some guidance on VBA, the programming language that ships with Microsoft Access. An electronic version of this site with additional VBA materials, as an ebook, is available for purchase. You can sample the trial version or get the full version.

     

    Das endlose Suchen der einzelnen Menüfunktionen in Access 2007 hat endlich ein ENDE! Dieses Tool ermöglicht dem Benutzer von Access 2007 die Menüleite auf die bekannte Menüansicht (Access 2003) umzuschalten.
    Das AddIn unterstütz folgende Sprachen: English, French, German, Italian, Spanish, Portuguese, Japanese, Chinese.

     

    Sie haben Aktionsabfragen definiert, die Sie in regelmäßigen Abständen aufrufen wollen, zum Beispiel eine Löschabfrage, die alle Daten aus der Tabelle entfernt, die älter als einen Monat sind.

    Ziehen Sie die Abfrage auf den Desktop.

    Wenn Sie eine Aktionsabfrage aus dem Datenbankfenster auf den Desktop ziehen und damit eine Verknüpfung erstellen, können Sie diese Abfrage mit einem Doppelklick ausführen.

    Für Routinearbeiten, wie immer wiederkehrendes Löschen von Daten nach bestimmten Zeitabständen ist eine Verknüpfung auf dem Desktop ideal.

     

    Diese Site von Thomas Klahr bietet Software und fertige Beispiele im Access-Format an. Diese finden Sie in der Rubrik Downloads, Codebeispiele und in der knowhow-Datenbank, die etliche Lösungen beinhaltet.

    Außerdem gibt es Access-Lernvideos, ein Access-Forum, Links, Access-FAQ und eine Access-Hotline.

    Ein Besonderer Leckerbissen auf dieser Site ist eine Meta-Suchmaschine für Access-relevanten Homepages.

     

    Wie werden Feldinhalte nach dem ersten (x-ten) Leerzeichen getrennt?

    Sie können die folgende Funktion benutzen:

    Public Function TextAbXtenLeerzeichen(x As Integer, str As String) As String
        If x < 0 Then Exit Function
        If x = 0 Then TextAbXtenLeerzeichen = str: Exit Function
        If Len(Nz(str, "")) = 0 Then Exit Function
        Dim i As Integer
        i = 0
        Dim p As Integer 
        p = InStr(str, " ")
        If p = 0 Then Exit Function
        TextAbXtenLeerzeichen = TextAbXtenLeerzeichen(x - 1, Mid(str, p + 1))

    End Function

    Fügen Sie den Text der Funktion einfach in ein beliebiges Modul ein. Zum Test der Funktion können Sie die folgenden Anweisungen in das Direktfenster eingeben (die jeweils 2. Zeile zeigt das Ergebnis der Funktion):

    ? TextAbXtenLeerzeichen(0,"Hallo Ihr Leute")
    Hallo Ihr Leute
    ? TextAbXtenLeerzeichen(1,"Hallo Ihr Leute")
    Ihr Leute
    ? TextAbXtenLeerzeichen(2,"Hallo Ihr Leute")
    Leute

    Einige VBA-Laufzeitfehler können dazu führen, dass ein bestimmtes Formular nicht mehr aktiviert werden kann. Die Ursache dafür ist, dass Access im Hintergrund eine Operation ausführen wollte, die aufgrund des Fehlers unterbrochen wurde.

    Um dieses Problem zu beheben, müssen Sie entweder die fehlerhafte Zeile im Code-Fenster korrigieren und den Programmablauf fortsetzen, oder den Programmablauf beenden.

    Letztere erledigen Sie mit dem Menübefehl Ausführen / Zurücksetzen, oder mit dem entsprechenden Symbol auf der Symbolleiste. Das Formular sollte jetzt wieder aktiviert werden können.

     

    Folgende Möglichkeiten stehen hierbei zur Auswahl:

    1. Menü - Wählen Sie den Menübefehl Extras>Optionen aus und aktivieren Sie die Registerkarte Bearbeiten/Suchen. Im Dialogbereich Bestätigen schalten Sie die einzelnen Warnmeldungsarten aus.  
    2. Makro - mit der Makroaktion Warnmeldungen können Sie alle Systemmeldungen beim Löschen eines Datensatzes oder beim Ausführen einer Aktionsabfrage an- bzw. ausschalten. 
    3. VBA - die Funktion SetWarnings hat den gleichen Effekt wie die Makroaktion Warnmeldungen:

    DoCmd.SetWarnings True ' Bestätigung anschalten

    DoCmd.SetWarnings False ' Bestätigung ausschalten

     

    Zwei API-Funktionen ermitteln diese Verzeichnisnamen auf dem aktuellen System: GetWindowsDirectory und GetSystemDirectory.

    Diese zwei sehr nützlichen Funktionen werden folgendermaßen deklariert:

    Declare Function GetWindowsDirectory Lib "kernel32" Alias _
        "GetWindowsDirectoryA" (ByVal lpBuffer As String, _
        ByVal nSize As Long) As Long

    Declare Function GetSystemDirectory Lib "kernel32" Alias _
        "GetSystemDirectoryA" (ByVal lpBuffer As String, _
        ByVal nSize As Long) As Long

    Beiden Funktionen übergeben Sie einen vorinitialisierten String sowie dessen Länge. Das folgende Beispiel ermittelt den Windows- und Systemordner und weist die Namen dem entsprechenden Textfeld eines Formulars zu:

    Dim ret As Long
    Dim strBuffer As String, lLength As Long

        strBuffer = String$(255, 0) 
        lLength = Len(strBuffer)
        ret = GetWindowsDirectory(strBuffer, lLength)

        If ret <> 0 Then
            txtWinVerz = Left$(strBuffer, ret)
        End If

        strBuffer = String$(255, 0)
        lLength = Len(strBuffer)
        ret = GetSystemDirectory(strBuffer, lLength)

        If ret <> 0 Then
            txtSysVerz = Left$(strBuffer, ret)
        End If

     

    Wenn Sie professionelle Datenbanken entwickeln und dem Anwender die Möglichkeit zur Definition eigener Filter ermöglichen wollen, sind die von Access angebotenen Filtermöglichkeiten oftmals von der Bedienung her zu kompliziert.

    Unser Tipp: Erstellen Sie einfach ein eigenes Filterformular!

    Besonders einfach wird dies durch die BuildCriteria-Funktion. Legen Sie einfach ein neues leeres Formular an, das Sie mittels der Datenherkunft-Eigenschaft an die gewünschte Datenquelle knüpfen. Auf diesem Formular plazieren Sie nun für jedes Datenfeld ein ungebundenes Textfeld. Ungebunden bedeutet, dass das jeweilige Textfeld nicht an ein Datenfeld gebunden sein darf.

    Die Namen der einzelnen Textfelder müssen mit den Namen der jeweiligen Datenfelder übereinstimmen. Ausserdem tragen Sie in die Marke-Eigenschaft (engl. Tag) der Textfelder den Text Filter ein. So können die Felder später von den Bezeichnungsfeldern oder anderen Steuerelementen unterschieden werden.

    Die Umwandlung der Benutzereingabe in ein SQL-Kriterium erledigt die folgende Funktion:

    Function SQLTextErstellen(FormObj As Form)

    Dim R As Recordset
    Dim C As Control
    Dim SQL As String

       Set R = FormObj.RecordsetClone

       For Each C in FormObj.Controls

          If C.Tag = "Filter" Then
             If IsNUll(C.Value) = False Then
                   SQL = SQL & "("_
                               & BuildCriteria(C.Name, R(C.Name).Type, C.Value)_
                               & ") AND"

              End If
          End If

       Next C

       'Rechtes AND abschneiden
       If Len(SQL) <> 0 Then
         SQL = Left(SQL, Len(SQL) - 5)
       End If

       SQLTextErstellen = SQL

    End Function

    Die Prozedur durchläuft alle Steuerelemente des angegebenen Formulars und überprüft die Tag-Eigenschaft auf den Inhalt Filter. Bei diesen Feldern wird mit Hilfe der BuildCriteria-Funktion eine SQL-Bedingung zusammengestellt und als Ergebnis der Funktion zurückgegeben.

    Angenommen Ihr Filterformular enthält die Textfelder Vorname, Nachname und Postleitzahl. In das Formular haben Sie die folgenden Kriterien eingegeben:

    Feld Kriterium
    Vorname Wie "A*"
    Nachname (keine Eingabe)
    Postleitzahl Zwischen 10000 Und 40000

    Die SQLTextErstellen-Funktion ermittelt für diese Eingaben den folgenden SQL-Text:

    (Vorname Like "A*") AND (Postleitzahl Betweeen 10000 And 40000)

    Diesen Ausdruck können Sie anschließend direkt der Filter-Eigenschaft des Formulars zuweisen, um die Datensätze entsprechend zu filtern.

     

    Sie können ein verstecktes Datenbankfenster über den Menübefehl Fenster>Einblenden wieder sichtbar machen. Diese Methode ist aber im Entwicklungsprozeß zu umständlich. Gleiches gilt, wenn Sie viele Fenster geöffnet haben, und das Datenbankfenster dahinter versteckt ist. Um es in den Vordergund zu bringen, müssen Sie wieder über das Menü Fenster gehen.

    In Access sind einige Spezialtasten integriert, die die Arbeit erleichtern. Eine davon ist die Taste F11. Wenn Sie diese Taste betätigen wird das Datenbankfenster in den Vordergrund geholt, oder, wenn es versteckt war, wieder sichtbar gemacht.

     

    Über das Datenbankfenster von Access können Sie immer nur einen einzelnen Bericht ausdrucken.

    Wenn Sie bestimmte Berichte regelmäßig zusammen ausdrucken möchten, ordnen Sie diese als Unterberichte in einem Hauptbericht an.

    Dazu legen Sie zunächst einen leeren Bericht ohne Kopf- und Fußbereiche an. Ziehen Sie dann sämtliche Berichte, die Sie ausdrucken möchten, nacheinander aus dem Datenbankfenster untereinander auf den Detailbereich des Hauptberichts.

    Achten Sie darauf, dass sich die einzelnen Unterberichte nicht überlappen. Durch den Einsatz des Seitenumbruch-Steuerelements sorgen Sie dafür, dass jeder Bericht auf eine neue Seite ausgedruckt wird

     

    Ist es in einem Endlosformular möglich, das als Tabelle aufgebaut ist, eine Spalte am Bildschirm zu fixieren?

    Das Formular befindet sich nicht in der Datenblattansicht.

    In Ihrem Formular können Sie ein Unterformular (ein endloses Formular) erstellen, das nur das erste Feld anzeigt.

    Sie erstellen dann ein zweites Unterformular (auch ein endloses Formular), das die restlichen Felder anzeigt. Wenn Sie im zweiten Unterformular zwischen den Spalten blättern, bleibt die erste Spalte im ersten Unterformular fixiert.

    Beim Ausdruck von Geldbeträgen auf Schecks und anderen Zahlungsformularen ist es üblich, den Betrag mit führenden Sternchen auszudrucken. Das vermeidet die unzulässige nachträgliche Änderung der ausgedruckten Geldbeträge.

    Tragen Sie dazu folgenden Ausdruck in die Eigenschaft Format ein:

    0,00" DM";**-#.##0,00" DM"[Rot]

    Dieses Format enthält jeweils ein eigenes Format für positive und für negative Werte.

    Wichtig ist jedoch die Verwendung des Sternchens. Access zeigt das auf ein Sternchen folgende Zeichen jeweils als Ersatz für ein Leerzeichen an. Wenn Sie Ihre Scheckbeträge also durch X-se absichern wollen, dann ersetzen Sie ** jeweils durch *X.

    Geldbeträge mit führenden Sternchen gedruckt.

     

     

    Um sicherzustellen, dass Ihre Daten nicht völlig veraltet sind, rufen Sie den Befehl Datensätze/Anzeige aktualisieren auf.

    Wenn Sie automatisch mit aktuellen Daten versorgt werden wollen, können Sie Access veranlassen, die Daten auf Ihrem Bildschirm in gewissen Zeitabständen selbständig zu aktualisieren.

    Rufen Sie dazu den Befehl Extras/Optionen auf und wählen die Registerkarte Weitere aus. Geben Sie dann im Feld Intervall für Anzeigeaktualisierung den Zeitabstand für die automatische Aktualisierung der Anzeige in Sekunden ein. Der Maximalwert ist 3600 Sekunden (60 Minuten), der Minimalwert beträgt 1 Sekunde.

    Ein kurzes Aktualisierungsintervall erhöht die Aktualität der Daten, während ein langes Intervall die Programmausführung beschleunigt.

    In Access Basic (Access 2.0) erreichen Sie diese Einstellung mit den Methoden GetOption und SetOption:

    Application.SetOption "Anzeigeaktualisierungsintervall (s)", 90

    Nach der Anzeigeaktualisierung zeigt Access geänderte Datenblätter an und markiert gelöschte Datensätze mit dem Text #Gelöscht. Abfragen werden jedoch nicht erneut ausgeführt. Auch die Sortierung der Datensätze und berechneten Felder werden nicht aktualisiert.

    Um sicherzustellen, dass Access wirklich alle Daten aktualisiert, rufen Sie den Befehl Datensätze > Filter / Sortierung entfernen auf.

     

    Zur Berechnung der Kalenderwoche habe ich folgendes ausprobiert:

    KW: Format$([Datum];"ww")

    Dieser Ausdruck gilt für eines der Ausgabefelder in meiner Abfrage. Es wird allerdings beispielsweise für das Datum 15.02.99 Kalenderwoche 8 statt 7 ausgegeben.

    Woran kann das liegen? Muss man einen zusätzlichen Parameter angeben?

    Anstatt der Format-Funktion würde ich die DatePart-Funktion einsetzen, um die Kalenderwoche zurückzugeben:

    DatePart("ww",Datum,,vbFirstFullWeek)

    Der Parameter vbFirstFullWeek ist wichtig, da sonst die KW um 1 verstellt wird. In Ihrer Abfrage würde das Feld also folgendermaßen aussehen:

    KW: DatePart("ww",[Datum];1;3)

    Hier werden die Parameter durch einen Semikola voneinander getrennt und die Konstante vbFirstFullWeek wird durch ihren Wert 3 ersetzt. Der dritte Parameter stellt den ersten Tag der Woche ein und enthält in diesem Beispiel den Standardwert 1 (Wert der Konstanten vbSunday).

    Ich habe Benutzer- und Gruppenkonten in einer neuen Arbeitsgruppendatei eingerichtet.

    Beim Start von Access wird die Eingabe eines Kennwortes verlangt. Nun habe ich mit Visual Basic ein Tool geschrieben, welches auf die Access-Datenbank zugreift, um dort die Daten zu bearbeiten. Ich erhalte die Fehlermeldung "Keine Berechtigung" beim Start meines Tools.

    Wie kann ich das Dialogfenster zur Abfrage des Kennwortes in meinem VB-Programm realisieren?

    Mit der DAO-Bibliothek können Sie auch von Visual Basic aus einen Arbeitsbereich (Workspace) erstellen. Vorher müssen Sie aber dem DBEngine-Objekt Ihre Arbeitsgruppendatei zuweisen:

    DBEngine.SystemDB = "C:\Projekt\Kunden.mdw"

    Die Arbeitsgruppendatei "Kunden.mdw" enthält die Benutzer- und Gruppenkonten, die Sie angelegt haben. Der nächste Schritt wäre, einen Arbeitsbereich im Rahmen des DBEngine-Objekts zu erstellen:

    Dim wrk As Workspace
    Set wrk = DBEngine.CreateWorkspace("MeinArbeitsbereich", "Tom", "Quixote")

    Hier wird ein Arbeitsbereich mit dem Namen "MeinArbeitsbereich" erstellt. Gleichzeitig wird der User "Tom" mit dem Kennwort "Quixote" angemeldet.

    Der Zugang ist nun erlaubt und Sie können Ihre Datenbank öffnen:

    Dim db As Database
    Set db = wrk.OpenDatabase("C:\Projekte\Kunden.mdb")

    Über die Variable db haben Sie Zugriff auf sämtliche Daten, ähnlich wie das Objekt CurrentDb() in Access.

    Sobald Sie die Datenbearbeitung abgeschlossen haben, können Sie die Objektvariablen wie folgt schließen und freigeben:

    db.close
    wrk.close
    Set db = Nothing
    Set wrk = Nothing

    MAXCRM ist eine professionelle Customer Relationship Management (CRM) Software, die sich speziell um die Beziehungen zu Kunden und Interessenten kümmert. MAXCRM macht Geschäftskontakte und damit verbundene Aktivitäten nachvollziehbar, Projekte und Kunden besser bewertbar. Verbessern Sie Ihr Teamwork, stärken Sie Ihren Vertrieb und automatisieren Sie die Büroarbeit! Effiziente Terminplanung und -koordination, aussagekräftige und flexible Reports, gesicherte Datenqualität, Office Integration, Einbindung mobiler Mitarbeiter und externer Büros, hohe Anpassungsfähigkeit und Skalierbarkeit, uvm. CRM Software für Ihr Business! Erfolgreiche CRM Einführung... ... beginnt mit der Definition "Was ist CRM" - in Ihrem Unternehmen. Gemeinsam mit unseren Partnern bieten wir eine individuelle Beratung und Betreuung. Kontaktieren Sie uns. In unserer CRM Definition steht der Anwender im Vordergrund - entsprechend großer Wert wird auf ein einfaches und intuitives Handling gelegt. Denn der Erfolg eines CRM Projektes wird von der Akzeptanz der Mitarbeiter bestimmt. 

    Der Median ist der mittlerste Wert einer Reihe von Zahlen. Er gehört zu den Maßzahlen der zentralen Verteilung, auch "Lagemaß" genannt. Sortiert man eine Reihe von Messwerten der Größe nach, so ist der Wert, der in der Mitte dieser Reihe liegt, der Median. Hat man eine gerade Anzahl von Werten, ergibt sich der Median als arithmetisches Mittel der beiden mittleren Werte. Die eine Hälfte der Werte ist größer, die andere Hälfte kleiner als der Median. Der Median ist also das 50%-Perzentil.

    Im Gegensatz zum arithmetischen Mittelwert, auch "Durchschnitt" genannt, verändert sich der Median durch einzelne Extremwerte kaum. So ist der Median der Zahlenreihen 1,2,3,4,5 und 1,2,3,4,100 jeweils 3; 3 ist in der Mitte, mit je zwei Nachbarn. Der Mittelwert ist im ersten Fall ebenfalls 3, bei der zweiten Reihe verschiebt der "Ausreißer" 100 den Mittelwert auf 22.

    In dem folgenden Microsoft-Artikel wird Ihnen gezeigt, wie Sie aus Daten den statistischen Median berechnen.

     

    Der Funktion ShowWindow übergeben Sie zwei Parameter: einmal das Handle des Hauptfenster von Access und eine Konstante, die bestimmt, wie das Fenster angezeigt werden soll. Die nötigen Konstanten sowie ShowWindow können Sie in einem Modul folgendermaßen deklarieren:

    Public Const SW_MAXIMIZE = 3  ' Fenster maximieren
    Public Const SW_MINIMIZE = 6   ' Fenster minimieren
    Public Const SW_NORMAL = 1     ' Fenster wiederherstellen

    Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long

    Es bleibt nur noch die Aufgabe, das Handle des Hauptfensters zu ermitteln. Glücklicherweise stellt Access zu diesem Zweck die Eigenschaft hWndAccessApp des Objekts Application zur Verfügung. Diesen können Sie direkt an ShowWindow weitergeben:

    ' Fenster maximieren
    If ShowWindow(Application.hWndAccessApp, SW_MAXIMIZE) Then
            Debug.Print "Fehler in ShowWindow(Maximize)"
    End If

    ' Fenster minimieren
    If ShowWindow(Application.hWndAccessApp, SW_MINIMIZE) Then
            Debug.Print "Fehler in ShowWindow(Minimize)"
    End If

    ' Fenster wiederherstellen
    If ShowWindow(Application.hWndAccessApp, SW_NORMAL) Then
            Debug.Print "Fehler in ShowWindow(Normal)"
    End If

    Klicken Sie einfach auf den Titelbalken, um den jeweiligen Bereich zu markieren. Die Balken sind mit den Bereichsnamen beschriftet, also mit Formularkopf, Seitenkopf, Detailbereich, Seitenfuß und Formularfuß.

    Um das Formularobjekt selber zu markieren, klicken Sie einmal auf das Kästchen oben links (dort wo die beiden Lineale sich treffen) oder wählen den Menübefehl Bearbeiten>Formular auswählen.

     

    Global

    Zweck Taste(n)
    Datenbankfenster anzeigen F11 oder Alt+F11
    Datenbank öffnen Strg+O
    Datenbank anlegen (neu) Strg+N
    Speichern Strg+S
    Suchen und Ersetzen Strg+F
    Rückgäng Änderungen am aktuellen Datensatz Esc Esc
    Rückgäng Änderungen im aktuellen Feld Esc
    Rückgäng letzte Aktion Strg+Z

    Datenbankfenster

    Zweck Tast(e)
    Datenbankfenster aktualisieren F5
    Umbenennen (markiertes Objekt) F2
    Bewegen: eine Zeile nach unten Nach-unten
    Bewegen: eine Zeile nach oben Nach-oben
    Bewegen: ein Fenster nach unten Bild-ab
    Bewegen: ein Fenster nach oben Bild-auf
    Bewegen: zum ersten Objekt Pos1
    Bewegen: zum letzten Objekt Ende
    Löschen (markiertes Objekt) Entf

    Menüs

    Zweck Taste(n)
    Menüleiste aktivieren F10
    Kontextmenü aktivieren Umschalt+F10
    Ersten Menübefehl auswählen Pos1
    Letzten Menübefehl auswählen Ende
    Menü und Untermenü gleichzeitig schließen Alt
    Menü schließen Esc
     
     
    Löschen Sie Datenfelder in der Datenblattansicht. Markiern Sie die Spalte, die Sie löschen möchten. Wählen Sie dann den Menübefehl Bearbeiten>Spalte löschen. Aus Sicherheitsgründen wird noch ein Meldungsfenster eingelendet, in dem Sie das Löschen der Daten bestätigen müssen, sofern die Spalte Daten enthält. Wenn Sie eine Spalte löschen, in der Daten enthalten sind, werden diese Daten unwiederruflich gelöscht. Sie sollten sich Ihrer Sache also hundertprozentig sicher sein, bevor Sie eine Spalte mit Daten löschen.

    Das Zusammenspiel zwischen String-Parametern in VBA und C ist mit etwas Schwierigkeit verbunden, insbesondere wenn Sie Stringwerte aus dem Windows-API erwarten. Ehe eine API-Funktion eine Zeichenkette von Access modifizieren kann, müssen zwei Bedingungen erfüllt sein:

    Der String muß als ByVal-Parameter deklariert werden. Erst wenn Sie den gesamten String-Inhalt, an den ein NULL-Zeichen angehängt ist, an die ­Funktion übergeben, kann der String bearbeitet werden.

    Der String muss lang genug sein, um das Funktionsergebnis unterbringen. Die API-Funktion wird den in Access deklarierten String nicht verlängern!

    Das folgende Beispiel ermittelt das Windows Temp-Verzeichnis. Vorher wird der Variable strTempVerz mit 512 NULL-Zeichen initialisiert – normalerweise genügend für einen Pfadnamen. Der String wird außerdem als ByVal-Parameter (lpBuffer in der Deklaration) an die API-Funktion GetTempPath übergeben:

    ' API-Funktion deklarieren

    Declare Function GetTempPath Lib "kernel32" Alias _
            "GetTempPathA" (ByVal nBufferLength As Long, _
            ByVal lpBuffer As String) As Long

    Private Sub btnTempDir_Click()

    Dim ret As Long, length As Long, strTempVerz As String

        strTempVerz = String$(512, 0)   ‘ String mit 512 NULLs initialisieren
        length = Len(strTempVerz)
        ret = GetTempPath(length, strTempVerz)

        If ret <> 0 Then ‘ Länge des zurückgegebenen Pfadnamen

            ‘ Ergebnis im Textfeld anzeigen (ohne zusätzliche NULLs)
            txtTempVerz = Left$(strTempVerz, ret)

        Else

            Debug.Print "Feher in btnTempDir_Click"

        End If

    End Sub

    ActiveX-Controls für Listen, Tabs, Trees etc. ActiveX, DLL, VCL Controls für Windows, Visual Basic, Visual C++, Delphi, C++Builder und mehr.  

    Verwenden Sie das Bild-Steuerelement, um Grafiken in Formular einzufügen.

    Mit Access 95/97 hat auch ein neuer Steuerelementtyp - nämlich das Bild-Steuerelement - Einzug in die Toolbox gehalten.Dieser Steuerelementtyp kann in vielen Fällen ein OLE-Steuerelement ersetzen, das bei älteren Access-Versionen die einzige Möglichkeit zum Einfügen von Grafiken darstellte. Wenn es lediglich auf das optische Erscheinungsbild eines Formulars ankommt, sind die vielen Möglichkeiten zur Aktivierung von OLE-Objekten nämlich überflüssig.

    Der Vorteil von Bild-Steuerelementen besteht darin, dass sie wesentlich speicherplatzsparender sind, und außerdem schneller als OLE-Objekte auf den Bildschirm gebracht werden können. Besonders macht sich dies bei Endlosformularen bemerkbar, bei denen der Detailbereich ein Bild-Steuerelement enthält.

    Der Aufbau des Formulars ist teilweise mehr als doppelt so schnell, als beim Einsatz von OLE-Steuerelementen.

     

     

    Das Seitenformat spielt eine wichtige Rolle bei der Übersichtlichkeit eines Berichts.

    Stellen Sie das Seitenformat für jeden Bericht individuell ein.

    Diese Einstellung nehmen Sie im Register Seite des Dialogfensters Datei / Seite einrichten vor. Siehe Abbildung 1.

    Hier können Sie zwischen den Ausrichtungen Hochformat und Querformat ählen.

    Damit sich die Einstellungen auf einen bestimmten Bericht beziehen, müssen Sie diesen vorher in der Entwurfsansicht öffnen. Nachdem Sie alle Einstellungen vorgenommen haben, speichern Sie den Bericht.

     

     
    Einige Anwendungen erfordern die temporäre Verwaltung von Daten – d. h., die Daten werden im Programmverlauf ermittelt, für einen bestimmten Zweck verwendet und anschließend wieder gelöscht. Selbstverständlich könnte ich für solche Fälle Tabellen anlegen, die Daten während der Bearbeitung darin speichern und die Tabellen anschließend wieder löschen. Das ist aber erstens aufwendig und zweitens wächst die Größe der Datenbank schnell ins Unermessliche, wenn ich sie nicht regelmäßig komprimiere. Ich habe über die Möglichkeit der ungebundenen Datensatzgruppen gelesen. Leider komme ich mit dieser Info nicht weiter. Könnten Sie mir weiterhelfen? Vielen herzlichen Dank. W. Mena-Bruhn Sehr geehrter Herr Mena-Bruhn, die ungebundenen Datensatzgruppen lassen sich gut einsetzen, wenn die Lebensdauer der Daten nur sehr kurz sind. Sobald Sie das Programm verlassen, sind sie weg. Temporäre Access-Tabellen dagegen bleiben erhalten, bis Sie sie explizit löschen. Ich würde mir an Ihrer Stelle keine Sorgen um die Größe der Datenbank machen, denn (wie Sie schon sagten) man kann sie regelmäßig komprimieren. Mit freundlichen Grüßen, Tom Jordan _____________________________________ TriniDat Software-Entwicklung GmbH Individual-Software zum günstigen Festpreis. jordan@trinidat.de www.trinidat.de Telefon: 02 11/1 71 93 56 Telefax: 02 11/1 71 93 58

    Das Buch Access 2003 Basis legt Grundlagen für den Umgang mit MS Access 2003. Diese können bei Bedarf mit dem Buch Access 2003 Professional vertieft werden.

    Die Beispiele und Aufgaben sind sowohl in einem von einem EDV-Trainer geleiteten Kurs als auch für das Selbststudium geeignet. Sie erfahren, wie Sie mit den in Access enthaltenen Funktionalitäten eine Datenbank aufbauen. Dazu werden Ihnen auch allgemeine Aspekte vorgestellt, die beim Aufbau eines Datenbankmanagementsystems zu beachten sind.

    Das Buch enthält eine CD mit allen Lösungs- und Übungsdateien

    Von Lutz Hunger; Spc Lehrbuch, Berlin (Mai 2004); Euro 12,95; ISBN: 393553938X

     

    Ich erstelle gerade in Access 2000 eine Medien-Datenbank. Dabei handelt es sich um eine Datenbank, mit der ich alle meine CD's, sowie die darauf enthaltenen Lieder erfassen möchte.

    Zu diesem Zweck habe ich 3 Tabellen angelegt. In der Tabelle "CD's" wird der Titel der jeweiligen CD gespeichert. In der Tabelle "Songs" werden alle Lieder erfasst. Die beiden Tabellen habe ich über eine m:n Beziehung miteinander verknüpft (Verknüpfungstabelle "Songdetails"), da ein Lied ja auf mehreren CD's vorkommen kann (Studio-Album, Live-CD etc.), umkehrt aber auch eine CD mehrere Lieder enthält. Orientiert habe ich mich bei der Erstellung der Beziehung an der Beispieldatenbank Nordwind, wo die Tabellen "Bestellungen" und "Artikel" über die Verknüpfungstabelle "Bestelldetails" verbunden sind (m:n Beziehung). Es hat auch alles einwandfrei funktioniert.

    Es gibt da jedoch ein Problem, wenn ich ein und dasselbe Lied mehrmals auf einer CD habe (Live-Aufnahmen von verschiedenen Konzerten). Als ich das Lied zum zweiten Mal für die gleiche CD erfassen wollte, wurde mir folgende Fehlermeldung angezeigt: "Die von Ihnen vorgenommenen Änderungen an der Tabelle konnten nicht vorgenommen werden, da der Index, Primärschlüssel oder die Beziehung mehrfach vorkommende Elemente enthalten würde. Ändern Sie die Daten in den Feldern, die gleiche Daten enthalten, entfernen Sie den Index, oder definieren Sie den Index neu, damit doppelte Einträge möglich sind, und versuchen Sie es erneut". Dieselbe Fehlermeldung erscheint auch bei der Beispieldatenbank Nordwind, wenn man in dem Formular "Bestellungen" unter Artikel mehrmals den gleichen Artikel auswählt. Ich hoffe Sie können mir bei der Lösung dieses Problems behilflich sein.

    Für dieses Problem gibt es zwei Lösungen:

    1. Sie fügen der Tabelle "Songdetails" einen neuen Primärschlüssel hinzu (z.B. "SongdetailNr"). Der aus den beiden Feldern "SongNr" und "CDNr" bestehende, zusammengesetzte Primärschlüsse wird dadurch ersetzt. Hierdurch wird auch die Regel außer Kraft gesetzt, dass ein Song auf einer CD nur ein einmal vorhanden sein darf.

    2. Sie fügen der Tabelle "Songdetails" noch das Feld "TrackNummer" hinzu. Dieses Feld fügen Sie dem zusammengesetzten Primärschlüssel hinzu. Wenn Sie nun z.B. einen Song zweimal auf einer CD haben, unterscheiden sich die beiden Datensätze trotzdem noch, da z.B. die erste Version das. 5. Lied und die zweite Version das 8. Lied ist. Der Nachteil dieser Lösung: Sie müssen auch die bereits vorhandenen Daten überarbeiten und hier eine TrackNummer eingeben.

    Nummer 1) wäre die schnelle und Nummer 2) die bessere Lösung, da Sie damit auch die Position eines Liedes auf der CD festhalten können).

    Microsoft Access macht es dem Anwender per Menüsteuerung einfach, angesammelte Datenleichen in Jet-Datenbanken durch Komprimierung zu beseitigen.

    Natürlich können Sie für Ihre Jet-Datenbank eine solche Komprimierung auchmit Microsoft .NET.

    Wählen Sie in Visual Studio .NET über das Menü "Projekt" | "Verweis hinzufügen" aus der Liste der COM-Verweise den Eintrag "Microsoft Jet and Replication Objects #.# Library" aus.

    Damit bleibt die Komprimierung einer MDB auch für Ihren Visual Basic .NET-Code kein Hexenwerk mehr: Das nun verlegbare JetEngine-Objekt der Bibliothek bietet Ihnen die Methode CompactDatabase an, deren Parameter der Pfad zur bestehenden Datenbankdatei und der Pfad zu der zu erzeugenden, komprimierten Datenbank sind.

    Der Beispielcode auf dieser MSDN-Site zeigt Ihnen auf einfache Weise, wie Sie diese Technologie einsetzen können.

     

    Geben Sie sinnvolle Werte für die Datei-Eigenschaften einer Datenbank an, um den Überblick nicht zu verlieren. Wählen Sie den Menüpunkt Datei > Datenbankeigenschaften und aktivieren Sie das Register Datei-Info. In diesem Register können Sie die verschiedensten Informationen zu der Datenbank hinterlegen, die Ihnen die Zuordnung erleichtern.

    Neben dem Titel, Thema und dem Autor lässt sich die Kategorie festlegen und ein Kommentar eingeben (z.B. "Testversion 2a"). Wenn Sie bei Ihren Datenbanken diese Eintragungen konsequent vornehmen, werden Sie auch nach längerer Zeit noch wissen, worum es sich bei einer bestimmten Datenbank handelt.

    Außerdem können Sie die Eigenschaften im Öffnen-Dialog zur Suche nach Datenbanken nutzen.

     

    Mit Unterformularen präsentieren Sie auch komplizierte Datenstrukturen auf einfache und elegante Weise.

    Ein Unterformular wird normalerweise an ein bestimmtes Datenfeld des Hauptformulars gebunden.

    Anstelle des Datenfeldes kann bei Bedarf auch ein Kombinationsfeld eingesetzt werden.

    Zu diesem Zweck sind zwei Eigenschaften des Unterformular-Steuerelements von Bedeutung: Verknüpfen von und Verknüpfen nach.

    Um ein Unterformular an ein Kombinationsfeld zu binden, muss der Name des Kombinationsfeldes in die Verknüpfen von-Eigenschaft eingetragen werden (z.B. Kategorie-Nr). Die Eigenschaft Verknüpfen nach verweist dagegen auf ein Feld in der Datenherkunft des Unterformulars, wobei dieses Feld nicht unbedingt durch ein Steuerelement repräsentiert werden muss.

    Nach der Auswahl eines Eintrages aus dem Kombinationsfeld nimmt Access automatisch eine Aktualisierung des Unterformulars vor.

     

    Access verfügt über ein ebenso leistungsfähiges wie kompliziertes Sicherheitssystem, mit dem Sie Ihre Datenbank gegen unbefugten Zugriff schützen können. Manchmal kann aber auf den umfangreichen Schutz verzichtet werden. In diesem Fall soll nur ein kleiner Dialog zur Eingabe eines Kennwortes auffordern, um den Anwender vom unbedachten Ausführen bestimmter Aktionen abzuhalten.

    Ihr individueller Schutzmechanismus wirkt professioneller, wenn Sie die Kennworteingabe durch Sternchen verdecken. Mit Access erreichen Sie dies durch die Eingabe des des Ausdrucks "Kennwort" in die Eigenschaft Eingabeformat eines Steuerelementes.

    Wenn der Anwender einen Wert in das Steuerelement eingibt, zeigt Access für jedes Zeichen ein Sternchen an. Im Steuerelement selbst wird aber der tatsächlich eingegebene Wert gespeichert.

     
    Wie kann ich z.B. in der Tabelle Bestellungen (Norwind_db) die Daten im yyyy.mm.dd Format > speichern und nicht dd.mm.yyyy?

    Access speichert Datum-/Zeitwerte stets als Double-Felder. Sie können die Werte mit der Format-Eigenschaft oder der Format-Funktion anders anzeigen.

    Im Direktfenster von Access können Sie z.B. folgendes eingeben:

    ? format(date,"yyyy.dd.mm")

    Das Ergebnis lautet dann wie folgt: 2001.16.05

    Besonders gut ausgestattete Access-Anwendungen zeigen beim Start meistens ein Startformular an, in dem wichtige Informationen oder Tipps zur Benutzung angezeigt werden. Diese Formulare verfügen auch meistens über eine Option, mit der das Fenster bei zukünftigen Starts der Datenbank unterbunden werden kann.

    Um Ihrem Formular diese Option hinzuzufügen, benötigen Sie lediglich ein Kontrollkästchen und eine benutzerdefinierte Formulareigenschaft namens StartupNichtAnzeigen.

    Beim Laden des Formulars wird kontrolliert, ob die Eigenschaft StartupNichtAnzeigen existiert. Wenn dies nicht der Fall ist, wird das Formular wie gewohnt geöffnet. Andernfalls wird die Eigenschaft auf den Inhalt Ja oder Nein überprüft und der Vorgang dementsprechend abgebrochen bzw. fortgesetzt.

    Benutzerdefinierte Eigenschaften lassen sich einem Formular leider nicht direkt hinzufügen. Als Alternative kommt das Objekt UserDefined zum Einsatz. Der Vorteil dieses Objekts besteht darin, dass alle Eigenschaften des Objekts auch im Register Anpassen des Dialogfensters Datei / Datenbankeigenschaften aufgeführt werden.

    Die folgende Beim Laden-Ereignisprozedur kontrolliert sowohl das Vorhandensein als auch den Inhalt der Eigenschaft und bricht den Ladevorgang des Formulars bei Bedarf ab:

    Private Sub Form_Load()

        On Error GoTo Err_Form_Load

        ' Fehlercode für den Fall, dass
        ' Eigenschaft nicht existiert
        Const KeineEigenschaft = 3270

        Dim dbThis As Database
        Dim docThis As Document
        Dim prpThis As Property
        Set dbThis = CurrentDb()
        Set docThis = dbThis.Containers("Databases") !Userdefined
        If docThis.Properties!StartupNichtAnzeigen Then
            DoCmd.Close
        End If

    Exit_Form_Load
        Exit Sub
    Err_Form_Load
        If Err = KeineEigenschaft Then
            Set prpThis = docThis.CreateProperty _ ("StartupNichtAnzeigen", dbBoolean, False)
            docThis.Properties.Append prpThis
            Resume
        Else
            MsgBox Err.Description, vbCritical Resume
            Exit_Form_Load
        End If

    End Sub

    Nachdem die Eigenschaft erzeugt und das Formular geladen wurde, kann die Eigenschaft über das Kontrollkästchen chkNichtAnzeigen auf Wahr bzw. Falsch gesetzt werden. Die Ereignisprozedur Beim Klicken des Kontrollkästchens hat den folgenden Aufbau:

    Private Sub chkNichtAnzeigen_Click()

        Dim dbThis As Database
        Dim docThis As Document
        Set dbThis = CurrentDb()
        Set docThis = dbThis.Containers("Databases") !Userdefined docThis.Properties!StartupNichtAnzeigen = Me![chkNichtAnzeigen]

    End Sub

     

     

    Die Tabellennamen im Entwurfsraster erleichtern die Zuordnung von Feldern.

    Beachten Sie die Zeile Tabelle. Sie verrät Ihnen, mit welcher Tabelle Sie es gerade zu tun haben.

    Zur besseren Übersicht ist im Entwurfsraster die Zeile Tabellen enthalten. Sobald Sie ein Datenfeld dem Raster hinzufügen, wird in dieser Zeile der zugehörige Tabellenname angezeigt.

     

    Bei der Arbeit mit kleinen Bildschirmen oder Laptops kann der Inhalt von Berichten in der Seitenansicht kaum entziffert werden. Um Berichte beim öffnen automatisch maximiert anzeigen zu lassen, benötigen Sie zwei Makros mit den Namen Maximieren und Wiederherstellen. Innerhalb der Makros ordnen Sie jeweils die gleichnamigen Aktion – also einmal die Maximieren und einmal die Wiederherstellen-Aktion – an.

    Nach dem Speichern beider Makros tragen Sie das Maximieren-Makro in die BeimÖffnen-Ereigniseigenschaft ein. Das Wiederherstellen-Makro ordnen Sie der BeimSchließen-Eigenschaft zu. Wenn Sie den Bericht nun öffnen, wird er automatisch maximiert.

    Das Wiederherstellen des Berichtfensters vor dem Schließen ist erforderlich, da ansonsten nach dem Schließen alle übrigen Fenster maximiert angezeigt würden.

     

    Bei der Neuanlage eines Datensatzes in Formularen werden standardmäßig alle Datenfelder mit dem Wert Null vorbelegt. Gleiches gilt für Listen- und Kombinationsfelder. Die Folge ist hierbei, dass kein Listeneintrag markiert bzw. ausgewählt ist.

    Mit Hilfe des Ausdrucks =[]. [ItemData](0) wird automatisch der erste Eintrag markiert.

    Tragen Sie den Ausdruck zu diesem Zweck einfach in die Standardwert-Eigenschaft des Listen- oder Kombinationsfeldes ein. Den Platzhalter ersetzen Sie hierbei durch den Namen Ihres Steuerelements.

    Diese Vorgehensweise funktioniert nur dann einwandfrei, wenn das Listen- oder Kombinationsfeld an ein Feld einer Tabelle oder Abfrage geknüpft ist. Sollte dies nicht der Fall sein, müssen Sie den Vorgang von VBA aus durchführen. Die folgende Anweisung erledigt dies für ein Listenfeld namens lstListe:

    Me!lstListe = Me!lstListe.ItemData(0)

    Wenn Sie diese Anweisung beispielsweise in die BeimÖffnen-Ereignisprozedur eines Formulars platzieren, markiert Access beim Öffnen automatisch den ersten Listeneintrag.

     

    Abfragen dienen vor allem der Auswertung von Datenbeständen. Sie vermitteln verschiedene Ansichten einer oder mehrerer Tabellen und bilden damit ein wichtiges Instrument, um die Aussagekraft der Daten zu erhöhen.

    Einen speziellen Typ von Abfragen bietet die Gruppe der Aktionsabfragen.Mit ihnen lassen sich Datenbestände verändern. Wenn Sie an sehr vielen Datensätzen ähnliche Bearbeitungsschritte durchführen wollen, können sich sich die Arbeit mit Aktionsabfragen häufig erleichtern.

    An dieser Stelle möchten wir Ihnen die verschiedenen Aktionsabfragen im Detail vorstellen.

     

    Diese Buchreihe wurde mehrfach mit dem Urteil SEHR GUT bewertet!

    Alle Details sind bereits didaktisch so zusammengetragen, dass der Leser mit einem Minimum an Aufwand lernt - ohne nachzuschlagen und herumzusuchen. Das kann bis zu 40% Zeitersparnis gegenüber dem Arbeiten mit konventionellen Büchern bedeuten!

    Einsteiger haben schon nach kurzer Zeit die ersten Erfolgserlebnisse.

    Erfahrene Anwender können dank der vollständigen Beschreibung auch die letzten Ressourcen des Programms nutzen und erhalten zahlreiche Tipps. Das Reihenkonzept bietet: - knappe, klare Formulierungen - Übersichtlichkeit, Verständlichkeit und Kompetenz - kein Computerchinesisch, sondern leicht nachvollziehbare Beispiele und Tipps - Praxisnähe durch Beispiele aus der Praxis für die Praxis - Zeitersparnis durch "Learning by doing" mit Schritt-für-Schritt-Erklärungen - Modularität, so dass der Leser sofort die Lösung zu einem Thema findet - 100 % Programmnutzung (im Grund- u. Aufbaukurs sind alle Programmfunktionen beschrieben) Inhalte: Datenbanken erstellen, Tabellen entwerfen und verwalten, Datentypen, Indizes, Schlüssel, Gültigkeitsregeln, Defaultwerte, Nachschlageassistent, Ausdruckseditor, Datenblattlayout, Zugriff in Mehrbenutzerumgebung, Beziehungen zwischen Tabellen, Filter (auswahlbasierte, auswahlausschließende, formularbasierte Spezialfilter), Auswahlabfragen, Aktionsabfragen, Einführung in die Formular- und Berichterstellung, Korrektur-, Such- und Sortierfunktionen.

    Jutta Giersig; Giersig (1997); Euro 25,46; ISBN: 3932421027

    Leider müssen wir Ihnen mitteilen, dass das Access 97 Buch nicht mehr im Handel erhältlich ist.

    Bei Amazon.de gibt es die Möglichkeit alte nicht mehr im Handel erhältliche Bücher gebraucht zu kaufen. Schauen Sie doch einfach mal bei Amazone.de vorbei. Vielleicht haben Sie ja Glück.

     
    Sobald Sie sich im Entwurfsbereich eines formularbasierten Filters oder eines Spezialfilters befinden, können Sie über den Menüpunkt Datei>Aus Abfrage laden einen zuvor gespeicherten Filter oder eine Abfrage laden. In einem Dialogfenster werden alle Abfrage aufgeführt, die Sie vorher gespeichert haben. Wählen Sie eine Abfrage aus und klicken Sie auf OK. Sie können den Filter dann anwenden.
    Wie kann ich von einer Geburtstagsangabe nur den Monat und den Tag extrahieren, um so eine tabellarische Auflistung der Geburtstage nach Monaten gegliedert zu erhalten?

    Access-97-Datenbank mit Geburtstagen

    Die Format-Funktion nimmt verschiedene Texte als Parameter an, die einen Datumswert entsprechend formatieren. Um beispielsweise den Monat aus einem Geburtsdatum zu extrahieren, verwenden Sie folgende Zeile:

    Format([Geburtstag];"mmmm")

    Die Beispieldatenbank zu diesem Leserbrief enthält eine Abfrage namens qryGeburtstage, die das Geburtsdatum sowie den Monat als Text (z.B. Januar) zurückgibt. Wenn Sie zusätzlich auch nach dem Monat sortieren möchten, reicht es leider nicht aus, nach diesem Feld zu sortieren. Die Folge wäre zum Beispiel, dass der Monat April an erster Stelle erscheinen würde. Zur Lösung dieses Problems ist ein weiteres Feld erforderlich, das die Monatsnummer ermittelt:

    SortMonat: Monat([Geburtstag])

    Mit dem Berichtsassistenten können Sie dann einen Bericht erstellen, der nach dem Feld SortMonat gruppiert ist. Alle Geburtstage im jeweiligen Monat werden dann angezeigt.

    Allgemeine News, kostenloser Download von Beispieldatenbanken, Werkzeugen und Whitepapers sind für jeden frei zugänglich, ein spezieller Newsserver steht dagegen nur Mitgliedern zur Verfügung. 
    Dieses Tool sucht nach ähnlichen Datensätzen in Datenbanken und eignet sich besonders für die Vorbereitung von Adressbeständen vor dem Versand von Mailings, Katalogen oder ähnlichen Sendungen an Kunden und Interessenten. Durch optimierte Pattern-Matching Algorithmen findet FuzzyDupes ähnliche Datensätze mit hoher Trennschärfe, wie sie bei einer manuellen Prüfung nur mit sehr hohem Aufwand zu finden wären. Dabei ist es auch möglich, Listen zusammen zu führen und Inhalte externer Datenbanken zu vergleichen. Die Software bietet volle Unicode Unterstützung und erlaubt es Ihnen eigene Normalisierungsregeln zu definieren. Datensätze in MS-Outlook und dem Windows Adressbuch können direkt gelöscht werden. Es werden eine Reihe verschiedener Datenbankformate wie MS-Access, MS Excel, MS SQL-Server sowie Text- und CSV-Dateien unterstützt. Ausserdem kann per ODBC-Schnittstelle auf weitere Datenbanken wie MySQL und Oracle zugegriffen werden.  

    Die DoEvents-Anweisung muß zu diesem Zweck einfach direkt hinter den Anweisungen angeordnet werden, die Bildschirmausgaben betreffen.

    Die Idle-Methode des DBEngine-Objekts hat eine ähnliche Wirkung. Sie bezieht sich jedoch auf die JET-Datenbankengine und ermöglicht dieser die Abarbeitung von Datenbankoperationen. Dazu zählt beispielsweise das Schließen von Speicherseiten oder das Aktualisieren von Datensatzgruppen in Mehrbenutzerumgebungen.

     

    Wie im Trick String-Parameter in API-Funktionen beschrieben können Sie den Parameter mit der VBA-Funktion String$ auf die API-Funktion wie folgt vorbereiten:

    strTempVerz = String$(255, 0) ‘ String mit 255 NULLs initialisieren

    Der Rückgabewert der Funktion wird allerdings mit der vollen Länge zurückgegeben, so dass dem String möglicherweise mehrere NULLen anhängen.

    Um dem Wert von diesen übriggebliebenen NULL-Werten zu befreien, setzen Sie den VBA-Befehl Instr ein, der innerhalb eines Strings nach einem bestimmten Zeichen sucht.

    Für unsere Zwecke durchsuchen wir den String strTempVerz nach dem Zeichen Chr$(0), das ein NULL-Zeichen darstellt. Die String-Position, an der die Funktion das erste NULL-Zeichen findet, wird der Left-Funktion übergeben, um alle vorhergehenden Zeichen aus der Zeichenkette herauszulösen.

    strTempVerz = Left$(strTempVerz, InStr(strTempVerz, Chr$(0)) - 1)

    Wollten auch Sie schon lange die Möglichkeiten von Access 2003 nutzen, komplexe Datenbanken schnell erstellen, Formulare kreieren und Berichte gestalten - wussten aber nicht, wie Sie vorgehen sollen? Hier wird Ihnen einfach, klipp & klar erklärt, was Sie tun müssen, um sich in Access 2003 zurecht zu finden. Schritt-für-Schritt-Anleitungen, anschauliche Beispiele und Übungsfragen auf der CD helfen Ihnen dabei, schnell die ersten Erfolgserlebnisse zu erzielen. Sie interessieren sich nur für bestimmte Kapitel - kein Problem. Alle wichtigen Arbeitsschritte aus jedem Kapitel werden am Ende des Buches in Form von Quickhelps noch einmal erläutert. Wer es noch genauer wissen will, kann im Computer-Lexikon 2002 nachschlagen, das sich mit auf der CD befindet. Warum Access 2003 kompliziert erklären - es geht auch einfach, klipp & klar.

    von Pauline Huth; Microsoft Press (2003); Euro 14,90; ISBN: 3-86063-427-5

     

    Für wenig erfahrene wie fortgeschrittene Anwender, die kompetent mit Access umzugehen lernen wollen.

    Von Said Baloui; Markt und Technik; Euro 39,95; ISBN: 3827253926

     

    Diese Site von Raphael Hein bietet eine umfangreiche Link-Sammlung zu Access. Hier findet man Links zu (fast) allen Seiten rund um Microsoft Access. Es können auch neue Access Links hinzugefügt werden.

    Desweiteren gibt es die Yaccess-News hier werden Interessante neuigkeiten zum Thema Access vorgestellt.

     

    Eine professionelle Anleitung zu effektivem Datenbank-Design, incl. VBA-Programmierung etc.

    Von Gerhard Brosius; Addison-Wesley (1999); Euro 49,95; ISBN: 3827315417

     

    Öffnen Sie das Dialogfenster Optionen über den Menüpunkt Extras>Optionen und aktivieren Sie das Register Datenblatt. In diesem Register können Sie die Standardwerte für neue Datenblätter festlegen. Dazu gehören die Farben, die Schrift und Spezieleffekte für die Felder des Datenblattes.

    Die Einstellungen, die Sie in diesem Dialog treffen, wirken sich auf alle alten Datenblätter, bei denen die Standardwerte nicht verändert wurden, und auf alle neuen Datenblätter aus. Haben Sie bei einem Datenblatt vorher beispielsweise eine andere Schrift gewählt, wird das Layout dieses Datenblattes nicht geändert.

     

    Mit einem Makro namens AUTOKEYS lassen sich benutzerdefinierte Tastaturbelegungen für bestimmt Tastenkombinationen erstellen.

    Jedem Makro kann eine Taste oder Tastenkombination zugeordnet werden.

    Das AUTOKEYS Makro überprüft, ob eine der folgenden Tasten gedrückt wurde:

    - Die Funktionstasten F1 bis F12 (zuzüglich STRG und SHIFT)
    - Alle alphanumerischen Tasten (zuzüglich STR)
    - Die Tasten Einfügen und Entfernen (zuzüglich STRG und SHIFT)

    Wenn die betreffende Taste bzw. Tastenkombination gedrückt wird, werden die im Makro festgelegten Aktionen ausgeführt.

     
    Hier finden Sie täglich aktualisiert Tipps und Tricks zu Visual Basic. Weitere Themen: Grundlagen, KnowHow, Komponenten, AddIns, VBA, VBScript, Ressource.  

    Ich benötige dringend für eine Anwendung (RunTime) einen Dialog zur Abfrage eines Verzeichnisses (Ordners). Der Setup-Assistent verwendet einen solchen Dialog zur Auswahl des Verzeichnisses, in dem der Diskettensatz abgelegt werden soll. Nun habe ich mir den Quelltext des Setup-Assistenten angeschaut und einen Declare-Aufruf nach MSACCESS.EXE gefunden.

    Über die Vollversion von Access erhalte ich damit auch den gewünschten Dialog - in der Laufzeitversion jedoch nicht!

    Wie bekommt man einen Ordnerauswahl-Dialog ohne auf andere Programmiersprachen zurückgreifen zu müssen?

    Die Windows-API verfügt immer noch nicht über eine bequeme Lösung für den Fall, dass man mit VBA einen Dialog für die Auswahl eines Ordners anzeigen will.

    Eine fehlende Funktion wie diese ist aber der perfekte Kandidat für eine ActiveX-Komponente, die man systemweit einsetzen kann. Von einer solchen Komponente profitieren nicht nur Access-Datenbanken, sondern auch alle Automation-fähige Applikationen.

    Der Ordnerauswahl ActiveX-Server ist eine DLL-Komponente, die Sie im Access-Dialog "Verweise" anmelden. Die beiliegende Demo-Datenbank macht diese Anmeldung automatisch beim Laden des Formulars.

    Die Eigenschaften und Methoden der Komponente können Sie sich im Objektkatalog anschauen.

    Ein wichtiger Faktor bei der Pflege von Daten ist die Zeit. So können Sie mit der Kenntnis des Anlagedatums und des Datums der letzten Änderung an einem Datensatz zumindest eine Vorschlagsliste erstellen, welche Daten veraltet sind.

    Ergänzen Sie Ihre Datentabellen um zwei Datenfelder für das Anlage- und das Änderungsdatum eines Datensatzes. So haben Sie stets den Überblick, welche Daten längst veraltet sind und deshalb eventuell gelöscht werden dürfen.

    Das Anlagedatum eines Datensatzes können Sie automatisch pflegen lassen, indem Sie den Ausdruck

    =Datum()

    für die Eigenschaft Standardwert eintragen. Sie können diese Eigenschaft wahlweise im Tabellen- oder Formularentwurf einsetzen.

    Die Pflege des Änderungsdatums kann nur in einem Formular erfolgen. Öffnen Sie das Eigenschaftsfenster und markieren Sie mit dem Befehl Bearbeiten / Formular auswählen das Formularobjekt. Anschließend starten Sie den Code-Editor für die Ereignis-Eigenschaft Vor Aktualisierung. In dem sich öffnenden Modulfenster geben Sie zwischen den Zeilen Sub Form_BeforeUpdate ... und End Sub eine neue Zeile mit der folgenden Anweisung ein:

    Me!Änderungsdatum = Date

    Ersetzen Sie den Text Änderungsdatum gegebenenfalls durch den Steuerelementnamen, den Sie in Ihrem Formular verwendet haben.

    Access aktualisiert das Änderungsdatum jetzt automatisch und die entsprechenden Steuerelemente brauchen bei der Dateneingabe nicht mehr angesprochen zu werden. Sie können daher für die Steuerelemente Anlagedatum und Änderungsdatum die Eigenschaft Aktiviert auf Nein und die Eigenschaft Gesperrt auf Ja einstellen.

     

    Der Excel-Transferassistent ermöglicht Ihnen die einfache und unkomplizierte Übergabe einzelner Datensätze an Microsoft Excel. Mit einem Knopfdruck übergibt der Assistent den ausgewählten Datensatz an eine beliebige Excel-Mappe und Zellenposition.

    Die komplizierten DDE- und OLE-Funktionen bleiben Ihnen somit erspart. Den Assistenten integrieren Sie spielend leicht in Ihre Datenbankanwendung, indem Sie einfach das mitgelieferte Formular mit Ihrer Datenquelle anpassen. Im Formular können Sie auch eine Excel-Mappe sowie eine Zellenposition auswählen. Den Rest erledigt der Assistent.

     

    Um in meiner Datenbank die mehrfache Eingabe von Personaldaten zu verhindern, habe ich in der Tabelle Personaldaten einen Mehrfelder-Sekundärschlüssel mit der Eigenschaft keine Duplikate erstellt, der im Fall der Eingabe von identischen Personalien verhindert, dass der neue Datensatz gespeichert wird und der statt dessen eine Fehlermeldung produziert.

    Wenn ich ein Makro mit den Aktionen Meldung, AusführenBefehl (Argument Rückgängig) und StopAlleMakros auf die Formulareigenschaft Bei Fehler setze, so erscheint meine benutzerdefinierte Fehlermeldung zwar, aber sie erscheint natürlich auch bei allen anderen im Formular auftretenden Fehlern.

    Wie kann ich nun eine fehlerspezifische Meldung erzeugen? Wie muss eine VBA-Prozedur aussehen, die diesen Fehler auffängt?

    Um Ihre Fehlerprozedur auf VBA zu basieren, setzen Sie zunächst die Eigenschaft Bei Fehler Ihres Formulars auf [Ereignisprozedur]. Geben Sie dann folgende Zeilen im Code-Fenster ein.

    Private Sub Form_Error(DataErr As Integer, Response As Integer)

        ' Fehlernummer ausgeben
        MsgBox DataErr
        If DateErr = 30 Then
            DoCmd.RunMacro "MeinMakro"
            Response = acDataErrContinue
        Else
            Response = acDataErrDisplay
        End If

    End Sub

    Der Parameter DataErr enthält eine eindeutige Fehlernummer, die Sie prüfen können. In diesem Beispiel wird das Makro MeinMakro ausgeführt, falls Fehler 30 auftreten sollte.

    Alle anderen Fehler werden mit einer normalen Fehlermeldung quittiert.

    Im Netzwerk sind zwei MDB-Dateien erforderlich: Eine MDB-Datei mit Datenbanktabellen für den Server, und eine zweite MDB-Datei mit der Anwendung für die Arbeitsplatzrechner. Damit die Access-Anwendung trotz dieser Auslagerung auf die Daten zugreifen kann, wird die Anwendung mit den entfernten Tabellen verknüpft.

    Speichern Sie die MDB-Datei mit den Tabellen auf einem freigegebenen Netzlaufwerk des Servers.

    Legen Sie zunächst die neue Datenbankdatei mit Tabellen auf dem Server an. Dazu rufen Sie den Befehl Datei / Neue Datenbank anlegen auf, wählen Sie die Vorlage Leere Datenbank aus und geben der neuen MDB-Datei zum Beispiel den Namen Netz.mdb.

    Beachten Sie, dass die neue MDB-Datei mit den importierten Tabellen auf einem Netzlaufwerk des Servers liegt, das die Access-Benutzer mit ihrem Arbeitsplatzrechner erreichen können.

    Importieren Sie dann die Tabellen aus der Originaldatei mit dem Befehl Datei / Externe Daten / Importieren. Wählen Sie die MDB-Datei aus, die zurzeit alle Datenbanktabellen enthält. Daraufhin können Sie die Datenbankobjekte aus der MDB-Datei importieren. Wählen Sie die Registerkarte Tabellen aus, markieren Sie alle benötigten Datenbanktabellen, und starten Sie den Importvorgang mit der Schaltfläche OK. Siehe Abbildung 1.

    Da die Tabellen nun auf dem Server liegen, werden sie in der lokalen MDB-Datei überflüssig, weil alle Benutzer den zentralen Datenbestand verwenden sollen. Bevor Sie die lokalen Tabellen löschen, legen Sie eine Sicherheitskopie der MDB-Datei an. Öffnen Sie dann die lokale MDB-Datei, wählen Sie im Datenbankfenster die Registerkarte Tabellen, und löschen Sie die Tabellen mit dem Befehl Bearbeiten / Löschen. Bestätigen Sie auch das Löschen der Beziehungen mit der Schaltfläche Ja.

     

     

    Das in der Folge Datenbanksicherheit 1 beschriebene Schutzverfahren Datenbankkennwort vergeben reicht für einen echten Schutz auf Benutzerebene ganz und gar nicht aus. Dazu bedarf es zunächst einer neuen Arbeitsgruppendatei, in der die Benutzer- und Gruppenkonten gespeichert so wie deren Kennwörter gespeichert und verwaltet werden. Der gesamte Vorgang muss schrittweise ablaufen.

    Arbeitsgruppendatei erstellen
    Sie können entweder die Standardversion der Arbeitsgruppendatei verwenden oder eine neue erstellen. Die Standardversion der Arbeitsgruppendatei wurde bei der Installation von Access eingerichtet.

    Führen Sie das Programm Microsoft-Access-Arbeitsgruppen-Administrator (wrkgadm.exe) aus. Standardmäßig ist es im Ordner C:\Programme\ Microsoft Office\Office\1031 (Access 2000 und XP) gespeichert. Unter Access 97 finden Sie das Programm im Ordner C:\Windows\System (Windows 98/ME) bzw. C:\WINNT\System32 (Windows NT/2000).

    Erstellen Sie eine neue Arbeitsgruppendatei. Notieren Sie sich auf jeden Fall die Angaben zu Name, Firma und Arbeitsgruppen-Code und verwahren Sie diese sicher auf. Falls die Arbeitsgruppendatei gelöscht oder beschädigt werden sollte, können Sie mit Hilfe dieser Angaben wieder eine neue, identische Arbeitsgruppendatei anlegen. Denn: Ohne eine gültige Arbeitsgruppendatei kann eine gesicherte Datenbank nicht mehr geöffnet werden.

    Beim nächsten Start von Access wird automatisch diese neu erstellte Arbeitsgruppendatei benutzt. Sie sind dort automatisch als Benutzer Administrator mit allen Rechten angemeldet.

    Anmeldeverfahren aktivieren
    Das Anmeldeverfahren muss mit der Vergabe eines Kennworts an den Benutzer Administrator aktiviert werden.

    Wählen Sie aus dem Menü Extras den Befehl Sicherheit / Benutzer- und Gruppenkonten (Access 2000/XP) bzw. Extras / Zugriffsrechte / Benutzer- und Gruppenkonten (Access 97) aus.

    Aktivieren Sie im Dialogfenster Benutzer- und Gruppenrechte das Register Anmeldekennwort ändern und vergeben Sie ein Kennwort für den momentan angemeldeten Benutzer Administrator.

    Beim nächsten Start von Access müssen Sie auf jeden Fall dieses Kennwort eingeben. Deshalb sollten Sie auch dieses notieren und gut weglegen.

    Anmeldeverfahren deaktivieren
    Sie können dieses Anmeldeverfahren jederzeit wieder deaktivieren. Löschen Sie dazu wieder im Register Anmeldekennwort ändern das Kennwort für den Administrator, in dem Sie einfach ein leeres Kennwort festlegen.

    Anschließend können Sie Access wieder ohne Kennwortvergabe starten. Damit ist allerdings auch jeglicher Sicherheitsmechanismus aufgehoben.

     

    Es besteht die Möglichkeit, eine Tabelle, angelegt für Systemdaten (Grundeinstellungen), jederzeit und einfach innerhalb der Datenbankanwendung abrufbar zu machen. Die Tabelle soll in unserem Beispiel lediglich einen einzigen Datensatzeintrag mit 4 Feldnamen haben. (Datenbankpfad, Bildpfad, Mehrwertsteuer1, Mehrwertsteuer2)

    Die ideale Lösung bietet in diesem Falle das Auslagern der Daten in Arrays. Mit wenigen Handgriffen ist mit ADO unter Access 2000 eine Verbindung zu der Herkunftstabelle aufgebaut. In unserem Falle nennen wir die Tabelle "tblGrundeinstellung". Über die nachfolgende Funktion weisen wir der Variable "fldresult" 3 Arrays zu. Diese werden dann mit den Tabellenwerten beschrieben.

    ACHTUNG: Der erste Tabellenwert wird über die Spalte 0 ausgelesen!

    Public Function Paths() As Variant

        Dim rs As Recordset
        Set rs = DBEngine(0).OpenRecordset("tblGrundeinstellung")
        
        Dim fldresult(2) As Variant
        
        fldresult(0) = rs.Fields(0).Value
        fldresult(1) = rs.Fields(1).Value
        fldresult(2) = rs.Fields(2).Value
        fldresult(3) = rs.Fields(3).Value
        
        Paths = fldresult
        rs.close

    End Function

    Nun können Sie wie nachfolgend aufgeführt die Arrays bequem anwenden.

    Me.Datenbankpfad = paths(0)
    Me.Bildpfad=paths(1)
    Me.Mehrwertsteuer1=paths(2)
    Me.Mehrwertsteuer2=paths(3)

     

    Sonderzeichen wie beispielsweise das Copyright-Zeichen (©) haben die angenehme Eigenschaft, selten gebraucht zu werden. Wenn Sie, sie aber einmal benötigen, dann meistens dringend. Die Schwierigkeit besteht allerdings darin, dass sich die meisten Sonderzeichen nur schwer über die Tastatur eingeben lassen.

    Zum Start der Zeichentabelle wählen Sie den Befehl Programme / Zubehör / Zeichentabelle aus der Task-Leiste von Windows. Wenn Sie ein bestimmtes Sonderzeichen suchen, wählen Sie zunächst einen Zeichensatz aus dem dafür vorgesehenen Kombinationsfeld. Klicken Sie auf ein Zeichen, um eine vergrößerte Ansicht zu erhalten. Mit den Schaltflächen Auswählen und Kopieren übernehmen Sie eines oder mehrere Zeichen in die Zwischenablage von Windows.

    Wenn Sie die Zeichentabelle häufig während der Texteingabe und -bearbeitung benötigen, legen Sie auf Ihrem Formular eine Schaltfläche für den Start des Programms an.

    Starten Sie dazu den Befehlsschaltflächen-Assistenten und wählen Sie die Aktion Anwendung ausführen aus der Kategorie Anwendung. Auf der zweiten Dialogseite des Assistenten geben Sie folgenden Ausdruck als Befehlszeile ein:

    Charmap.exe

    Da sich die Zeichentabelle im Hauptverzeichnis von Windows befindet, brauchen Sie in der Regel keinen Pfad anzugeben. Klicken Sie auf die Schaltfläche Fertigstellen und testen Sie die Schaltfläche in der Entwurfsansicht. Auf die gleiche Weise können Sie übrigens jede beliebige Windows-Anwendung über eine Schaltfläche starten.

     

    Im unteren Fensterrand von Access befindet sich die Statuszeile. In dieser Zeile werden Beschreibungen zu Aktionen angezeigt, sobald Sie diese ausführen. Auch bei Datenfeldern kann es hilfreich sein, wenn der Benutzer einen Hinweis erhält, was er in einem Feld eintragen kann oder welche Auswahl ihm zur Verfügung steht.

    Die Entwurfsansicht einer Tabelle enthält die drei Spalten Feldname, Felddatentyp und Beschreibung. In der Spalte Beschreibung können Sie zu jedem Datenfeld einen beliebigen Text eingeben, der zusätzliche Informationen beinhaltet. Die Beschreibung eines Feldes wird in der Statuszeile eingeblendet, sobald Sie in der Datenblattansicht der Tabelle zu diesem Feld gehen.

    Wenn Sie in einem Formular ein Steuerelement anlegen, das als Steuerelementinhalt ein Datenfeld mit einer Beschreibung erhält, wird diese Beschreibung in die Eigenschaft Statuszeilentext "vererbt". Sie brauchen somit für das Steuerelement keinen neuen Statuszeilentext definieren.

     

     Die nachfolgende Tabelle enthält Vorschläge für gängige Präfixe.

    Präfix Objekt Beispiel
    tbl Tabelle tblProdukte
    qry Abfrage qryNeueProdukte
    frm Formular frmProduktListe
    rep Bericht repAdressenliste
    mac Makro macDatensatzFunktion
    mnu Menümacro mnuHauptMenü
    mod Modul modGlobals
    lbl Bezeichnungsfeld lblÜberschrift
    txt Textfeld txtProduktName
    ogr Optionsgruppe ogrZahlungsArt
    tog Umschaltfläche togAnzeige
    opt Optionsfeld optBargeld
    chk Kotrollkästchen chkFilterEinAus
    cmb Kombinationsfeld cmbKunden
    lst Listenfeld lstHersteller
    btn Befehlsschaltfläche btnSchließen
    img Bild imglogo
    ole Objektfeld oleWordObjekt
    pbr Seitenumbruch pbrSeite1
    lin Linie linTrennlinie
    rec Rechteck recKasten

    Diese Liste dient nur als Vorschlag. Natürlich können Sie Ihr eigenes Namenssystem entwickeln. Beachten Sie dabei jedoch, dass sich die vorgeschlagenen Präfixe als Quasi-Standard etabliert haben.

     

    Aus einer Tabelle mit Rechnungsdaten können Sie die noch nicht bezahlten Forderungen ermitteln. Dazu benötigen Sie lediglich eine Abfrage, die die richtigen Kriterien miteinander kombiniert.

    Die Abfrage setzt voraus, dass Ihre Rechnungsdaten ein Feld für das Datum der Rechnung (Rechnungsdatum) und ein Feld für das Zahlungsdatum (Zahlungsdatum) enthält. Nachdem Sie beide Felder dem Entwurfsbereich Ihrer Abfrage hinzugefügt haben, geben Sie für Rechnungsdatum das folgende Kriterium ein:

    Ist Nicht Null

    Sie ermitteln damit alle Rechnungen, bei denen das Rechnungsdatum einen Wert hat. Da sich Forderungen nur aus nicht bezahlten Rechnungen zusammensetzen, geben Sie zusätzlich für das Feld Zahlungsdatum das folgende Kriterium ein:

    Ist Null

    Achten Sie darauf, dass Sie beide Kriterien in die gleiche Zeile des Abfrageentwurfs eingeben. Damit ist sichergestellt, dass Access diese mit Und verknüpft. Im Abfrageergebnis erscheinen dann nur die nicht bezahlten Rechnungen.

     

     
    Office 2000 SR-1a bietet die neuesten Produktupdates für Office 2000 an einem Ort. Microsoft empfiehlt, dass alle Office 2000-Kunden ein Update auf Office 2000 SR-1a durchführen, um die neuesten Updates und optimalen Leistungen zu erhalten.
    Service Release 1a mit umfangreichen Bugfix.
     

    In einer Abfrage können Sie ein logisches Feld über die Format-Eigenschaft durch Texte anzeigen lassen. Fügen Sie den Abfrageentwurf eine Spalte für das logische Feld Raucher hinzu. Klicken Sie dann innerhalb der Spalte, und wählen Sie den Befehl Ansicht>Eigenschaften aus der Menüzeile. Access zeigt dann ein Fenster mit dem Titel Feldeigenschaften an. Geben Sie in die Eigenschaft Format folgenden Ausdruck ein:

    ;"Raucher "[Blau];" Nichtraucher "[Rot]

    Es handelt sich hierbei um ein Format für logische Felder. Access erwartet, dass Sie das führende Semikolon mit eingeben. Das darauf folgende Format gilt für den logischen Wert Wahr. Das Format bewirkt, dass für Wahr-Werte der Text "Raucher" in der Farbe Blau angezeigt wird. Weitere Einzelheiten entnehmen Sie der unten aufgeführten Tabelle.

    Bei einem Wechsel in die Datenblattansicht stellen Sie fest, dass Access wider erwarten ein Kontrollkästchen für das Feld Raucher anzeigt. Es ist daher erforderlich, dass Sie eine weitere Feldeigenschaft ändern. Wechseln Sie erneut in den Abfrageentwurf und klicken Sie in den Feldeigenschaften der Spalte Raucher auf das Register Nachschlagen. Wählen Sie hier für die Eigenschaft Steuerelement anzeigen den Wert Textfeld aus der Liste. Bei einem erneuten Wechsel in die Datenblattansicht zeigt Access die gewünschten Texte an.

    Wer von "Raucher" Angezeigter Text Farbe
    Wahr Raucher Blau
    Falsch Nichtraucher Rot

     
    Diskussion: Access 2.0 vs. 97, Sicherheit etc.. Jüngling organisiert Access-Stammtische (Mailinglist). Er bietet außerdem Beratung, EDV-Schulungen und Erstellung von Individualsoftware an. Mail-Austausch ist mit PGP-Verschlüsselung möglich.  

    Eine der vielseitigsten Funktionen unter Access ist die Format-Funktion.

    Benutzen Sie die Format-Funktion, um die Darstellung der zurückgegebenen Daten zu beeinflussen.

    Mit der Format-Funktion können Sie beispielsweise die Buchstaben von Textfeldern in Groß- bzw. Kleinschreibung ausgeben. Das erledigen die beiden Ausdrücke VornameGross:

    Format([Vorname];">") und NachnameKlein: Format([Nachname];"<")

     
      

    Ich möchte innerhalb einer Abfrage eine DomSumme aus Lagerbeständen (aus zwei Tabellen, die Lagerdaten enthalten, bei denen der Bezug immer eine Artikelnummer ist) einbinden und weiterverarbeiten. Ein Beispiel für das erwartete Ergebnis:

    Artikelnr. Menge Lagermenge Gesamtmenge
    12345 2000 120 1880
    12346 1000 100 900

    Hier wird die Lagermenge aus einer Lagertabelle mit der Funktion DomSumme ermittelt.

    Wie kann ich also die jeweilige Lagermenge automatisch ermitteln?

    Der Trick mit dieser Abfrage besteht darin, zunächst eine Abfrage zu erstellen, die die Lagermengen der einzelnen Artikel (aus einer Beispieltabelle tblArtikel) zurückgibt:

    SELECT [Artikel-Nr], Sum(Menge) AS Lagermenge FROM tblArtikelMengen GROUP BY [Artikel-Nr];

    Speichern Sie diese Abfrage unter dem Namen qryLagermengen. Erstellen Sie dann eine zweite Abfrage, die die Artikel-Tabelle und die Lagermenge-Abfrage enthält:

    SELECT Artikelname, Menge, Lagermenge, [Menge]-[Lagermenge] AS Gesamtmenge FROM tblArtikel INNER JOIN qryLagermengen ON tblArtikel.[Artikel-Nr] = qryLagermengen.[Artikel-Nr];

    Hier wird das Feld Lagermenge aus der Abfrage qryLagermengen ermittelt. Das letzte Feld Gesamtmenge ist ein berechnetes Feld aus Menge und Lagermenge.

    Legen Sie zu diesem Zweck ein neues Makro an und platzieren Sie hier die Aktion Sanduhr. Stellen Sie das gleichnamige Argument dieser Aktion auf Nein ein. Das fertige Makro speichern Sie unter dem Namen SanduhrAus. Ziehen Sie das Makro nun aus dem Datenbankfenster in eine Symbolleiste. Mit einem Klick auf das neue Symbol können Sie die Sanduhr nun komfortable deaktivieren. 

    Aufbauend auf dem Bestellformular, das in dem Beispiel der Nordwind Datenbank enthalten ist, habe ich, da ein Kunde bekanntlich mehrere Mitarbeiter hat, eine Tabelle Mitarbeiter erstellt, die über 1:n an die Tabelle Kunden gebunden ist.

    Nun möchte ich im Bestellformular den Namen eines Mitarbeiters des gerade gewählten Kunden aus einer Liste auswählen und in die Bestellung mit aufnehmen. Es funktioniert insofern, als dass beim ersten Öffnen des Formulars nach Klicken des Kombinationsfeldes alle Mitarbeiter dieses Kunden angezeigt werden und ausgewählt werden können. Sobald ich aber auf den nächsten Kunden gehe und erneut das Kombinationsfeld anklicke, werden dort nicht die Mitarbeiter des zweiten Kunden, sondern die des ersten Kunden angezeigt.

    Ist das ein Fehler in Access oder kann man das Problem selber lösen?

    In Ihrem Nordwind-Beispiel kann ein Kunde mehrere Mitarbeiter haben. Anderseits kann jeder Mitarbeiter auch mehrere Kunden betreuen.

    In diesem Fall würde ich an Ihrer Stelle eine Zwischentabelle anlegen, die diese m:n-Beziehung darstellt. Zunächst legen Sie eine Tabelle namens Mitarbeiter mit folgenden Feldern an:

    Mitarbeiter Autowert (Primärschlüssel)
    Nachname Text[50]
    Vorname Text[50]
    Abteilung Text[50]

    Die Zwischentabelle heißt MitarbeiterUndKunden und enthält diese zwei Felder:

    Mitarbeiter Autowert (Primärschlüssel)
    Mitarbeiter Zahl (Long Integer)
    Kunden-Code Text[5]

    Der Primärschlüssel der Zwischentabelle besteht aus beiden Feldern, damit die Beziehung zwischen einem bestimmten Mitarbeiter und einem bestimmten Kunden nur einmal vorkommen kann.

    Öffnen Sie nun die Beziehungen der Datenbank (Extras / Beziehungen) und fügen Sie die Tabellen Mitarbeiter und MitarbeiterUndKunden hinzu. Erstellen Sie dann Beziehungen zwischen diesen beiden Tabellen und der Tabelle Kunden wie in Abb. 1 unten.

    Erstellen Sie dann ein Formular, das auf der Tabelle MitarbeiterUndKunden basiert, und ein Kombinationsfeld mit diesen Eigenschaften:

    Steuerelementinhalt MitarbeiterNr
    Datensatzherkunft SELECT MitarbeiterNr, Nachname, Vorname, Abteilung FROM Mitarbeiter;
    Gebundene Spalte 1
    Spaltenanzahl 4
    Spaltenbreiten 0cm;2,54cm;2,54cm;2,54cm

    Dieses Kombinationsfeld erlaubt die Auswahl eines Mitarbeiters. Die vier Spalten zeigen den Nachnamen, Vornamen und die Abteilung des Mitarbeiters. Der Primärschlüsselwert (MitarbeiterNr) bleibt im Kombinationsfeld versteckt.

    Ziehen Sie dann das neue Formular per Drag & Drop auf das Formular Kunden in der Entwurfsansicht. Die Verknüpfung zwischen dem Kunden-Formular und dem Mitarbeiter-Unterformular wird auf dem Feld Kunden-Code automatisch für Sie erstellt.

    Wenn Sie das Formular nun in der Formularansicht öffnen, können Sie für jeden Kunden die zuständigen Mitarbeiter bearbeiten. Die Beziehungen, die Sie vorhin definiert haben, sorgen für die richtige m:n-Darstellung des Mitarbeiter-Kunden- Verhältnisses

     

    Dieses Add-In stellt eine einfache Lösung für die Umwandlung von Access-Daten bereit, um diese dann mit Excel oder einer beliebigen anderen Anwendung einzulesen und zu verarbeiten. Zum Einsatz kommt hierbei das XML-Format in einer Version, die speziell auf Excel 2002 abgestimmt ist.

    Das Add-In stammt von Microsoft. Es ist kostenlos und mit Quellcode herunterladbar.

     

    Bei der Arbeit mit Tabellen, die für die Replikation vorgesehen sind, wird als Primärschlüssel oftmals ein Datenfeld mit dem Felddatentyp Replikations-ID verwendet. Leider stellt VBA keinen passenden VBA-Datentyp zur Verfügung, der die 16 Byte lange Replikations-ID (auch als GUID = Global Unique Identifier bezeichnet) aufnehmen kann. Aus diesem Grund muß auf eine Zeichenkette zurückgegriffen werden.

    Die StringFromGUID wandelt eine GUID in eine Zeichenkette um, die dann beispielsweise einer Prozedur übergeben werden kann. Als Parameter muß der Funktion lediglich der Inhalt eines Replikations-ID-Datenfeldes übergeben werden. Für den umgekehrten Weg – nämlich die Konvertierung einer Zeichenkette in eine GUID – ist die Funktion GUIDFromString zuständig. Das Ergebnis kann direkt einem Datenfeld mit dem Typ Replikations-ID zugewiesen werden.

     

    Access 2007 liefert eine ganze Reihe von Neuerungen, die es besonders dem Einsteiger ermöglichen, leichter eine eigene Datenbank zu erstellen. Trotzdem braucht man für die Entwicklung einer Datenbank grundlegendes Verständnis ihrer Funktionsweise und für komplexere Aufgabenstellungen auch Programmierkenntnisse, um befriedigende Ergebnisse zu erhalten. Hier setzt dieses Buch an. Dieses Buch vermittelt die nötige Theorie, um Datenbanken verständlich zu machen, zeigt die praktische Umsetzung eines Datenbankentwurfs vom Design bis hin zu Gestaltung von Formularen und Berichten und führt in die Möglichkeiten der Programmierung mit VBA ein. Das Ganze ist in ein didaktisch ausgearbeitetes Konzept verpackt, das Ihnen mit vielen Übungen, praxisnahen Tipps und zusätzlichen Informationen auf der Website zum Buch einen gründlichen Einstieg in die Erstellung und Programmierung von Datenbanken ermöglicht.

    • Keine Programmierkenntnisse nötig 
    • Übungen im Buch und im Internet 
    • Eigene Website zum Buch

    Die Themen:

    • Einführung und erste Schritte 
    • Grundlagen des Datenbank-Designs 
    • Datenbanken mit mehreren Tabellen 
    • Relationen zwischen Tabellen einrichten 
    • Suchen, filtern und sortieren 
    • Referentielle Integrität gewährleisten 
    • Verschiedene Abfragetypen kennen lernen 
    • Daten ansprechend mit Formularen präsentieren 
    • Haupt- und Unterformulare verwenden 
    • Daten in Berichten anzeigen 
    • Berichte in andere Formate exportieren 
    • Navigation und Bedieneroberflächen optimieren 
    • Makros zur Automatisierung nutzen
    • Programmierung mit VBA-Prozeduren

    Auf der Website zum Buch: 

    • Alle Beispieldatenbanken 
    • Lösungen zu Zusatzübungen aus dem Buch 
    • Weiterführende Kapitel aus anderen Microsoft Press-Büchern

    Der Autor Lorenz Hölscher: Lorenz Hölscher ist seit rund 20 Jahren in der Computer-Branche tätig und hat neben seinem Architektur-Studium und der Tätigkeit als Grafiker, Layouter und Software-Dozent immer auch Software entwickelt. Gerade als Quereinsteiger verfügt er über die nötige Erfahrung, um Einsteigern eine komplexe Materie einfach und übersichtlich zu erklären. Er vermittelt Ihnen Access 2007 so, dass Sie das Programm beherrschen und nicht umgekehrt und auch noch Spaß dabei haben können.

     

    Das Buch wendet sich an Leser, die beruflich intensiv mit Access 2002 als einem relationalen Datenbanksystem arbeiten und eine professionelle Anleitung zu effektivem Datenbank-Design wünschen. Wegen seines umfangreichen Einführungsteils eignet sich das Buch jedoch auch für Leser ohne Vorkenntnisse über Datenbanksysteme.
    Der Autor behandelt nicht nur die Basisleistungen von Access 2002, sondern geht darüber hinaus u.a. auf die folgenden, z.T. übergreifenden Themen ein: VBA-Programmierung, Datenzugrifsobjekte, ActiveX-Komponenten, Access 2002 und das Web, Active Data Pages, Access-Projekte mit SQL-Server als Datenbank-Maschine.

    Von Gerhard Brosius; Addison-Wesley , Euro 49,95; ISBN: 3827319676

     

    Windows zeigt standardmäßig in der Task-Leiste die aktuelle Uhrzeit an. Aus Platzgründen wird die Task-Leiste und damit auch die Uhrzeit aber oft in den Hintergrund verbannt.

    Damit Sie stets wissen, was die Stunde schlägt, blenden Sie die Uhrzeit und das Datum in den Fenstertitel eines Formulars ein.

    Jedes Formular besitzt eine Eigenschaft mit dem Namen Zeitgeberintervall. Hier können Sie die Zeitperiode in Millisekunden angeben, nach der Access das Zeitgeber-Ereignis auslöst.

    Da die Uhrzeit jede Sekunde aktualisiert werden soll, geben Sie hier den Wert 1000 ein. Das Eintragen der Uhrzeit und des Datum in den Fenstertitel erledigt eine Prozedur, die mit der Ereignisprozedur BeiZeitgeber des Formulars verknüpft ist:

    Private Sub Form_Timer()

        Me.Caption = "Kunden " & Format(Now, "dd.mm.yy hh:nn:ss")

    End Sub

    Die Prozedur weist den Titel mit dem Datum und der Uhrzeit als Zeichenkette der Caption-Eigenschaft zu.
     
    Evan Callahan; Microsoft Press (1997); DM 44,- / Euro 22,49; ISBN: 3860637398
     

    Es soll beim Aufruf eines Berichts nur ein bestimmter Datensatz im Bericht ausgegeben werden. Der Benutzer soll zum Beispiel eingeben können, für welches Datum er Lieferscheine ausgedruckt haben möchte.

    Wie kann ich das realisieren?

    Die Methode OpenReport enthält einen Parameter namens WhereCondition, mit dem Sie einen Filter als Where-Klausel angeben können. Der Aufruf des Berichts für Lieferscheine am heutigen Datum würde beispielsweise so aussehen:

    DoCmd.OpenReport "repLieferscheine", WhereCondition:="LieferscheinDatum = " & SQLDatum(Date)

    In diesem Beispiel wird die benutzerdefinierte Funktion SQLDatum eingesetzt, um das Datum für SQL zu formatieren. Die Funktion hat folgenden Aufbau:

    Public Function SQLDatum(Datum As Variant) As String

        If Not IsNull(Datum) Then
            SQLDatum = "#" & Month(Datum) & "/" & Day(Datum) & "/" & Year(Datum) & "#"
        Else
            SQLDatum = "" 
        End If

    End Function

    Beim Ausdruck von Berichten werden stets immer alle Datensätze der zugrunde liegenden Datenquelle ausgedruckt. Schwierig wird es dann, wenn Sie jeden zu druckenden Datensatz einzeln auswählen möchten.

    Erstellen Sie ein Formular mit einem Listenfeld, das die genaue Auswahl der zu druckenden Datensätze erlaubt.

    Wenn Sie beispielsweise bestimmte Adressendatensätze drucken möchten, platzieren Sie auf einem leeren Formular ein Listenfeld namens lstDatensätze. Der Datensatzherkunft-Eigenschaft weisen Sie dann eine Abfrage zu, die das Listenfeld mit Adreßdatensätzen füllt. Wichtig ist hierbei, dass die gebundenen Spalte das Primärschlüsselfeld der Adressentabelle ist (in diesem Beispiel das Feld AdresseNr). Damit in der Liste mehrere Einträge gleichzeitig ausgewählt werden können, stellen Sie die Mehrfachauswahl-Eigenschaft auf Einzeln ein.

    Den Start des Drucks erledigt eine Schaltfläche, die Sie ebenfalls auf dem Formular platzieren. Die Schaltfläche ist mit der folgenden BeimKlicken-Ereignisprozedur verknüpft:

    Private Sub btnDrucken_Click()

        Dim Element As Variant
        Dim Bedingung As String
        Dim AdresseNr As Variant

        'Ist überhaupt ein Eintrag markiert?
        If Me!lstDatensätze.ItemsSelected.Count > 0 Then 

            'Bedingung zusammenstellen
            For Each Element In Me!lstDatensätze.ItemsSelected
                AdresseNr = Me!lstDatensätze.ItemData (Element)
                Bedingung = Bedingung & "AdresseNr = " & AdresseNr & " OR "
            Next Element

            'Rechtes OR abschneiden (Aua!)
            Bedingung = Left(Bedingung, Len(Bedingung) - 4)
            DoCmd.OpenReport ReportName:="Adressenliste", _ WhereCondition:=Bedingung, View:=acPreview 

        End If

    End Sub

     

    Anstelle von INI-Dateien arbeitet Windows seit der Version 95 hauptsächlich mit der sogenannten Registratur. Jeder Eintrag der Registratur besteht aus einem Schlüssel und einer Reihe von Werten. 

    Microsoft Excel speichert zum Beispiel den Namen des Standardordners für Dokumente in der Registratur. Um diesen Wert von Access aus einzulesen, werden zwei API-Funktionen benötigt, die zusammen mit einigen VBA-Konstanten in einem Modul deklariert werden müssen:

    Public Const HKEY_CURRENT_USER = &H80000001
    Public Const KEY_QUERY_VALUE = &H1
    Public Const ERROR_SUCCESS = 0&
    Public Const REG_SZ = 1

    Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias _
    "RegOpenKeyExA" (ByVal hKey As Long, _
    ByVal lpSubKey As String, ByVal ulOptions As Long, _
    ByVal samDesired As Long, phkResult As Long) As Long

    Declare Function RegQueryValueEx Lib "advapi32.dll" Alias _
    "RegQueryValueExA" (ByVal hKey As Long, _
    ByVal lpValueName As String, _
    ByVal lpReserved As Long, lpType As Long, lpData As Any, _
    lpcbData As Long) As Long

    Declare Function RegCloseKey Lib "advapi32.dll" _
    (ByVal hKey As Long) As Long

    Folgenden VBA-Code können Sie einsetzen, um den Excel-Startordner anhand der oben deklarierten API-Funktionen zu ermitteln:

    Public Function ExcelOrdnerAbfragen()

        Dim strSchlüssel As String, lSchlüssel As Long 
        Dim strWert As String, lWertLänge As Long, dtWert As Long

        strSchlüssel = "Software\Microsoft\Excel\9.0\Microsoft Excel"

        If RegOpenKeyEx(HKEY_CURRENT_USER, strSchlüssel, _ 
            ByVal 0&, KEY_QUERY_VALUE, lSchlüssel) _
            = ERROR_SUCCESS Then

        strWert = String(255, 0)

        lWertLänge = Len(strWert) 
        dtWert = REG_SZ

        If RegQueryValueEx(lSchlüssel, "DefaultPath", ByVal 0&, dtWert, ByVal strWert, lWertLänge) = ERROR_SUCCESS Then

            strWert = Left(strWert, lWertLänge)

        End If 

        RegCloseKey lSchlüssel
        Debug.Print strWert

    End If

    End Function

    Hier ist nur wichtig, dass Sie die jeweiligen Stringvariablen mit NULL-Werten initialisieren, und dass Sie NULL-Zeiger als ByVal 0& übergeben.

    Die Funktion öffnet zunächst die Registratur mit der Berechtigung zum Abfragen des Schlüssels Software\Microsoft\Excel\9.0\Microsoft Excel. Ist diese Aktion gelungen, so wird der Schlüsselwert mit der Funktion RegQueryValueEx in den Variable strWert eingelesen, der anschließend von den überflüssigen NULL-Zeichen befreit.

    Mit der Funktion RegCloseKey wird die Registratur ordnungsgemäß wieder geschlossen.

     
    Im MS-Access-Fourm können Sie Ihre Fragen zu Microsoft-Access loswerden und erhalten "fast" immer eine Antwort, die Sie nichts kostet. Fragen und Antworten rund um Microsoft Access. 

    Dies könnte beispielsweise folgendermaßen aussehen:

    Declare Function MeineHwrite Lib "kernel32" Alias _
    "_hwrite" (ByVal hFile As Long, ByVal lpBuffer As String, _
    ByVal lBytes As Long) As Long

    Der Funktionname hinter dem Alias ist der Name, unter dem die Funktion in der Funktionbibliothek KERNEL32 bekannt ist. Nach den Schlüsselwörtern Declare Function können Sie einen beliebigen Namen verwenden.

    Im oben genannten Beispiel ist ein Alias in jedem Fall notwendig, denn Access erlaubt keinen Unterstrich als erstes Zeichen einer Variablen.

    Das Schlüsselwort Alias hat auch seinen Nutzen, wenn Sie bereits bestimmte Funktionsbezeichner in Ihrer ganzen Anwendung konsequent benutzt haben (wie z.B. die Zeichenkette vor jedem Funktionnamen). Hier könnten Sie Ihre Bezeichner weiterverwenden, indem Sie ein Alias definieren:

    Declare Function fnModifyMenu Lib "user32" Alias _
    "ModifyMenuA" (ByVal hMenu As Long, ByVal nPosition As Long, _
    ByVal wFlags As Long, ByVal wIDNewItem As Long, _
    ByVal lpString As String) As Long

    Declare Function fnSetMenuItemBitmaps Lib "user32" Alias _
    "SetMenuItemBitmaps" (ByVal hMenu As Long, _
    ByVal nPosition As Long, ByVal wFlags As Long, _
    ByVal hBitmapUnchecked As Long, _
    ByVal hBitmapChecked As Long) As Long

    Die AEK9 wird zu den beiden Terminen Sa/So 30.09./01.10.2006 und Sa/So 07.10./08.10.2006 im Arvena Park Hotel in Nürnberg stattfinden.

    Es stehen 2 Wochenenden mit den gleichen Referaten zur Auswahl. Eines der Hauptthemen wird die ausführliche Vorstellung der umfangreichen Änderungen in Access 2007 sein.

     

    In einer Mehrbenutzerumgebung können Tabellendaten gleichzeitig von mehreren Anwendern bearbeitet werden. In einer solchen Situation kann es folglich vorkommen, dass die an einem bestimmten Arbeitsplatz durchgeführten Änderungen an den restlichen Arbeitsplätzen im Netzwerk nicht sofort zu sehen sind.

    Durch den Einsatz eines Zeitgebers können Sie die Anzeige der Daten automatisch in regelmäßigen Zeitintervallen aktualisieren. Die Formulareigenschaft Zeitgeber bestimmt hierbei das Zeitintervall in Millisekunden, nachdem Access das Zeitgeber-Ereignis ausgelöst. Die entsprechende Ereignisprozedur zum Aktualisieren des Formulars sieht dann wie folgt aus:

    Private Sub Form_Timer()

        DoCmd.Echo False, "Aktualisiere Daten..." Me.Requery
        DoCmd.Echo True

    End Sub

    Mit dem Menübefehl Datensätze /Anzeige aktualisieren können Sie eine Aktualisierung der Daten in der Formular- bzw. Datenblattansicht auch manuell durchführen.

     

    Oftmals sollen bei der Entwicklung von Datenbanken verschiedene Funktionen nur ganz bestimmten Benutzergruppen zur Verfügung gestellt werden.

    Anstatt nun verschiedene Datenbanken zu entwickeln und zu pflegen können Sie die einzelnen Funktionen in Abhängigkeit der Gruppenzugehörigkeit des einzelnen Benutzers aktivieren oder deaktivieren.

    Sie müssen dazu das Access-Sicherheitssystem um entsprechende Benutzergruppen (z.B. Anfänger, Fortgeschrittener, Profi) ergänzen in die Sie dann die einzelnen Benutzer einordnen.

    Mit Hilfe der Funktion IstBenutzerGruppenmitglied (Diese Funktion wird im Tipp "Gruppenzugehörigkeit des aktuellen Benutzers bestimmen" erklärt) können Sie anschließend feststellen, in welcher Gruppe der aktuelle Benutzer Mitglied ist.

    Zur Bereitstellung der unterschiedlichen Funktionen eignen sich jeweils spezielle auf die unterschiedlichen Benutzergruppen zugeschnittene Menüzeilen besonders gut. Legen Sie drei Menüzeilenmakros mit den Namen Anfänger, Fortgeschrittener und Profi an und blenden Sie die passende Menüzeile beim Start der Datenbank ein. Die folgende Prozedur zeigt, wie dies aussehen kann:

    Sub MenüzeileAuswählen()

        If IstBenutzerGruppenmitglied(CurrentUser, "Anfänger" Then Application.MenuBar = "Anfänger"

        If IstBenutzerGruppenmitglied(CurrentUser, "Fortgesschrittener" Then Application.MenuBar = "Anfänger"

        If IstBenutzerGruppenmitglied(CurrentUser, "Profi" Then Application.MenuBar = "Profi"

    End Sub

     

    Das Suchfeld (Eingabefeld) soll Datensätze im Unterformular filtern.

    Beispiel: Man gibt im Suchfeld

    =12

    ein.

    Alle Datensätze im Unterformular, die den Wert 12 beinhalten werden angezeigt, beispielsweise 4012 1200 5125 usw.

    Wie kann ich das erreichen?

    Zur Lösung dieses Problems bietet sich die Filter-Eigenschaft des Unterformulars an. Sie müssen entweder in dem Nach-Aktualisieren-Ereignis des Textfeldes zur Eingabe des Suchkriteriums oder in dem Beim-Klicken-Ereignis einer Schaltfläche die Filter-Eigenschaft des Unterformulars setzen. Betrachten Sie dazu das folgende Beispiel:

    Forms("Hauptformularname").Controls("Unterformularsteuerelementname").Form.Filter = "ID = 15"

    Forms("Hauptformularname").Controls("Unterformularsteuerelementname").Form.FilterOn

    Das Beispiel filtert die Datensätze des Unterformulars mit dem Kriterium "ID = 15" und schaltet den Filter ein.

    Alternativ dazu können Sie auch den Like-Operator verwenden. Wenn Sie beispielsweise in einem Unterformularsteuerelement txtNachname alle Nachnamen suchen wollen, die mit dem Buchstaben "A" beginnen, würde das obige Beispiel wie folgt aussehen:

    Forms("Hauptformularname").Controls("Unterformularsteuerelementname").Form.Filter = "txtNachname like 'A*'"

    Forms("Hauptformularname").Controls("Unterformularsteuerelementname").Form.FilterOn

    Im Datenbankfenster werden alle Objekte normalerweise in Form einer Liste angezeigt. Wem diese Darstellungsweise nicht genügt, der kann noch zwischen drei anderen wählen. Aktivieren Sie die Ansicht im Datenbankfenster, mit der Sie am besten arbeiten können. Das Datenbankfenster stellt die gleichen Darstellungsmöglichkeiten zur Verfügung, wie der Explorer von Windows.

    Sie haben die folgenden vier Ansichten in der Symbolleiste zur Auswahl. Siehe Abbildung 1.

    Einige Vorteile bringt die Ansicht Details mit sich. Zusätzlich zum Objektnamen werden weitere Informationen angezeigt. Dazu gehören das Erstellungsdatum, das letzte Änderungsdatum und der Objekttyp. Besonders bei Abfragen ist der Typ hilfreich, da angezeigt wird, ob es sich um eine Auswahlabfrage, eine Aktualisierungsabfrage, usw. handelt. Des weitern wird die Beschreibung der Objekte aufgeführt. Eine Beschreibung zu einem Objekt können Sie eingeben, indem Sie mit der rechten Maustaste auf das entsprechende Objekt klicken und den Befehl Eigenschaften auswählen.

    Ein weiterer Vorteil der Ansicht Details ist, dass Sie die Objekte im Datenbankfenster sortieren können. Klicken Sie auf die Überschrift der Spalte, nach der Sie sortieren wollen. Die Sortierung erfolgt aufsteigend. Ein erneuter Klick auf die gleiche Spalte erzeugt eine absteigende Sortierung.

     
    Die TOOLS.MDB ist eine Sammlung von diversen Funktionen und Musterformularen. Sie ist im Prinzip eine Erweiterung zur KnowHow.MDB von Klaus Oberdalhoff, wobei hier der Schwerpunkt darauf gelegt wurde, die verschiedenen Funktionen mit Beispielanwendungen zu zeigen und sie weitmöglichst direkt in eigene Anwendungen übernehmbar zu machen. Zu der TOOLS.MDB gehört eine umfangreiche Dokumentation. 

    Werden Sie im Selbststudium mit Microsoft Access zum Datenbankprofi! Mit diesem praxisorientierten Lehrbuch und den vorbereiteten Übungsdateien arbeiten Sie sich in Ihrer persönlichen Lerngeschwindigkeit durch die leicht nachvollziehbaren Lektionen und praktischen Übungen und lernen dabei alle wesentlichen Werkzeuge und Techniken kennen.

    Auf der Begleit-CD befinden sich alle vorbereiteten Übungsdateien, so dass Sie bei Ihrem Start keine Zeit verlieren. Dieses Lehrbuch wurde von unabhängiger Stelle als Vorbereitung auf die Microsoft Office Specialist-Prüfung anerkannt und erhielt das Prädikat "Microsoft Office Specialist Approved Courseware".

    Das offizielle Trainingsbuch von Microsoft ist das ideale Lehrbuch für jeden, der Access endlich beherrschen will.

    Aus dem Inhalt:

    - Erstellen Sie eine Datenbanklösung, die Informationen leicht auffindbar, sofort verwendbar und gemeinsam nutzbar macht
    - Arbeiten Sie mit Daten von Kalkulationsdateien, XML-Dateien und anderen Datenbanken
    - Verwenden Sie Formulare, Filter, Abfragen und Berichte, um Daten zu sammeln und zu analysieren
    - Erlernen Sie Wege, um Datenbeschädigungen und unbefugten Zugriff zu verhindern
    - Erstellen Sie Webseiten, die von Access-Datenbank gespeist werden
    - Bereiten Sie sich auf die Microsoft Office Specialist-Prüfung vor

     

    Ich habe an einem Formular die Navigationsleiste ausgeblendet, um eine korrekte Eingabe erforderlicher Daten über den Button Speichern mit gewissen Eingabeparametern zu erzwingen.

    Wie kann ich einen Wechsel zu einem neuen Datensatz und die damit verbundene Speicherung mittels Mausscroll oder Tastatur z.B. Bild auf/ab verhindern?

    Eine korrekte Eingabe können Sie mit normalen Bordmitteln, also auch wenn die Navigationsleiste eingeblendet ist, erzwingen.

    Setzen Sie dafür das Formularerreignis BeforeUpdate ein:

    Private Sub Form_BeforeUpdate(Cancel As Integer)

        If Len(Me!PLZ) <> 5 Then
            MsgBox "Geben Sie bitte 5 Ziffer für die PLZ ein."
            Cancel = True

        End If

    End Sub

    Wenn die Eingaben Ihren Parametern nicht entsprechen, geben Sie eine Meldung aus und setzen Sie Cancel auf True. BeforeUpdate wird immer ausgelöst, egal wie der Benutzer den Datensatz verlassen will.

    Standardmäßig zeigt Access die Daten einer Tabelle genau so an, wie sie eingegeben wurden. Felder mit dem Inhalt NULL sind eine Ausnahme. Die betreffenden Felder werden hierbei einfach leer gelassen.

    Verwenden Sie die Format-Eigenschaft, um den Inhalt NULL durch den Text "Null" darzustellen.

    Die Eigenschaft Format kann aus mehreren Bereichen bestehen.

    Bei der Formatierung von Texten sind beispielsweise drei Bereiche zulässig, die jeweils durch Semikolons voneinander getrennt werden müssen.
    Der erste ist für die Formatierung normaler Inhalte zuständig, während der zweite Bereich für Felder ohne Inhalt (= leere Zeichenkette) verantwortlich ist.
    Der dritte Bereich sorgt schließlich für die Formatierung im NULL-Fall.

    Den folgenden Ausdruck können Sie beispielsweise in der Format-Eigenschaft eines Textfeldes einsetzen:

    @;"leer";"Null"

    Der Ausdruck gibt - falls vorhanden - den normalen Inhalt eines Textfeldes aus. Wenn das Feld eine leere Zeichenkette enthält, wird der Text leer ausgegeben. Sollte der Inhalt NULL sein, zeigt Access den Text "Null" an.

    Die Format-Eigenschaften für numerische Felder bestehen aus insgesamt vier Bereichen, wobei der zweite für die Formatierung negativer Werte zuständig ist. Der Ausdruck

    0;(0);"kein Wert";"Null"

    hat beispielsweise folgende Auswirkung:

    Bereich Wert Ausgegebenes Format
    1 Positiv Der Wert selbst
    2 Negativ Wert zwischen Klammern
    3 Leer (Nullwert) Kein Wert
    4 0 Null

    Wenn Sie die Format-Eigenschaft schon im Tabellenentwurf definieren, wird das Format automatisch in alle neu angelegten Formulare und Berichte übernommen. Das Format können Sie wie beschrieben auch nachträglich beim Formular- bzw. Berichtentwurf bestimmen. Diese Einstellung hat dann Vorrang vor der in der Tabellendefinition gespeicherten Einstellung.

     

    Wenn Sie schon des öfteren Datenbankanwendungen mit VBA-Code entwickelt haben, dürften sich inzwischen einige wieder verwendbare Prozeduren zur Erledigung von Standardaufgaben angesammelt haben.

    Anstelle Ihrer Lieblingsprozeduren in jede neue Datenbank zu kopieren, stellen Sie einfach eine Referenz zu Ihrer Bibliotheksdatenbank her. So lassen sich beispielsweise Fehler leichter beheben und Änderungen schneller durchführen.

    Voraussetzung ist, dass Sie alle Prozeduren in eine leere Datenbank kopieren, die damit die Funktion einer Bibliotheksdatenbank erhält. Diese Datenbank kann nun von einer Hauptdatenbank mit Hilfe des Referenzen-Dialogfensters eingebunden (referenziert) werden. Öffnen Sie dazu ein beliebiges Modul und wählen Sie den Menüpunkt Extras / Verweise aus.

    Klicken Sie auf Durchsuchen und wählen Sie unter Dateityp den Eintrag Datenbanken aus. Navigieren Sie zu dem Verzeichnis, in dem sich Ihre einzubindende Datenbank befindet und klicken Sie diese doppelt an. Die auf diese Weise eingebundene Datenbank erscheint dadurch in der Liste des Referenzen-Dialog. Sie können nun auf alle mit dem Attribut Public versehenen Prozeduren und Variablen dieser Datenbank zugreifen, als wenn sich die betreffenden Elemente direkt in Ihrer aktuellen Datenbank befinden würden.

    Der Pfad zur referenzierten Datenbank wird in der aktuellen Datenbank gespeichert. Wenn Sie die Datenbank weitergeben, kann Access die referenzierte Datenbank aufgrund der anderen Verzeichnisstruktur eventuelle nicht finden, obwohl sie auf dem Rechner vorhanden ist. Sie sollten daher alle referenzierten Datenbanken stets in das Systemverzeichnis von Windows kopieren. Wenn Access die Datenbank hier findet, wird sie automatisch und ohne Fehlermeldung eingebunden.

     
    Software zum Bestellen und kostenlosen Testen, Support , FAQ und Knowledge-Base, Barcodes online etc.. Beispielhafte Einbindung des TBarCode ActiveX Controls in Microsoft Access 2000. Auch in Englisch.  

    Mit einem Eingabeformat lassen sich fehlerhafte Eingaben zum Teil abfangen. Wertebereiche können Sie damit aber nur beschränkt festlegen. Bei Postleitzahlen wird der Wertebereich dadurch eingeschränkt, dass genau fünf Zahlen eingegeben werden müssen.

    Wenn Sie aber beispielsweise in einem Feld nur Zahlen zwischen 10 und 30 erlauben wollen, ist das mit einem Eingabeformat nicht möglich.

    Sie definieren Gültigkeitsregeln, deren Einhaltung bei der Eingabe von Daten von Access überprüft wird.

    Erstellen Sie zum Beispiel ein Feld vom Datentyp Zahl. In diesem Feld sollen, wie zuvor erwähnt, nur Zahlen zwischen 10 und 30 eingegeben werden dürfen. Geben Sie bei der Eigenschaft Gültigkeitsregel des Feldes entweder die Zeile

    =10 Und =30

    oder

    Zwischen 10 Und 30

    ein. Beide Definitionen haben die gleiche Bedeutung.

    Wenn Sie in diesem Feld Daten eingeben, wird beim Verlassen des Feldes die Gültigkeitsregel überprüft. Ist die Regel erfüllt, kann mit der Eingabe fortgefahren werden. Ist die Regel nicht erfüllt, wird eine Fehlermeldung angezeigt, und die Eingabe muss korrigiert werden.

    Bedenken Sie, dass die Prüfung von Gültigkeitsregeln Zeit in Anspruch nimmt, und die Ausführung des Programmablaufs verlangsamt.

     
    Melomoon (2000); Euro 10,10; ISBN: 3932384520 

    Folgendes Problem: Ich habe eine Stückliste in einem Unterformular. In diese Liste gebe ich eine Anzahl in ein Feld ein und wähle dann in einem Kombinationsfeld den gewünschten Artikel aus.

    Der Listenpreis erscheint als DomWert. Der Endpreis errechnet sich dann im nächsten Feld aus [Anzahl]*[Listenpreis]. Soweit funktioniert alles bestens. Jetzt möchte ich aber die Summe aller Endpreise in einem Extrafeld am Formularfuß bilden, um dieses Feld später vom Hauptformular aus aufzurufen. In das Feld kann ich ja nicht Summe([Endpreis]) eingeben. Auch nicht Summe([Anzahl]*[Listenpreis]). Ich habe es mit Summe([Anzahl]*DomWert("[Listenpreis]";"Liste Zusatzmaterial";"[Artikel]=Formular![Artikel]") versucht, also mit der DomWert-Anweisung aus dem Feld Listenpreis, aber dann werden die Anzahlen der einzelnen Positionen nicht mit den dazugehörigen Listenpreisen, sondern immer mit dem Listenpreis des ersten Artikels meiner Stückliste multipliziert. Da meine Artikel aber natürlich unterschiedlich teuer sind, kommt ein falsches Ergebnis heraus.

    Wie kann ich Access überzeugen, immer die Anzahl mit dem dazugehörigen Listenpreis zu multiplizieren?

    Zur Lösung des Problems sollten Sie als Datenherkunft für das Formular eine Abfrage verwenden und dort ein berechnetes Feld mit folgendem Ausdruck hinzufügen:

    PreisPosition: [Anzahl]*[Listenpreis]

    Fügen Sie dem Detailbereich des Formulars ein Textfeld mit dem Steuerelementinhalt PreisPosition hinzu.

    Anschließend können Sie im Formularfuß den Ausdruck Summe([PreisPosition]) verwenden. 

    Mit den fullAccess powerTools erhalten Sie 39 Assistenten und über 180 Funktionen, die das Entwickeln mit Microsoft Access zum Kinderspiel machen. Und das für die Access-Versionen Access 2.0, Access 7.0 und Access 97. Dadurch sparen Sie Zeit und Geld! Alle Tools sind in HTML-Format ausführlich dokumentiert und lizenzfrei. Lesen Sie auch das PowerTools-Handbuch online den Link finden Sie weiter unten.

    Microsoft Office Journal, Heft 3/98 schreibt: "Die Tools sollten bereits mit Access ausgeliefert werden."

    Zwei Highlights:

    Der Suchen und Ersetzen-Assistent siehe Abbildung 1.
    Mit dem Suchen und Ersetzen-Assistenten können Sie die Entwurfsobjekte einer Datenbank durchsuchen und Textteile ersetzen lassen. Dieser Assistent ermöglicht die automatisierte Überarbeitung von Tabellen, Abfragen, Formularen, Berichten und Modulen. Der typische Anwendungsfall dieses Tools ist das Umbenennen eines Datenfeldes einer Tabelle. Daraus ergibt sich natürlich die Notwendigkeit, alle Abfragen, Formulare und Berichte ebenfalls zu aktualisieren. Der Suchen und Ersetzen-Assistent übernimmt diese zeitaufwendige Aufgabe.

    Der Symbolleisten-Manager siehe Abbildung 2.
    Mit dem Symbolleisten-Manager können Sie sowohl Schaltflächen als auch Kombinations- und Textfelder in eine Symbolleiste einfügen. Für jedes Steuerelement lässt sich eine Ereignisprozedur anlegen, die direkt mit dem Steuerelement verknüpft ist. Außerdem können Sie die Größe der Steuerelemente verändern, so dass Sie beispielsweise eine Schaltfläche mit doppelter Höhe und vierfacher Breite erzeugen können.

     

    Wir erfassen unsere Konstruktionen in einer Datenbank. Wir nutzen den Autowert um eine fortlaufende Nummerierung zu gewährleisten. Diese Nummer soll so aussehen "3056". Die Ziffer 3 steht für das Jahr, die letzten drei Ziffern für die Konstruktionsnummer. Im Jahr 2004 soll dann eine "4" erscheinen und der Zähler für die Konstruktionsnummern wieder bei 1 anfangen.

    Wie läßt sich das Problem lösen?

    Der Algorhythmus für AutoWert-Felder lässt sich nicht beeinflussen. Sie können statt dessen ein Zahlenfeld verwenden. Dann müssen Sie den Algorhythmus zur Vergabe des Primärschlüssels programmieren. Die entstehende Funktion können Sie in Formularen und Abfragen verwenden.

    Das Ermitteln der Datensatzanzahl in Recordset-Objekten mit Hilfe der RecordCount-Eigenschaft ist eine heikle Angelegenheit. Access füllt bestimmte Recordset-Objekte nämlich erst bei Bedarf. Solange kein vollständiger Zugriff auf alle Datensätze erfolgt ist, ermittelt die RecordCount-Eigenschaft die falsche Anzahl.

    Mit Hilfe der AnzahlDatensätze-Funktion wird die Anzahl der Datensätze innerhalb einer Datensatzgruppe immer exakt ermittelt. Der Prozedur muss beim Start lediglich das betreffende Recordset-Objekt übergeben werden.

    Function AnzahlDatensätze(R As Recordset) As Long

        Dim Lesezeichen As String

        'Bei Tabellen ist die Anzahl sofort richtig
        If R.Type = dbOpenTable Then
            AnzahlDatensätze = R.RecordCount
        Else
            If R.RecordCount = 0 Then
                AnzahlDatensätze = 0
            Else
                Lesezeichen = R.Bookmark
                R.MoveLast
                AnzahlDatensätze = R.RecordCount
                R.Bookmark = Lesezeichen
            End If
        End If

    End Function

    Ein weiterer Vorteil der Funktion besteht darin, dass der aktuelle Datensatzzeiger nicht verschoben wird.

     

    Das Gruppieren und Sortieren nach Memo-Feldern ist aufgrund der großen Anzahl an Zeichen, die solche Felder aufnehmen können, nicht möglich.

    Mit Hilfe der Funktion Links können Sie zumindest nach den ersten N Zeichen sortieren und gruppieren.

    Wenn Sie beispielsweise nach den ersten 100 Zeichen des Memo-Felds Anmerkungen sortieren möchten, fügen Sie der Abfrage im Entwurfsbereich ein neues berechnetes Datenfeld hinzu. Geben Sie unter Feld den folgenden Ausdruck ein:

    MemoSort: Links([Anmerkungen];100)

    Unter Sortierung wählen Sie anschließend die Art der Sortierung aus.

     

     

    Um in der Entwurfsansicht mehrere Spalten zu definieren, befolgen Sie die folgenden Schritte: 

    1. Wählen Sie den Menübefehl Datei>Seite einrichten aus 
    2. Klicken Sie die Registerkarte Spalten
    3. Geben Sie unter Spaltenanzahl die Anzahl der vertikalen Spalten an. Bei Bedarf passen Sie zusätzlich den Zeilen- sowie den Spaltenabstand an. 
    4. Passen Sie in der Sektion Druckgröße die Breite der einzelnen Spalten an. Achten Sie hierbei darauf, dass alle Spalten auf der Seite Platz finden. 
    5. Als Letztes konfigurieren Sie unter Layout-Elemente die Druckreihenfolge.
     

    Wählen Sie dazu den Menübefehl Ansicht/Tabellennamen. Diese Einstellung ist allerdings nur für die aktuelle Abfrage gültig. Wenn Sie eine neue Abfrage erstellen, werden die Tabellennamen wieder angezeigt.

    Deaktivieren Sie die Funktion für die gesamte Datenbank, so dass die Tabellennamen zu jedem Feld nicht mehr angezeigt werden.

    Um die Zeile Tabelle auf Dauer auszublenden, müssen Sie den Optionen-Dialog über den Menüpunkt Extras/Optionen aufrufen und in das Register Tabellen/Abfrage wechseln. In der Rubrik Abfrageentwurf müssen Sie dann das Kontrollkästchen Tabellennamen anzeigen löschen.

    Die Änderung zeigt sofort ihre Wirkung. Wenn Sie eine neue Abfrage öffnen, wird die Zeile Tabelle nicht mehr angezeigt.

     
    Diese Seite ist soll Hilfestellung bei Problemen mit der Entwicklung und Administration des Microsoft SQL Servers geben. Auch die angrenzenden Themen wie Access, ADP, ADO und VBA werden hier mit behandelt. 

    Die beiden Software-Entwickler Mossami und Amisoft erleben, was Programmierern tagtäglich passieren kann: Ein potentieller Kunde droht mit einem größeren Auftrag; er braucht eine Software zur Verwaltung seiner Dokumente. Kein Problem für die Hauptdarsteller dieses Buchs: Sie nehmen die Anforderungen auf, erstellen daraus ein Konzept und entwickeln in Zusammenarbeit mit dem Auftraggeber eine richtige Dokumentenverwaltung mit allem Drum und Dran.

    Software zu entwickeln heißt nicht nur, die Programmiersprache zu beherrschen, sondern auch die Anforderungen beim Auftraggeber zu erkennen und diese in das gewünschte Produkt umzusetzen. Theoretische Abhandlungen über beides finden sich genug, jedoch nicht kompakt in einem Buch zusammengefasst und erst recht nicht zum Thema Microsoft Access. Dieses Praxisbuch schließt somit eine Lücke und soll zeigen, wie ein komplettes Projekt ablaufen kann - vom ersten Telefonat mit dem Kunden bis zum Installieren der fertigen Software. Und keine Angst: Einschlafen wird bei der Lektüre diese Buchs keiner - aber lesen Sie doch einfach selbst, zum Beispiel in den Probekapiteln unter http://www.access-entwicklerbuch.de/praxis.

    Aus dem Inhalt
    - Aufnahme von Anforderungen und Umsetzung in ein Konzept
    - Entwurf von Datenmodell und Benutzeroberfläche
    - Beschreibung der Programmierung einer kompletten und umfangreichen Anwendung
    - Access 2007-Techniken im Praxiseinsatz
    - Lösung von alltäglichen Problemen bei der Software-Entwicklung
    - Installation, Wartung und Pflege von Datenbanken

    Im Internet
    Unter www.access-entwicklerbuch.de/praxis findet der Leser die komplette Beispielanwendung inklusive aller Quellcodes, das komplette Buch als eBook und ein Forum für den Austausch über das im Buch beschriebene dmsBase. Das ist aber noch nicht alles: Die im Buch beschriebene Software wird weiterentwickelt und steht den Lesern exklusiv zur Verfügung - genau wie die vielen kostenlosen Komponenten wie etwa zur Bildbearbeitung, für den E-Mail-Versand oder zur Vereinfachung der Installation.

    Über die Autoren
    Dipl.-Ing. André Minhorst ist Macher des Magazins Access im Unternehmen und Webmaster von www.access-im-unternehmen.de. Er ist nicht nur als Fachautor, sondern auch als Software-Entwickler tätig. Sascha Trowitzsch ist freier Software-Entwickler und Autor und wurde 2007 von Microsoft zum MVP für Microsoft Office Access ernannt. Über das Grundlagenwerk zu diesem Buch Die perfekte Ergänzung zu diesem Buch ist Access 2007 - Das Grundlagenbuch für Entwickler. Es vermittelt die Techniken, die ein professioneller Access-Entwickler tagtäglich benötigt und lässt sich als Lehrbuch und auch als Nachschlagewerk einsetzen.

     

    Ändern Sie die SteuerelementTipText-Eigenschaft (engl. ControlTipText) während der Laufzeit, um aktuelle Informationen anzuzeigen.

    Steuerelement-Tipps erscheinen, wenn sich der Mauszeiger längere Zeit über einem Steuerelement befindet. Voraussetzung dafür ist lediglich, dass der betreffende Hinweis vorher als Text in die SteuerelementTipText-Eigenschaft des Steuerelements eingetragen wurde. Dieser Text kann bis zu 255 Zeichen lang sein, so dass auch umfangreichere Informationen möglich sind.

    Durch die Änderung dieser Eigenschaft während der Laufzeit können Sie beispielsweise zu einem Kunden zusätzliche Informationen wie die Telefonnummer oder dessen Wohnort anzeigen. Die folgende Ereignisprozedur ändert den Tip-Text einer Drucken-Schaltfläche, nachdem im Kombinationsfeld cmbKunden ein neuer Kunde ausgewählt wurde:

    Private Sub cmbKunden_AfterUpdate()

    Me![btnDrucken].ControlTipText = "'" _
    & cmbKunden & "' ausdrucken"

    End Sub

    Die Steuerelement-Tipps werden jetzt für jeden Kunden individuell angezeigt.
     

    Workshops, die Schritt für Schritt zeigen, wie's geht, erleichtern Ihnen den Umgang mit dem Datenbankprogramm. Zahlreiche Anwendungsbeispiele geben Ihnen konkrete Anregungen für die Praxis: von der Adressverwaltung über Kontoführung und Kassenbuch bis zu Bestellungen und Rechnungen mit Access 2003. Auch die neuen xml-Funktionen werden erklärt.

    Von Ignaz Schels; Markt + Technik (2003); Euro 16,95; ISBN: 3827265800

     

    Exportieren Sie den Bericht in diesem Fall im ASCII-Format.

    Voraussetzung dafür ist, daß Sie den zum Lieferumfang von Windows gehörenden Drucker Universal/Nur Text installieren:

    1. Wählen Sie den Menüpunkt Einstellungen>Drucker aus dem Start-Menü der Task-Leiste aus. 
    2. Klicken Sie doppelt auf das Symbol Neuer Drucker, um den Drucker-Assistenten zu starten 
    3. Installieren Sie den lokalen Druckertreiber Universal/Nur Text. 
    4. Wählen Sie den Anschluß "FILE: Erstellt eine Datei" .

    Dieser Druckertreiber gibt einen Bericht im normalen ASCII-Format aus. Grafische Elemente oder Schriftformatierungen gehen hierbei natürlich verloren.

    Wenn Sie den Ausdruck eines Bericht auf diesem Druckertreiber starten, fordert Sie Access automatisch zur Eingabe eines Dateinamens auf

     

    Beim Öffnen eines Formulars kann es schon einmal passieren, dass die zugrundeliegende Datenquelle keine Datensätze enthält.

    Um den Benutzer nicht zu verwirren, sollte in diesem Fall eine entsprechende Meldung angezeigt werden.

    Mit der folgenden Funktion können Sie feststellen, ob ein bestimmtes Formular einen Datensatz enthält. Wenn dies nicht der Fall ist, gibt die Funktion den Wert False zurück.

    Public Function EnthältDatensätze(EinFormular As Form) As Boolean

        Dim R As Recordset
        Set R = EinFormular.RecordsetClone
        If R.RecordCount = 0 Then
            EnthältDatensätze = False
        Else
            EnthältDatensätze = True
        End If

    End Function

    Der folgende Programmausschnitt zeigt eine Meldung an, wenn das Adressenformular keine Datensätze enthält:

    If Not EnthältDatensätze(Forms!Adressen) Then

    MsgBox("Es sind keine Adreßdatensätze vorhanden!")

    End If

     

    Mit FP excel2access gleichen Sie Ihre in Microsoft Excel kalkulierten Preise schnell, bequem und einfach mit den Preisen in einer Microsoft Access Datenbank, wie sie bei vielen Online-Shop Systemen eingesetzt wird, ab. Der Datenabgleich erfolgt anhand der identischen Artikelnummern.

    Aber auch andere Anwendungsmöglichkeiten beim Abgleich von Daten zwischen MS Excel und MS Access sind denkbar. Da Microsoft Excel die ideale Basis für die Kalkulation ist, legen Sie dort einfach eine Tabelle mit allen Artikelnummern aus der MS Access Datenbank Ihres Online-Shops an. Sie können nun die nahezu unendlichen Kalkulationsmöglichkeiten in Microsoft Excel nutzen und alle oder nur die geänderten Preise mit wenigen Mausklicks in die Microsoft Access Datenbank übernehmen.

     

    Bankleitzahlen deutscher Banken zeichnen sich vor allem durch zwei Eigenschaften aus: Sie bestehen aus 8 Ziffern und es gibt ein einheitliches Format zu ihrer Formatierung.

    Um Eingabefehler von vorneherein auszuschließen, definieren Sie für Bankleitzahlen einen Wertebereich und ein geeignetes Anzeigeformat.

    Da eine Bankleitzahl stets aus 8 Ziffern besteht, reicht ein Wertebereich von 10.000.000 bis 99.999.999. Geben Sie daher folgenden Ausdruck für die Eigenschaft Gültigkeitsregel ein:

    Zwischen 10.000.000 und 99.999.999

    Außerdem sollten Sie eine korrespondierende Gültigkeitsmeldung eingeben:

    Sie müssen 8 Ziffern als Bankleitzahl eingeben.

    Access zeigt die Gültigkeitsmeldung an, wenn die eingegebene Bankleitzahl die Gültigkeitsregel nicht erfüllt. Die Anzeige der Bankleitzahl erfolgt mit diesem Format:

    @@@ @@@ @@

    Die Eigenschaft Format wirkt sich nur bei der Anzeige der Bankleitzahl aus. Das bedeutet, dass der Anwender die Bankleitzahl ohne Leerzeichen eingeben muß. Erst bei der Anzeige erscheinen die für Bankleitzahlen üblichen Leerzeichen.

    Das Zeichen @ im Anzeigeformat ist in diesem Fall ein Platzhalter für ein beliebiges Zeichen oder auch ein Leerzeichen. Es wird eine Eingabe erwartet.

    Sie können die Einstellung der Eigenschaften Gültigkeitsregel, Gültigkeitsmeldung und Format alternativ im Tabellen- oder Formularentwurf vornehmen. Die Festlegung der Eigenschaften auf der Ebene des Tabellenentwurfs stellt jedoch sicher, dass die Gültigkeitsregel in allen neuen Formularen automatisch berücksichtigt wird.

     

    Sobald es in irgendeinem Datenfeld einer Adresse eine Änderung gibt (z.B. aufgrund eines Umzuges), möchte ich das Tagesdatum im Feld "Änderungsdatum" automatisch speichern. Die anderen Sätze, die nicht geändert worden sind, sollen ihr altes Datum behalten.

    Ist das möglich?

    In der Ereignisprozedur VorAktualisierung des Formulars können Sie das aktuelle Datum speichern:

    Private Sub Form_BeforeUpdate(Cancel As Integer)

        Me!Änderungsdatum = Now

    End Sub

    Die Funktion Now liefert das aktuelle Datum zurück. Die BeforeUpdate-Prozedur wird nur dann ausgeführt, wenn eine Änderung im aktuellen Datensatz durchgeführt wurde.

    Diese downloadbare Datei enthält die aktuellsten Microsoft Access 2002-Hilfedateien und ersetzt die bereits vorhandenen Dateien. 

    Normalerweise geben Sie die Feldnamen jedes Feldes beim Tabellenentwurf an. Wenn Sie aber beispielsweise eine Tabelle durch die Eingabe in ein leeres Datenblatt erzeugen, erhalten die Spaltenüberschrift Standardnamen wie Feld1, Feld2, usw. Diese Namen werden Sie in jedem Fall umbenennen. Sie brauchen dafür jedoch nicht in die Entwurfsansicht zu wechseln.

    Ändern Sie den Feldnamen eines Feldes im Datenblatt der Tabelle.

    Klicken Sie doppelt auf die Spaltenüberschrift, die Sie ändern möchten. Die Überschrift verwandelt sich in ein Eingabefeld. Geben Sie den neuen Feldnamen ein und schließen Sie mit der Eingabetaste ab.

     

    Sie haben noch nicht viel Erfahrung mit Datenbanken und wissen nicht genau, welche Felder Sie in Ihrer Datenbank benötigen oder was für Felder Sie noch zusätzlich in eine Tabelle einbringen könnten? In diesem Fall hilft Ihnen der Tabellenassistent weiter.

    Starten Sie den Tabellen-Assistenten, indem Sie im Datenbankfenster im Register Tabellen auf Neu klicken und im folgenden Dialog den Tabellen-Assistenen auswählen. Im ersten Dialog des Assistenten werden eine Vielzahl von verschiedenen Tabellen aus dem privaten und geschäftlichen Bereich vorgestellt. Zu jeder Tabelle sind wiederum etliche Beispielfelder vorhanden.

    Sie können in den Tabellen herumstöbern und sich dort entweder Anregungen für Ihre eigenen Tabellen holen oder auch eine Tabelle auswählen und diese mit dem Assistenten anpassen und erstellen.

     

    Die Möglichkeit zum Zugriff auf den Programmcode eines Moduls ist zur Entwicklung bestimmter Assistenten besonders wichtig. Leider stellt Access dafür keine passende Funktion zur Verfügung.

    Um trotzdem auf den Programmcode zuzugreifen, exportieren Sie ein beliebiges Modul in eine Textdatei und lesen Sie diese anschließend von VBA aus ein.

    Den Export bewerkstelligen Sie am einfachsten mit Hilfe der OutputTo-Aktion. Anschließend können Sie die Textdatei öffnen und den Programmcode einlesen.

    Die folgende Beispielprozedur gibt eine Liste aller Prozedurköpfe eines Moduls im Textfenster aus:

    Sub ProzedurlisteAusgeben(Modulname As String)

    Const Dateiname = "C:\MODUL.TXT"
    Dim Datei As Long
    Dim Zeile As String

    'Datei löschen, falls sie existiert
    If Dir(Dateiname) <> "" Then Kill Dateiname

    'Modul als Textdatei exportieren
    DoCmd.OutputTo acModule, Modulname, "MS-DOSText(*.txt)", Dateiname, False

    'Datei öffnen
    Datei = FreeFile
    Open Dateiname For Input As Datei

    Do While Not EOF(Datei)

    Line Input #Datei, Zeile

    If Left(Zeile, 3) = "Sub" Or Left(Zeile, 8) = "Function" Or _
    Left(Zeile, 11) = "Private Sub" Or _
    Left(Zeile, 16) = "Private Function" Or _
    Left(Zeile, 10) = "Public Sub" Or _
    Left(Zeile, 15) = "Public Function" Then
    Debug.Print Zeile

    End If
    Loop
    Close Datei

    End Sub

    Um die Module eines Formulars auszuwerten, geben Sie als Modulname den Text Form_ gefolgt vom Namen des Formulars an (z.B. Form_Adressen). Gleiches gilt für Berichte, bei deren Namen Sie allerdings den Text Report_ voranstellen müssen.

     

    Mehrspaltige Listenfelder sind gut zur Anzeige zusätzlicher Information geeignet. Sie können beispielsweise nicht nur einen Namen im Listenfeld zeigen, sondern auch gleich die zugehörige Telefonnummer.

    Ähnlich wie eine Tabelle kann auch ein Listenfeld nach einer beliebigen Spalte sortiert werden.

    Zur Anlage der Leiste gehen Sie folgendermaßen vor:

    Zur Sortierung werden Befehlsschaltflächen eingesetzt, die Sie als Spaltenüberschriften oberhalb des Listenfeldes platzieren. Bei einem Listenfeld mit den drei Spalten Nummer, Name und Kontaktperson könnten die Klick-Ereignisprozeduren folgenden Aufbau haben:

    Private Sub btnNummer_Click()

        Me![lstHersteller].RowSource = "Abfrage - nach Nummer"

    End Sub

    Private Sub btnName_Click()

        Me![lstHersteller].RowSource = "Abfrage - nach Namen"

    End Sub

    Private Sub btnKontaktperson_Click()

        Me![lstHersteller].RowSource = "Abfrage - nach Kontakt"

    End Sub

     

    Entwickeln und Optimieren komplexer Anwendungen.
    Von Said Baloui; Markt und Technik; DM 99,95 / Euro 51,10; ISBN: 3827252881

     

    Ein Service der TriniDat Software-Entwicklung GmbH - Am Wehrhahn 45 - 40211 Düsseldorf

      Suche
    Suche starten
      Service
    Leserbrief / Frage zu Access
    Kontakt
      NewsLetter
    NewLetter bestellen
    NewsLetter abbestellen
      Partner-Seiten
    HyperLink

    www.trinidat.de


    HyperLink

    www.fulldotnet.de