Mese scorso predefinito

di il
9 risposte

Mese scorso predefinito

Salve, in un db access ho un campo mese: GENNAIO, FEBBRAIO ECC....vorrei fare in modo che durante l'inserimenro dati il campo mese sia predefinito come mese precedente, cioè ora siamo a SETTEMBRE e predefinito dovrebbe essere AGOSTO.

9 Risposte

  • Re: Mese scorso predefinito

    Usa le Funzioni di manipolazione date nel tuo caso DateAdd o DateDiff sulla data odierna, quindi prendi solo il Mese... Una cosa simile:
    Month(DateAdd("m";-1;Now())
  • Re: Mese scorso predefinito

    Salve.
    Io ho fatto una prova mettendo la seguente espressione nella proprietà: 'valore predefinito':
    Se in una TexBox in una maschera:
    MonthName(Month(Now())-1)

    se direttamente nella Tabella:
    =MonthName(Month(Now())-1)

    Se lo vuoi maiuscolo, aggiungi:
    UCase(MonthName(Month(Now())-1))
    Saluti.
  • Re: Mese scorso predefinito

    Hai provato se funziona a Gennaio...?

    Month(#01/01/2012#)=1

    Se sottrai 1 come fosse un normale Numero... ottieni ZERO e la funzione MonthName restituisce errore, ma il mese prima di Gennaio è Dicembre=12...

    Il motivo per il quale nelle manipolazioni delle Date è bene usare le Funzioni sulle date è proprio questo...
  • Re: Mese scorso predefinito

    Chiedo perdono...

    Hai ragione...
    '...proprio non c'ho pensato...'
    Che pivellino...
    Ritiro tutto...e ascolta il buon Alex...
  • Re: Mese scorso predefinito

    Ehehehe... è solo questione di CALLO... che viene sbagliando molte volte sulle stesse cose...
  • Re: Mese scorso predefinito

    Scusate, Alex e Luciano;
    A kontos02 avevo suggerito a suo tempo la seguente soluzione; ma,non sapendo se questa fosse da considerare un campo calcolato, e non volendo creare confusione agli altri Utenti del Forum, ho preferito rispondere privatamente.

    Considerando di avere un campo [Data] e un Campo [Mese_calcolato]
    
    Private Sub Data_AfterUpdate()
    If Month([Data]) = 1 Then [Mese_calcolato] = "DICEMBRE"
    If Month([Data]) = 2 Then [Mese_calcolato] = "GENNAIO"
    If Month([Data]) = 3 Then [Mese_calcolato] = "FEBBRAIO"
    If Month([Data]) = 4 Then [Mese_calcolato] = "MARZO"
    If Month([Data]) = 5 Then [Mese_calcolato] = "APRILE"
    If Month([Data]) = 6 Then [Mese_calcolato] = "MAGGIO"
    If Month([Data]) = 7 Then [Mese_calcolato] = "GIUGNO"
    If Month([Data]) = 8 Then [Mese_calcolato] = "LUGLIO"
    If Month([Data]) = 9 Then [Mese_calcolato] = "AGOSTO"
    If Month([Data]) = 10 Then [Mese_calcolato] = "SETTEMBRE"
    If Month([Data]) = 11 Then [Mese_calcolato] = "OTTOBRE"
    If Month([Data]) = 12 Then [Mese_calcolato] = "NOVEMBRE"
    End Sub
    
    La mia domanda a Te e a Luciano è la seguente: questa soluzione può essere accettabile nella logica dei DB oppure è da considerarsi un campo calcolato?

    Grazie per l'attenzione che potrete dedicarmi.

    Cordiali saluti e buona serata.

    Giuseppe
  • Re: Mese scorso predefinito

    Direi che sia da considerare ovviamente un Calcolato(campo è se lo esegui nella Query, Controllo se nella Form...), ma di per se non sarebbe un problema.

    La soluzione che hai proposto tuttavia è da evitare... prova a sostituirla con questa
    
    Me![Mese_calcolato].Value=Ucase(Format(Data,"mmmm"))
    Mi pare che restituisca lo stesso risultato con solo 1 riga... se non ho frainteso la tua richiesta.

    Funziona con la medesima sintassi anche in SQL.
  • Re: Mese scorso predefinito

    Grazie della risposta, Alex;
    Mi pare però che con il codice:
    
    Me![Mese_calcolato].Value=Ucase(Format(Data,"mmmm"))
    
    il mese reso sia quello della [Data], mentre la richiesta dell'Utente è quella di avere il mese precedente.

    In realtà, escludendo le soluzioni:
    1) ElseIf
    2) Select Case

    una soluzione analoga del tipo:
    
    Option Compare Database
    Dim Mth As Byte
    
    Private Sub Data_AfterUpdate()
    Mth = Month([Data]) - 1
    If Mth = 0 Then Mth = 12
    [Mese_calcolato] = UCase(Format(DateValue(Day([Data]) & " " & (Mth) & " " & Year([Data])), "mmmm"))
    End Sub
    
    mi pare risolva; rimane comunque il problema del campo calcolato.

    In ogni caso grazie di avermi chiarito il concetto di Controllo all'interno del Form; era quello che mi interessava approfondire.

    Buon fine settimana.
  • Re: Mese scorso predefinito

    Giuseppe, ho risposto con un'esempio... ovviamente la DATA in questione è quella con DETRAZIONE -1 del mese... non mi pareva difficile ma come spiegato prima, e forse non ben compreso, fare Month(-1) non va bene... GENNAIO è Mese=1 se sottrai 1 ottieni ZERO che non è un mese e tocca gestirlo...

    Questo è l'unico codice corretto con solo 1 riga... che peraltro non serve nemmeno inserire in VBE...
    
    Me![Mese_Calcolato].Value=Ucase(Format$(DateAdd("m",-1,[CampoData],"mmmm"))
    si può mettere come ORIGINE CONTROLLO senza aggiungere nulla...

    OrigineControllo ------> "=UCase(Format$(DateAdd("m";-1;[Data]);"mmmm"))"
Devi accedere o registrarti per scrivere nel forum
9 risposte