Herzlichen Glückwunsch (Access 97, 2000)

22.12.2003

Access erinnert Sie rechtzeitig über anstehende Geburtstage.

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.

 

Herzlichen Glückwunsch (Access 97, 2000)

Dienstleistungen

Als starker Partner an Ihrer Seite unterstützen wir Sie in folgenden Breichen:

Access-Programmierung

Benötigen Sie Unterstützung bei der Programmierung von Access-Anwendungen? Wir bieten die gesamte Bandbreite von der Access-Programmierung auf Stundenbasis bis zur Durchführung eines Software-Projektes als Auftragsarbeit an. Kontaktieren Sie uns für ein kostenloses Erstgespräch.

Software-Beratung

Haben Sie ein Software-Projekt und Sie wissen nicht, ob Access die richtige Plattform ist? Wir haben über 20 Jahre Erfahrung beim Erstellen von Windows-, Web und mobilen Anwendungen. Kontaktieren Sie uns für eine kostenlose Erstberatung.