PDA

Vollständige Version anzeigen : Runde Geburtstage und Jubiläum im Bericht ausgeben


tuana01
24.03.2006, 08:31
Hallo,
wer kann mir sagen wie ich, runde Geburtstage und Jubiläum in einem Bericht ausgeben kann. Meine Datenbank hat eine Tabelle "TAB_Mitgliederdaten" die Tabelle enthällt u.a. die Spalten "Geburtsdatum" und "Eintrittsdatum". Eigendlich würde mir in der Tabelle die Spalten "Alter" und "Mitgliedsjahre" ausreichen, wenn diese automatisch aktuell gehalten werden.
Ich bin blutiger Anfänger und benötige Eure Hilfe.

Thomas

Anne Berg
24.03.2006, 08:53
Berechnete Spalten speichert man nicht in der Tabelle ab (Aktualisierungsproblem!), sondern berechnet sie stets neu, z.B. in einer Abfrage, wenn man sie braucht.

Du musst also anhand des aktuellen Datums und des Geburtsdatums das Alter berechnen und kannst dies dann mit Hilfe von Mod-5 u. Mod-10 filtern.

tuana01
24.03.2006, 09:17
Hallo Anne,
wie gesagt ich bin Anfänger.
Wie berechne ich das Alter in einer Abfrage?
gruß
Thomas

Anne Berg
24.03.2006, 09:23
Die Frage ist eher "Wie berechne ich das Alter?"!

Es kommt darauf an, wie das Ergebnis aussehen soll. Wenn es dir genügt festzustellen, wer im laufenden Jahr einen runden (10-er) Geburtstag hat, kannst du Year(Date) - Year(gebdat) auswerten. Wenn es genauer sein soll, musst du Monat und Tag noch mit berücksichtigen. Das Ergebnis, also die Jahreszahl, kannst du mit "IF alter Mod 10 = 0" auf "rund" prüfen...

Beispiel einer Abfrage:
Select nachname, vorname, Year(Date) - Year(gebdat) As alter
From tbl_personen
Where (Year(Date) - Year(gebdat)) Mod 10 = 0;

tuana01
24.03.2006, 09:36
Hallo Anne,
vielen Dank für Deine Mühe, aber das sind leider alles bömische Dörfer für mich.
Ich habe keine Ahnung von VBA.
Kannst Du mir den Quelltext aufschreiben und mir schreiben was ich tun muss.

Gruß
Thomas

Anne Berg
24.03.2006, 10:08
Ich sprach von einer Abfrage, der Code ist SQL. ;)

Wähle im Datenbankfenster die Rubrik "Abfragen", klicke auf neu, Entwurfsmodus, wähle deine Tabelle aus, ziehe im Entwurfsfenster die gewünschten Datenfelder in die Spalten herunter und füge jeweils in eine freie Spalte folgendes ein:

Alter: Jahr(Datum()) - Jahr(Geburtsdatum)
Dauer: Jahr(Datum()) - Jahr(Eintrittsdatum)

In einer weiteren Spalte kannst du die Prüfung einfügen wie im Screenshot zu sehen ist.

Mit der Abfrage kannst du dann einen Bericht erstellen.

tuana01
24.03.2006, 10:54
Hallo Anne,
vielen Dank, hat super geklappt.
Kannst Du mir erklären was das "jub [alter]Mod 10 Kriterium =0" macht?
Es funktioniert auch ohne diesen Befehl.

vielen Dank
Thomas :)

Anne Berg
24.03.2006, 11:09
Wenn du nur die Jubilare (20, 30, 40, 50 Jahre etc.) haben möchtest, musst du die Datenauswahl entsprechend filtern. Die Anweisung x mod y teilt x durch y und gibt dir den Rest (im mathematischen Sinne ;)). Ist dieser 0, so hat das Mitglied einen "runden" Geburtstag. Und das war doch deine ursprüngliche Frage. :cool:

tuana01
24.03.2006, 11:38
Das ist richtig!
Ich habe als Kriterium =10, =20, =25 usw. Eingegeben dann gibt er mir auch nur diese aus, oder gibt es hierbei einen Nachteil?

gruß
Thomas

Anne Berg
24.03.2006, 11:58
Der Nachteil ist, dass du alle Werte, die du berücksichtigt haben willst, einzeln eingeben musst. ;)

tuana01
24.03.2006, 12:23
Damit lebe ich ;-)
vielen vielen Dank
Thomas

Keks ina Dosn
04.07.2006, 11:15
hallo anne,

interessanter Beitrag.

allerdings funktioniert bei mir irgendwie der jub: [alter] Mod 10 mit Kriterium =0 nicht

da kommt bei mir die Meldung: Parameterwerte eingeben (bei Alter)

lasse ich das Kriterium 0 weg, funktioniert es und es wird auch ausgerechnet (natürlich werden dann alle Werte angezeigt, nicht nur 0)

komisch...oder?

Anne Berg
04.07.2006, 12:07
Hast Recht, das funktioniert nicht - keine Ahnung wieso ich das ungetestet vorschlagen konnte! :confused:

Es liegt in der Where-Klausel, die da erzeugt wird. Aber auch "Where ((Year(Date)-Year(gebdat)) mod 10) = 0" geht nicht! :eek:

Die Lösung könnte wohl nur in einer weiteren Abfrage liegen, die das Ergebnis filtert...

Arne Dieckmann
04.07.2006, 12:14
Mit
Where ((Year(Date())-Year(gebdat)) mod 10) = 0
funktioniert's bei mir.


@Keks ina Dosn: Zeige einmal die SQL-Ansicht deiner Abfrage - dann kann man mehr sagen, warum es bei dir hapert. Statt [alter] einzusetzen, musst du evtl. die Berechnung bei "jub" wiederholen.

Anne Berg
04.07.2006, 13:28
Stimmt - Danke Arne. Die Klammer bei Date hatte ich zwar, aber eine andere stand falsch, so dass das Mod 10 nicht richtig angewandt wurde. ;)

... kein Wunder, bei der Hitze rutschen einem ja die nassen Finger von den Tasten! :entsetzt: