PDA

Vollständige Version anzeigen : Altersklassen durch Abfrage ermitteln


Franz Rührnößl
10.08.2001, 20:19
Ich habe eine Tabelle in ACC2000, in der Hunderte Namen von Spielern mit ihrem Geburtsdatum(Gebdat)vorhanden sind. Ich möchte nun mit einer Abfrage allen diesen Spielern ihre Alterklasse, die definiert ist, zuweisen. Ich habe das mit einem berechneten Feld zwar irgendwie hingebracht, aber solche Abfragen dauern endlos lange. Und ein weiteres Problem ist, dass sich die Alterklassendefinition natürlich jedes jahr um ein Jahr verschiebt. Kann man da ein gute Lösung mit VBA finden?
Zu den Altersklassen, insg. sind es 8. Hier nur 2 Beispiele: Zwischen 1.8.1983 und 31.7.1985 fällt man heuer in die Altersklasse "Jugend A", zwischen 31.7.1983 und 1.1.1971 gehört man in die Altersklasse "Allg". Nächstes Jahr verschiebt es sich dann bei der "Jugend A" auf 1.8.1984 - 31.7.1986 und bei "Allg" auf 31.7.1984-1.1.1972.

Wie könnte eine VBA-Lösung für meine Altersklassen aussehen, die für weitere Aktionen immens wichtig sind??

Danke im Voraus,

Franz

kama
11.08.2001, 09:13
Hallo franz
Da bis jetzt noch keine lösung eingetroffen ist will ich es mal versuchen

1) Nehme zur Klassenbestimmung nicht das Datum des bereichs sondern das Alter der Spieler
Erstelle eine Abfrage mit den stammdaten und dem zusätzlichen Feld
Alter:DatDiff("jjjj";[Geburtsdatum];Datum())+
(Format(Datum();"mmtt")<Format([Geburtsdatum];"mmtt"))


2)Erstelle ein formular auf der Basis dieser Abfrage
Füge ein ungebundenes feld mit dem Namen
SpielerKlasse hinzu

Private Sub Form_Current()
Select Case ME![Alter]

Case 16 To 18 ' Alter von 16 bis 18.
me![SpielerKlasse]="Jugend A"

Case >18 ' Alter von >18.
me![SpielerKlasse]="Allgemein"

USW.

End selcet

End Sub


Ich hoffe das klappt

Du kannst es aber auch direkt in der Abfrage machen bist aber auf 8 Klassen beschränkt
Erstelle eine neue Anfrage auf der Basis der Abfrage mit altersbestimmumng
Füge dann deiner Abfrage ein Feld
SpielerKlassen:Schalter(Me!Alter=> 16 and Me!Alter=<18;"Jugend A";Me!Alter>18"Allgemein;Bedingung;EReignis USW)

Dann steht dir dieses Feld überall zur Verfügung
Die gnze sache ist nicht überprüft sollte
aber Funktionieren (zumindest vom denkansatz)
Hilfe zu den Funktion >>ONlnehilfe
Dein Problem mit der jährlichen Änderung solltest du damit auch gelöst haben

Scorefun
11.08.2001, 09:44
Tach zusammen,

hab auch mal was gebastelt und in den Downloadbereich eine beispiel-DB reingesetzt.

Vielleicht hilft's was.

Franz Rührnößl
11.08.2001, 10:01
Danke, Kama, für deinen Beitrag. So kann es funktionieren, es gibt mit dem Alter jedoch ein Problem: Die Jugendklassen sind nicht am Kalenderjahr orientiert, sondern mit Stichtag 1. Juli! So gibt es den Fall, dass ein 16Jähriger der vor dem Stichtag Geburtstag hat, der Klasse "Jugend B" angehört, einer mit Geburtstag nach dem Stichtag noch in der Klasse "Jugend C" spielberechtigt ist.
Das verkompliziert leider die Sache - daher bin ich mir nicht sicher, ob man mit dem Alter über die Runden kommt oder nicht doch mit dem Gebdat arbeiten muss.

Danke, Franz

kama
11.08.2001, 10:12
Das ist die Richtige formel zur Altersberechnung
DatDiff("jjjj";[Geburtsdatum];Datum())+
(Format(Datum();"mmtt")<Format([Geburtsdatum];"mmtt"))
, kleiner Fehler von mir.


Hier wird wohl auch deine Stichtag problematik zu lösen sein ich weiß bloß noch nicht wie aber wenn mir was einfällt melde ich mich sofort
Im übrigen sollte der Lösungsansatz auch mit direkten Datumsfelder realisierbar sein
z.B.
Private Sub Form_Current()
Select Case ME![GebDatum]

Case Datum1 To Datum2 ' Alter von 16 bis 18.
me![SpielerKlasse]="Jugend A"

Case >Datum3 ' Alter von >18.
me![SpielerKlasse]="Allgemein"

USW.

End selcet

End Sub
Zur Altersbestimmung eventuell:
DatDiff("jjjj";[Geburtsdatum];Datum())+
(Format(Datum();"mmtt")<"0701"))
Aber ohne Garantie, weil die längere Beschäftigung mit Datumsberechnungen bei mir zur Gehirnerweichung führt.
Schau dir unbedingt die Lösung von scorefun an, sie erschließt sich mir nicht so ganz aber scheint hervorragend zu klappen.
(Siehe vorherigen Satz)


Viel Glück

Mad
11.08.2001, 10:39
Hallo Franz,
wenn du schreibst, dass die Abfragen bei 100en Spielern lange dauern wäre es vielleicht ausnahmsweise sinnvoll, die ermittelte Altesklasse in einem Tabellenfeld beim Spieler zu speichern.
Du müsstest die Altersklassenermittlungsabfrage als Aktualisierungsabfrage einrichten, einmal im Jahr starten (wenn ich es richtig verstanden habe) und hättest für ein ganzes Jahr die richtige Einteilung.
Gruß, Dietmar

Franz Rührnößl
11.08.2001, 11:24
Danke, Scorefun! Was du "gebastelt" hast, ist genau das, was ich brauche. Genial!

Franz