Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   Ευρεση ηλικιας σε συγκεκριμμένη χρονική περίοδο (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/5709-eyresi-ilikias-se-sygkekrimmeni-xroniki-periodo.html)

γιώργοςΚ 23-11-20 20:07

Ευρεση ηλικιας σε συγκεκριμμένη χρονική περίοδο
 
Καλησπέρα,

Πως μπορώ να υπολογίσω την ηλικία που ήταν κάποιος σε μια προηγούμενη περίοδο. Δηλαδή,

Ημερομηνία Γέννησης: 01/01/2000
Καταχώρηση: 01/01/2010

Θα πρέπει να δώσει αποτέλεσμα 10ετών...

Ευχαριστω πολύ

pctechdr 23-11-20 23:20

Function fAge(dteStart As Variant, dteEnd As Variant) As Variant
'*******************************************
'Purpose: Accurately return the difference
' between two dates, expressed as
' years.months.days
'Coded by: raskew (from MS Access forum)
'Inputs: From debug (immediate) window
' 1) ? fAge(#12/1/1950#, #8/31/2006#) 'Calculate btw 2 specific dates
' 2) ? fAge(#12/30/2005#, Date()) ' Calculate as of today's date
'*******************************************
Dim intHold As Integer
Dim dayhold As Integer

'correctly return number of whole months difference
'the (Day(dteEnd) < Day(dteStart)) is a Boolean statement
'that returns -1 if true, 0 if false
intHold = DateDiff("m", dteStart, dteEnd) + (Day(dteEnd) < Day(dteStart))

'correctly return number of days difference
If Day(dteEnd) < Day(dteStart) Then
dayhold = DateDiff("d", dteStart, DateSerial(Year(dteStart), Month(dteStart) + 1, 0)) + Day(dteEnd)
Else
dayhold = Day(dteEnd) - Day(dteStart)
End If

fAge = LTrim(Str(intHold \ 12)) & " years " & LTrim(Str(intHold Mod 12)) & " months " & LTrim(Str(dayhold)) & " days"

End Function

γιώργοςΚ 24-11-20 12:24

Παράθεση:

Αρχική Δημοσίευση από pctechdr (Μήνυμα 31764)
Function fAge(dteStart As Variant, dteEnd As Variant) As Variant
'*******************************************
'Purpose: Accurately return the difference
' between two dates, expressed as
' years.months.days
'Coded by: raskew (from MS Access forum)
'Inputs: From debug (immediate) window
' 1) ? fAge(#12/1/1950#, #8/31/2006#) 'Calculate btw 2 specific dates
' 2) ? fAge(#12/30/2005#, Date()) ' Calculate as of today's date
'*******************************************
Dim intHold As Integer
Dim dayhold As Integer

'correctly return number of whole months difference
'the (Day(dteEnd) < Day(dteStart)) is a Boolean statement
'that returns -1 if true, 0 if false
intHold = DateDiff("m", dteStart, dteEnd) + (Day(dteEnd) < Day(dteStart))

'correctly return number of days difference
If Day(dteEnd) < Day(dteStart) Then
dayhold = DateDiff("d", dteStart, DateSerial(Year(dteStart), Month(dteStart) + 1, 0)) + Day(dteEnd)
Else
dayhold = Day(dteEnd) - Day(dteStart)
End If

fAge = LTrim(Str(intHold \ 12)) & " years " & LTrim(Str(intHold Mod 12)) & " months " & LTrim(Str(dayhold)) & " days"

End Function

Χρίστο γεία σου,

Πρώτα από όλα σε ευχαριστω για την λϋση που πρωτείνεις. Ωστόσο, θα ήθελα μια πιο απευθείας λύση μέσα απο ερώτημα αν ειναι δυνατό....

Σε ευχαριστω

pctechdr 24-11-20 12:38

Μπορείς να χρησιμοποιήσεις μέσα στο ερώτημα την συνάρτηση που είναι το πρόβλημα?

Κάνε επικόλληση τον κώδικα που σου έδωσα σε ένα module και μετά μέσα στο ερώτημα γράψε πχ Expr1: fAge([StartDate];[EndDate])

pctechdr 24-11-20 12:48

1 Συνημμένο(α)
Συνημμένο Αρχείο 11257

Πάρε ένα παράδειγμα

γιώργοςΚ 24-11-20 17:21

Παράθεση:

Αρχική Δημοσίευση από pctechdr (Μήνυμα 31771)
Συνημμένο Αρχείο 11257

Πάρε ένα παράδειγμα

Χριστο καλησπερα και ευχαριστω ξανά για την πρόθεση να βοηθησεις, Το αποτέλεσμα που επιζητώ να λάβω πρέπει να ειναι Number format, Double , Fixed και decimals 2... η λύση που πρωτείνεις δίνει αποτέλεσμα κειμένου. Υπάρχει καμια περίπτωση μετατροπης ?

Ευχαριστω ξανά

pctechdr 25-11-20 07:39

Καλημέρα.
Ερώτηση: Θελεις δλδ μόνο τα χρόνια και όχι Μήνες και μέρες ή θέλεις μόνο μέρες?

γιώργοςΚ 25-11-20 10:14

Παράθεση:

Αρχική Δημοσίευση από pctechdr (Μήνυμα 31777)
Καλημέρα.
Ερώτηση: Θελεις δλδ μόνο τα χρόνια και όχι Μήνες και μέρες ή θέλεις μόνο μέρες?

Χρίστο καλημέρα,

Ειναι απαραίτητος ο υπολογισμός με ακρίβεια σε αριθμό,
Χρόνια, Μήνες, Μέρες

Ειναι σημαντικό αυτό να προκύπτει απευθείας μέσα απο ερώτημα (δεν εχω θέμα αν είναι μέσο vba Ρουτίνας φτάνει να μπεί σε ερώτημα μέσα)

Ευχαριστω πολυ

pctechdr 25-11-20 10:25

Και πώς θέλεις τότε το αποτέλεσμα σε Number format, Double , Fixed και decimals 2 ??

Κάτι δεν κολλάει εδώ :)

Αν θέλεις Χρόνια,Μήνες και μέρες που είναι και το σωστό πώς θέλεις το αποτέλεσμα σε ένα πεδίο που είναι αριθμός? Μπορούμε να σβήσουμε τα σχόλια του τύπου χρόνια, μήνες και μέρες αλλά και πάλι το αποτέλεσμα θα είναι κάπως έτσι 10 8 22 εκτός και αν σε βολεύει το 10822 σαν αριθμός. Δεν μπορώ να καταλάβω την λογική σου αν θέλεις γίνε λίγο πιο συγκεκριμένος

γιώργοςΚ 25-11-20 13:05

Παράθεση:

Αρχική Δημοσίευση από pctechdr (Μήνυμα 31781)
Και πώς θέλεις τότε το αποτέλεσμα σε Number format, Double , Fixed και decimals 2 ??

Κάτι δεν κολλάει εδώ :)

Αν θέλεις Χρόνια,Μήνες και μέρες που είναι και το σωστό πώς θέλεις το αποτέλεσμα σε ένα πεδίο που είναι αριθμός? Μπορούμε να σβήσουμε τα σχόλια του τύπου χρόνια, μήνες και μέρες αλλά και πάλι το αποτέλεσμα θα είναι κάπως έτσι 10 8 22 εκτός και αν σε βολεύει το 10822 σαν αριθμός. Δεν μπορώ να καταλάβω την λογική σου αν θέλεις γίνε λίγο πιο συγκεκριμένος

Χρίστο, για τη ηλικία 10 ετών, 3μηνων και 22 ημερών πρέπει να λαμβάνω 10,04 διότι οι 22 μέρες είναι σχεδόν ένας μήνας. Αν ήταν για παράδειγμα 10 μέρες θα πρέπει να έχουμε 10,03

pctechdr 25-11-20 14:24

Τότε εγώ θα το έκανα ως εξής: Θα υπολόγιζα με την συνάρτηση DateDiff την διαφορά σε ΜΕΡΕΣ και μετά θα τις έκανα χρόνια. ΠΧ
DateDiff("d", #17/11/1976#, #19/12/2020#,vbUseSystemDayOfWeek ,vbFirstJan1)/365 επιστρέφει 44,11
Μια ιδέα.

γιώργοςΚ 25-11-20 15:07

Παράθεση:

Αρχική Δημοσίευση από pctechdr (Μήνυμα 31783)
Τότε εγώ θα το έκανα ως εξής: Θα υπολόγιζα με την συνάρτηση DateDiff την διαφορά σε ΜΕΡΕΣ και μετά θα τις έκανα χρόνια. ΠΧ
DateDiff("d", #17/11/1976#, #19/12/2020#,vbUseSystemDayOfWeek ,vbFirstJan1)/365 επιστρέφει 44,11
Μια ιδέα.

Φαντάζπμαι το vbUseSystemDayOfWeek και το vbFirstJan προερχόμενο απο την ρουτίνα vba, σωστά?


Η ώρα είναι 00:42.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2