Ciao a tutti.
Oggi ho aggiunto una funzione di calcolo scadenze ad un mio DB. L'aggiunta è stata semplicemente una casella di testo in una maschera; quando viene richiamato un record, esegue la funzione (che riporto sotto) in cui viene richiesta la data di inizio (nel caso specifico, quella odierna) e la data di fine (che viene calcolato con un DateAdd riprendendo un valore da una tabella)
Function CalcolaScadenza(dDateOfBirth As Date, dDateReference As Date) As String
Dim iDays As Integer
Dim iMonths As Integer
Dim iYears As Integer
Dim iDaysInMonth As Integer
'Dim dDateOfBirth As Date
'Dim dDateReference As Date
iDaysInMonth = DateSerial(Year(dDateOfBirth), Month(dDateOfBirth) + 1, 1) - DateSerial(Year(dDateOfBirth), Month(dDateOfBirth), 1)
iYears = DatePart("yyyy", dDateReference) - DatePart("yyyy", dDateOfBirth)
iMonths = DatePart("m", dDateReference) - DatePart("m", dDateOfBirth)
iDays = DatePart("d", dDateReference) - DatePart("d", dDateOfBirth)
If iDays < 0 Then
iMonths = iMonths - 1
iDays = iDaysInMonth + iDays
End If
If iMonths < 0 Then
iYears = iYears - 1
iMonths = 12 + iMonths
End If
Debug.Print iYears
Debug.Print iMonths
Debug.Print iDays
CalcolaScadenza = iYears & " anni " & iMonths & " mesi " & iDays & " giorni"
End Function
La funzione l'avevo trovata in rete tempo fa (la uso anche in altri DB senza problemi)
dDateOfBirth = data odierna
dDateReference = calcolata con un DateAdd("yyyy", valore-preso-da-una-tabella, Data di riferimento)
Il problema quale è?
Se lancio il DB e richiamo un record, mi va in debug (senza nessun messaggio di errore) evidenziandomi la riga
iDaysInMonth = DateSerial(Year(dDateOfBirth), Month(dDateOfBirth) + 1, 1) - DateSerial(Year(dDateOfBirth), Month(dDateOfBirth), 1)
Se premo F8 fino alla fine della funzione, nella casella di testo mi viene visualizzato regolarmente il risultato della funzione.
Se quindi richiamo un altro record, tutto fila liscio senza interruzioni.
In pratica mi succede ad ogni aperturta del DB e al primo record richiamato, ma dal secondo in poi non succede nulla.
Opinioni?
Grazie
Andrea