Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Kubus0815 am Januar 07, 2021, 13:38:41

Titel: Alter in Monaten berechnen
Beitrag von: Kubus0815 am Januar 07, 2021, 13:38:41
Hallo zusammen.

ich berechne anhand dieses Ausdrucks das Alter in Monaten meiner Tiere:

Alter: DatDiff("m";[GebDatum];Jetzt())

Leider rundet Access nun entgegen excel das Alter meiner Tiere auf.
Wie kann das verhindert werden.
Noch schöner wäre das Alter in Monaten und Tagen.
Kann mir da jemand weiterhelfen?

Schon mal Vielen Dank
Thomas
Titel: Re: Alter in Monaten berechnen
Beitrag von: HB9876 am Januar 07, 2021, 13:59:43
Hi,
mach das "d" fur days (tage) dazu.
Titel: Re: Alter in Monaten berechnen
Beitrag von: Kubus0815 am Januar 07, 2021, 14:02:26
Hallo,
kannst du mir das noch ein bisschen näher erläutern.
Wo machst du das "d" dazu.

Gruß Thomas
Titel: Re: Alter in Monaten berechnen
Beitrag von: DF6GL am Januar 07, 2021, 14:03:03
Hallo,

mach Dich hier mal schlau:  http://www.donkarl.com/?FAQ2.7   
Titel: Re: Alter in Monaten berechnen
Beitrag von: Kubus0815 am Januar 12, 2021, 14:03:43
Hallo nochmal.
Ich komme hier nicht so recht weiter.
Der Link auf donkarls Seite zum Microsoft Support funktioniert leider nicht mehr.
Ich denke ich habe es hier https://docs.microsoft.com/de-de/office/vba/access/concepts/date-time/calculate-age wiedergefunden.
Ich habe nun Code im VBA Editor unter (Allgemein) hinzugefügt und die Variable StartDate durch GebDatum aus meiner Abfrage ersetzt.
Public Function AgeMonths(ByVal GebDatum As String) As Integer
 Dim tAge As Double
 tAge = (DateDiff("m", GebDatum, Now))
 If (DatePart("d", GebDatum) > DatePart("d", Now)) Then
 tAge = tAge - 1
 End If
 
 If tAge < 0 Then
 tAge = tAge + 1
 End If
 
 AgeMonths = CInt(tAge Mod 12)
 
 End Function

Mit
VBA: AgeMonths([GebDatum]) wollte ich den Ausdruck starten, nun bekomme ich die Fehlermeldung
"Undefinierte Funktion AgeMonths in Ausdruck.

Ich hoffe meine Herangehensweise passt einigermaßen.

Schon mal Danke
Thomas
Titel: Re: Alter in Monaten berechnen
Beitrag von: ebs17 am Januar 12, 2021, 14:47:50
Zitateinigermaßen
... ist in der Auslegung sehr relativ ...

Du solltest Dich eingangs stärker mit Datentypen beschäftigen.
DateDiff erwartet als zweites und drittes Argument Date-Werte. GebDatum da als String anzuliefern ist schon ein grober Fehler.

Die Rückgabe von DateDiff ist faktisch wie auch aus der Definition heraus eine Ganzzahl. Warum soll da eine Double-Variable diese Rückgabe entgegennehmen?

Wenn Du dann syntaxfehlerfrei durchkommst, wirst Du doch selber beurteilen können, ob das Ergebnis Deinen Erwartungen entspricht.
Titel: Re: Alter in Monaten berechnen
Beitrag von: Kubus0815 am Januar 12, 2021, 15:07:30
Hallo Eberhard.
ZitatDateDiff erwartet als zweites und drittes Argument Date-Werte. GebDatum da als String anzuliefern ist schon ein grober Fehler.
Die Rückgabe von DateDiff ist faktisch wie auch aus der Definition heraus eine Ganzzahl. Warum soll da eine Double-Variable diese Rückgabe entgegennehmen?
Mir ist das auch schon komisch vorgekommen, so steht es aber in der Microsoft Support Vorlage und da ich nicht wirklich Ahnung habe....
Titel: Re: Alter in Monaten berechnen
Beitrag von: ebs17 am Januar 12, 2021, 15:19:24
... selbst bei seinem Gott sollte man ein gesundes Stück Restmissvertrauen haben ...
Titel: Re: Alter in Monaten berechnen
Beitrag von: Kubus0815 am Januar 13, 2021, 13:17:19
So jetzt kann ich zumindest die Monate richtig berechnen.
Ich habe ein Modul mit folgendem Code angelegt und rufe dieses in einem Ausdruck auf:

Function Age(GebDatum As Date) As Integer
   Dim varAge As Integer

varAge = DateDiff("m", GebDatum, Now)
  If Day(GebDatum) > Day(Now) Then
  varAge = varAge - 1
     
    End If
   Age = varage
End Function

Ich würde mir nun noch gerne in einem weiteren Ausdruck die Tage des Alters anzeigen lassen.
Ist der Tag des Geburtstags < als der Tag heute ist das ja noch einfach, dazu müsste ich nur beide Tage voneinander abziehen.
Wie macht mann das aber wenn das Ergebnis praktisch ins negative geht?
Titel: Re: Alter in Monaten berechnen
Beitrag von: ebs17 am Januar 13, 2021, 14:38:33
Idee:

Da Monate unterschiedlich viele Tage haben, ist dann eine zusätzliche Tagesberücksichtigung alles andere als mathematisch exakt. Da könnte man sich gleich insgesamt auf die Tagesdifferenz orientieren, das wäre dann wieder präzise. Überblicksweise könnte man für den Monat 30 Tage annehmen und sich also die Monats- + Tagesdarstellung herleiten aus einer Ganzzahlendivision:
Monate = Tagesdifferenz \ 30
Tage = Tagesdifferenz mod 30
Titel: Re: Alter in Monaten berechnen
Beitrag von: Kubus0815 am Januar 13, 2021, 17:55:13
So mit der Ganzzahldivision bekam ich sehr große Abweichungen.
Ich habe jetzt folgende Funktion erstellt:
Function Tage(GebDatum As Date) As Integer
   Dim varTage As Integer

varTage = Day(Now) - Day(GebDatum)
  If varTage < 0 Then
    varTage = 30 - (Day(GebDatum) - Day(Now))
    End If
   Tage = varTage
End Function

Damit nähere ich mich dem Ergebnis +-1Tag das reicht mir