Ricavare nomi pensionandi

di il
4 risposte

Ricavare nomi pensionandi

Ciao a tutti.

Sicuramente è più facile di quello che penso, ma mi sto incartando.

Vorrei, da un elenco anagrafico, ricavare i nomi di chi andrà in pensione nei  5 (o altro) anni a venire, avendo come discriminante l'età pensionabile.

Quello che vorrei ottenere è un report in cui avere un elenco del genere (ad esempio diciamo che il limite di età pensionabile sia 50 anni):

Anno 2026

Tizio

Caio

Anno 2027

Sempronio

e così via fino al 2030.

Avevo pensato ad una query strutturata tipo:

SELECT [Cognome] FROM tblImpiegati WHERE DateDiff('yyyy',#12/31/2026#,[NatoIl])=50

Ovviamente non funziona (anche se in questo caso mi aspetterei di vedere elencati i soli nominativi di chi compie 50 anni nel 2026)

Suggerimenti?

Grazie

Andrea

4 Risposte

  • Re: Ricavare nomi pensionandi

    Quindi, allo scadere del 2030, avranno un'eta' compresa tra 50 e 55

    50 <= (2030/12/31 - data di nascita) <= 55

    oppure

    1975/01/01 <= data di nascita <= 1980/12/31

  • Re: Ricavare nomi pensionandi

    Credo di essermi espresso male.

    Il risultato che mi interesserebbe avere è un elenco dei 5 anni seguenti a quello in corso in cui il soggetto compirà 50 anni:

    2026

    Tizio (perchè compie 50 anni)

    Caio (perchè compie 50 anni)

    2027

    Sempronio (perchè compie 50 anni)

    2028

    nessuno compie 50 anni

    2029

    Mister X (perchè compie 50 anni)

    e così via.  Non chi compirà tra i 50 e i 55 anni, altrimenti ad esempio mi ritroverei Tizio presente in tutti e 5 gli anni

  • Re: Ricavare nomi pensionandi

    A mente fredda, dopo 1 macchinetta di caffe e un bel cornettone alla crema (alcune cose buone in ufficio esistono ancora) ho trovato una soluzione.

    A parte aver sbagliato l'rdine delle date nella funzione DateDiff (per cui l'eguaglianza 50 non sarebbe mai stata possibile in quanto si ottiene un valore negativo e non positivo), ho risolto con questo:

    For I = 1 To 5
        Anno = Year(Now) + I
        DataRif = "31/12/" & Anno
         Set Rst = CurrentDb.OpenRecordset("SELECT [Cognome] FROM tblImpiegati WHERE DateDiff(""yyyy"",[NatoIl]," & CLng(CDate(DataRif)) & ")=50")
        
        Debug.Print Anno
        
        With Rst
        
        	If Rst.RecordCount = 0 Then
            	Debug.Print "Nessuno"
            	GoTo ProssimoAnno
        	End If
    
            .MoveFirst
            Do Until .EOF
                    
                    Debug.Print !cognome
            
            .MoveNext
            Loop
        
    ProssimoAnno:
        End With
        
        Rst.Close
        Set Rst = Nothing
    
    Next I

    Non so se sia macchinosa o meno, ma almeno a debug ottengo i risultati che mi aspetto.

    Adesso ne devo ricavare un report; proverò, nel ciclo, a inserire in una tabella temporanea di appoggio i dati ottenuti e su quella basare il report

  • Re: Ricavare nomi pensionandi

    Tralasciando la struttura del codice, non capisco perché ricorrere al vba, quando è più che sufficiente utilizzare una semplice query.

Devi accedere o registrarti per scrivere nel forum
4 risposte