Data, giorno che si ferma alla fine del mese.

di il
14 risposte

Data, giorno che si ferma alla fine del mese.

Ciao a tutti, sto cercando di farmi un programmino per calcolare le fasi lunari e ho un problema (anzi ne avrei due....).... Ma uno alla volta
Inserisco l' anno in una casella di testo.
Inserisco il mese in un altra casella di testo
Inserisco il giorno in un altra casella di testo.
Avendo messo un pulsante che mi imposta i calcoli anche per il giorno successivo (e uno per il precedente), vorrei che ad esempio al 31 di marzo si fermasse la numerazione, perchè adesso sono nella condizione che cliccando su giorno successivo mi dà 32,33,34,35, ecc.
Insomma vorrei collegare quel numero al mese scelto.
Qualcuno riesce a darmi una mano?

14 Risposte

  • Re: Data, giorno che si ferma alla fine del mese.

    Filippo70 ha scritto:


    sto cercando di farmi un programmino per calcolare le fasi lunari
    Non voglio dire una cosa assurda o esagerata...potrei sbagliarmi. Pare che @Alex, nel calcolare i giorni festivi in un anno, aveva bisogno di ricavare anche la domenica di Pasqua. Essendo questa legata all'equinozio di primavera e la luna piena (ora i dettagli non li so), aveva bisogno di ricostruire parte dell'espressione anche in base a parametri lunari...
    Dovrebbe essere questo:

    ...mah...non lo so...ho provato a rileggere un modulo che calcola il giorno di Pasqua, ma non ho capito se ci sono riferimenti a fasi lunari.

    Filippo70 ha scritto:


    Inserisco l' anno in una casella di testo.
    Inserisco il mese in un altra casella di testo
    Inserisco il giorno in un altra casella di testo.
    Sei convinto che conviene inserire i dati così? Non ti conviene inserire direttamente una data? Le versioni da Access 2007 in poi permettono di avere un piccolo calendario vicino alla casella di testo da selezionare facilmente.
  • Re: Data, giorno che si ferma alla fine del mese.

    Filippo70 ha scritto:


    ...
    Avendo messo un pulsante che mi imposta i calcoli anche per il giorno successivo (e uno per il precedente), vorrei che ad esempio al 31 di marzo si fermasse la numerazione, perchè adesso sono nella condizione che cliccando su giorno successivo mi dà 32,33,34,35, ecc....
    Non ho capito bene come funziona il giorno successivo e il giorno precedente...
    Vado di "concetti generali":
    1) se usi DateAdd, mettendo come numero di giorni da aggiungere rispettivamente +1 e -1 vai al giorno successivo e al giorno precedente che esistono veramente.
    2)se vuoi trovare l'ultimo giorno del mese, fa' riferimento a quanto scritto qui http://www.accessgroup.it/sitocomune/general/general004.html
  • Re: Data, giorno che si ferma alla fine del mese.

    Filippo70 ha scritto:


    sto cercando di farmi un programmino per calcolare le fasi lunari
    Non vorrei andare fuori forum, ma cercando su Google "Calcolare le fasi lunari", avrei trovato questi:
    http://www.dossier.net/utilities/fasi_lunari
    http://www.marcomenichelli.it/fasilunari.as
    http://www.numerando.it/pg_fasi_lunari.asp#anchor_fasi_lunari
  • Re: Data, giorno che si ferma alla fine del mese.

    Si, il risultato del mio programmino è simile a quelli dei post di Osvaldo. Tuttavia, il mio problema non è quello di calcolare le fasi lunari (sono due calcoli in croce), è che volevo provare a "smanettare" un pò con access e farmela calcolare da lui.
    Probabilmente sarebbe più semplice (per uno che ne sa un pò di VBA) inserire la data per intero in un unico campo,ma poi i calcoli in base a una data non saprei come farli.... (però anche gli esempi che mi hai postato sono impostati come il mio, con i campi, anno, mese e giorno separati).

    Phil, il mio pulsante [GORNO SUCCESSIVO] è semplicemente:
    Private Sub Comando7_Click()
      Me.giorno = Me.giorno + 1
    .....tralasciando il resto per non scandalizzare nessuno....
    In pratica mi rifà tutto il calcolo in base al giorno successivo (se prima in numero da utilizzare era 30, poi rifà il calcolo con 31)
    Il problema è che se clikko ancora me lo fa con 32, 33, ecc.
    Valgono sempre i tuoi "concetti generali"?
    Almeno per sbattere la testa contro il muro e non contro gli spigoli.....
  • Re: Data, giorno che si ferma alla fine del mese.

    Filippo70 ha scritto:


    è che volevo provare a "smanettare" un pò con access e farmela calcolare da lui
    OK. Per me vuol dire che stai provando varie soluzioni su come limitare i valori dei dati. Però personalmente non mi giocherei il confronto fra il singolo numero 31--->32, perchè per febbraio 28--->29 (se non è bisestile) e tutti i mesi di 30, come te la cavi? Eppure i valori 29-30-31 li devi prendere ugualmente in considerazione...bla bla bla...renditi conto che è la DATA quella che conta.

    Filippo70 ha scritto:


    Probabilmente sarebbe più semplice (per uno che ne sa un pò di VBA) inserire la data per intero in un unico campo, ma poi i calcoli in base a una data non saprei come farli....
    https://support.office.com/it-it/article/Esempi-di-criteri-di-query-3197228c-8684-4552-ac03-aba746fb29d8

    Filippo70 ha scritto:


    però anche gli esempi che mi hai postato sono impostati come il mio, con i campi, anno, mese e giorno separati.
    Se vuoi partire da qui, visto che stai giocando con Access, ci sarebbero molte soluzioni, dalle più eleganti alle più povere e spartane. Direi che in ogni caso, una volta digitati i 3 valori (giorno/mese/anno), dovresti comunque mettere in moto un meccanismo (macro, codice VBA o espressione in un campo di maschera) che riunisca questi 3 valori in un solo campo di tipo Data.
    Dopo aver fatto questa operazione, tratti il campo Data in uno dei tanti modi suggeriti dal link precedente.
  • Re: Data, giorno che si ferma alla fine del mese.

    Filippo70 ha scritto:


    Phil, il mio pulsante [GORNO SUCCESSIVO] è semplicemente:
    Private Sub Comando7_Click()
      Me.giorno = Me.giorno + 1
    .....tralasciando il resto per non scandalizzare nessuno....
    In pratica mi rifà tutto il calcolo in base al giorno successivo (se prima in numero da utilizzare era 30, poi rifà il calcolo con 31)
    Il problema è che se clikko ancora me lo fa con 32, 33, ecc.
    Valgono sempre i tuoi "concetti generali"?
    I concetti generali valgono sempre, per questo sono generali. Non so fino a che punto può servirti quello dell'ultimo giorno del mese.
    Studia le funzioni che riguardano le date in generale: Year, Month, Day, DateSerial, DatePart (nella guida in linea le trovi tutte anche raggruppate per "argomento", cioè relative alle date) e guarda come utilizzarli al meglio per le tue fasi lunari.
  • Re: Data, giorno che si ferma alla fine del mese.

    Chi mi aiuta a correggere (non ditemi rifare, dai) questa "funzione" che mi da 31/01/1900 anzichè andarmi a pescare i controlli (Anno, mese e anno) dalla maschera in cui li ho inseriti?
    Public Function DATA()
        Dim Dataseriale As Date
        Dim Datapiuuno As Date
        Dim Partedata As Date
        Dataseriale = DateSerial(Year(Forms.RicercaPatta.Anno), Month(Forms.RicercaPatta.mese), Day(Forms.RicercaPatta.giorno))
        Datapiuuno = DateAdd("d", 1, Dataseriale)
        Partedata = DatePart("d", Datapiuuno)
        DATA = Partedata
    End Function
    
    p.s. Anche gli altri programmini che ho visto in rete danno la fase lunare anche per il 31 Febbraio!!!
  • Re: Data, giorno che si ferma alla fine del mese.

    Mi sovviene solo una esclamazione più filosofica che tecnica: "povero campo DATA". La Microsoft (o alti sistemi informatici generali) ha fatto di tutto per gestire interi calendari che vanno dall'epoca gregoriana fino a non so quanti secoli in avanti...e tu o chiunque voglia digitare separatamente Giorno/Mese/Anno vorresti fare di tutto per stuzzicare quell'intero sistema digitando 31 febbraio. Gestendo un intero campo data che parte dal 31/3, il GIORNO successivo è certamente 1/4. Una espressione del tipo:
    [CampoData] + 1
    calcola automaticamente e correttamente ogni eventuale slittamento dovuto a cambio di mese, anno, mese/anno se lo deve considerare bisestile...
    Per me ti stai inguaiando inutilmente.
  • Re: Data, giorno che si ferma alla fine del mese.

    Messa giu cosi ma provata e funzione.
    3 textbox per "Giorno", "Mese" e "Anno" (magari combinate per "Mese" e "Anno")
    creato una textbox dove incrementa di uno il giorno che chiamo "piuuno" (formato numero generico)
    Sull'evento "dopo aggiornamento" della textbox "Giorno" (formato "numero generico)
     me.piuuno = me.Giorno
    
    sull'evento click del pulsante che incrementa il giorno
    If Me.piuuno < Day(DateSerial((Anno), (Mese) + 1, 1) - 1) Then
    Me.piuuno = Me.piuuno + 1
    Else: MsgBox "massimo valore ammesso"
    End If
    
  • Re: Data, giorno che si ferma alla fine del mese.

    OsvaldoLaviosa ha scritto:


    ...e tu o chiunque voglia digitare separatamente Giorno/Mese/Anno vorresti fare di tutto per stuzzicare quell'intero sistema digitando 31 febbraio

    Ma, no!!! Ho solo fatto presente che farlo come l' hanno fatto altri sarei già stato capace anch' io!
    Credo che anche tu sappia come calcolare la fase lunare, si sommano tre valori: uno dato dall' anno uno dal mese e uno dal giorno. Come avrai intuito, ho "qualche" lacuna con access e mi viene più facile fare: anno+mese+giorno piuttosto che estrapolare i tre dati da una data completa. Tutto qui.
  • Re: Data, giorno che si ferma alla fine del mese.

    Filippo70 ha scritto:


    mi viene più facile fare: anno+mese+giorno piuttosto che estrapolare i tre dati da una data completa
    Credo tu stia sottovalutando le potenzialità di un campo di tipo Data. Ripeto, Microsoft ha previsto molteplici modi per esprimere una data, modificandone anche il FORMATO. Se sfrutti la funzione
    Format([NomeCampoData]; "yyyy-m-d")
    oppure
    Format([NomeCampoData]; "yyyy-mm-dd")
    risolvi la tua lacuna.
    Se leggi qui
    https://support.office.com/it-it/article/Esempi-di-criteri-di-query-3197228c-8684-4552-ac03-aba746fb29d8
    o molti altri thread che manipolano/trasfomano/traducono un campo Data in formato Testo, Numerico..., estrapolano o ricompongono una data, ti renderai conto di quante cose si possono fare con le Date.
  • Re: Data, giorno che si ferma alla fine del mese.

    Filippo70 ha scritto:


    Come avrai intuito, ho "qualche" lacuna con access e mi viene più facile fare: anno+mese+giorno piuttosto che estrapolare i tre dati da una data completa. Tutto qui.
    E che ci vorrà mai???
    Year(Data) + Month(Data) + Day(Data)
    
    Scusami ma non capisco dove sta la difficoltà.
    I problemi sono quasi sempre nella nostra testa, basta affrontarli e si scopre che è solo un nostro modo sbagliato di pensare, di credere.

    Che tu abbia le lacune, l'abbiamo capito.
    Proprio per questo dovresti seguire i consigli che ti vengono dati.

    L'obbiettivo (il TUO) è che la cosa funzioni, e funzioni bene, e funzioni sempre.
    Non che sia più facile o meno...
    Quindi ora sei sulla stada sbagliata, e sei qui a chiedere aiuto per imboccare quella giusta.

    Te la stanno indicando (tutti), e francamente non capisco perché tu ti ostini a proseguire sulla strada sbagliata, barricandoti dietro a frasi come: '... mi è più facile...'

    Non puoi nemmeno immaginare a 'cosa' ti stai ficcando dentro (!!!) usando delle banali caselle di testo.
    Però è anche vero che se tu vuoi continuare sulla strada sbagliata, ne hai tutto il diritto.

    Però non puoi chiedere a chi ti risponde che ti aiuti a continuare sulla strada sbagliata, sarebbe stupido farlo, oltre che inutile, perché tanto sappiamo già tutti dove si fa a finire.

    A te la scelta.

  • Re: Data, giorno che si ferma alla fine del mese.

    gibra ha scritto:


    E che ci vorrà mai???
    Scusami ma non capisco dove sta la difficoltà.
    .... E', la fai facile, tu.....

    gibra ha scritto:



    Proprio per questo dovresti seguire i consigli che ti vengono dati.
    Year(Data) + Month(Data) + Day(Data)
    
    Ok, proverò a ripartire da capo, da questo tuo codice, che visto così, facile facile, mi ispira fiducia.
    p.s. Grazie per i consigli (anche degli altri utenti).
  • Re: Data, giorno che si ferma alla fine del mese.

    Grande Marco61!
    Ho modificato il tuo codice come sotto ed ho raggiunto il mio obbiettivo!
    
         If Me.giorno < Day(DateSerial((Anno), (mese) - 9, 1) - 1) Then
         Else: MsgBox "massimo valore ammesso"
              Comando7.Enabled = False
         End If
    Non mi è molto chiaro il motivo per cui con il (-9) funziona, mentre prima mi riconosceva Febbraio con Aprile, comunque ...
    Grazie ancora!
    Filippo
Devi accedere o registrarti per scrivere nel forum
14 risposte