Messaggio di avviso rispetto alla data

di il
20 risposte

Messaggio di avviso rispetto alla data

Ciao ragazzi avrei un problema che non riesco a risolvere. Ho creato un database all'interno del quale vado ad inserire i dati di persone, con il loro nome, cognome, data d'inserimento,ecc...
Il problema riguarda la data, più precisamente mi servirebbe che il DB vada a verificare la data e che dopo 30 giorni mi deve segnalare, tramite un avviso, che sono passati 30 giorni dall'inserimento nel database.
Come posso fare per risolvere questo problema?O che istruzioni devo inserire in VBA?

Ciao a tutti!!!!

20 Risposte

  • Re: Messaggio di avviso rispetto alla data

    Cerchiamo di ragionare (almeno logicamente) passo passo.
    1. Sicuramente ti servirà una query che analizza la tua tabella che chiamerei Anagrafica sul campo DataInserimento.
    2. Nella query dovrai aggiungere un campo che chiamerei DataInserimento30 con una espressione che ti dia la DataInserimento spostata di 30 giorni
    3. Poi ti serve un confronto con Date() per valutare se coincide con DataInserimento30. Potresti aggiungere un campo con una espressione IIf che restituisce un valore OggiSì/OggiNo.

    Detto ciò, a grandi linee. Ma cosa fai se un giorno non apri il database e proprio quel giorno c'era qualcuno con la data+30? Ti serve per lavoro? E se la data+30 coincide con la domenica? Se intendi apporre correttivi, forse l'espressione del punto 2. andrebbe un po' più arrotondata.

    Tutto il resto, bisogna capire come vuoi gestirlo. La gamma di scelte potrebbe essere ampiamente variegata.
  • Re: Messaggio di avviso rispetto alla data

    Grazie per la risposta.
    Si infatti secondo me la verifica dei 30 giorni dovrebbe essere tipo >30giorni, in questo modo se capita la domenica o il DB non viene aperto in quella precisa data il programma comunque può avvisare della "scadenza". Si serve per lavoro quindi deve essere fatto in modo tale da non commettere errori .
    Io non avrei problemi o limitazioni nella gestione, posso fare come meglio preferisco l'importante è che funzioni
  • Re: Messaggio di avviso rispetto alla data

    Stewie ha scritto:


    la verifica dei 30 giorni dovrebbe essere tipo >30giorni
    Detto così rischieresti di avere questo messaggio in "eterno". Secondo me occorre un altro parametro di valutazione che impedisca a tale messaggio di scatenarsi sempre.
    Potresti indicare qualche nome proprio di tabella e di campo significativi?
  • Re: Messaggio di avviso rispetto alla data

    Questo è anche vero però quando mi esce il messaggio o l'avviso, vorrei mettere un pulsante che vadi a resterai la variabile da Si a No, in modo che non facci la verifica.

    Come nome della tabella ho scelto....Tabella (che originalità) . Il campo è della data non è solo uno, ho più campi da dover fare la verifica. E' sono data notifica, data ordinanza, data notifica provvedimento, eccc.....
  • Re: Messaggio di avviso rispetto alla data

    Cerchiamo di essere completi.
    Hai una tabella che si chiama Tabella.
    Voglio sapere tutti i nomi di tutti i campi di Tabella.
    Voglio sapere su quali campi vuoi effettuare il controllo 30gg.
    Voglio sapere dove sta il campo o controllo dove tu scrivi Sì/No per mettere a tacere l'eventuale avviso perpetuo.

    Per costruire espressioni riguardanti le date, ti consiglio di dare un'occhiata qui
    https://support.office.com/it-it/article/Esempi-di-criteri-di-query-3197228c-8684-4552-ac03-aba746fb29d8#bm4
  • Re: Messaggio di avviso rispetto alla data

    I campi sono: nome, cognome, data di nascita, comune, provincia, ecc... (riguardanti la persona)
    Poi ho: protocollo, data del protocollo, numero ordinanza, data dell'ordinanza.
    E sulle due date devo creare l'avviso dei 30 giorni, mentre la variabile Si/No sarebbe solo una variabile interna al codice per far visualizzare l'avviso e una volta cliccato su tasto, dedicato alla stampa di un documento, metterà su FALSE questa variabile.
  • Re: Messaggio di avviso rispetto alla data

    Stewie ha scritto:


    I campi sono: nome, cognome, data di nascita, comune, provincia, ecc... (riguardanti la persona)
    Poi ho: protocollo, data del protocollo, numero ordinanza, data dell'ordinanza.
    Vorrei farti notare che la tua Tabella non è normalizzata. Una Persona può avere molte Ordinanze. Poi, non so, non conosco il tuo campo professionale, se una Ordinanza coinvolge molte Persone.
    Non sarebbe questo il problema strettamente legato alla tua domanda. Provo a soffermarmi sulla sola "futura" tabella Ordinanze.

    Stewie ha scritto:


    la variabile Si/No sarebbe solo una variabile interna al codice per far visualizzare l'avviso e una volta cliccato su tasto, dedicato alla stampa di un documento, metterà su FALSE questa variabile.
    Qui non ti seguo. Per me un flag Sì/No dovrebbe essere previsto nella tabella Ordinanze, come per dire "Fatto". Devi avere un campo Fatto in tabella Ordinanze perchè la query che deve avvisare deve tenere conto anche di questo campo.

    Ho un problema di comprensione di quello che avviene nel tuo campo professionale. A cosa ti serve essere avvisato dopo 30 giorni?
  • Re: Messaggio di avviso rispetto alla data

    E' una scadenza, quindi ti occorre una tabella Scadenze che va alimentata quando inserisci il nominativo. La struttura può essere più o meno così:

    IDScadenza (Autoincrement) PK
    IDPersona - chiave esterna che si relaziona al nominativo
    DataScadenza - è la data di inserimento + 30gg
  • Re: Messaggio di avviso rispetto alla data

    Osvaldo cosa intendi per tabella ordinanza??Ogni persona avrà un ordinanza, quindi è univoca.
    Dopo 30 giorni dall'immissione della data dell'ordinanza, Access mi deve avvisare che questa data è "scaduta" e a questo punto l'operatore deve compiere un'altra azione.

    @gibra come faccio ad aggiungere +30 giorni alla data che io inserisco?
  • Re: Messaggio di avviso rispetto alla data

    Stewie ha scritto:


    Ogni persona avrà un ordinanza
    No. Piuttosto il contrario. Una Ordinanza RIGUARDA una Persona. Una Persona può produrre nel corso del tempo molte Ordinanze. Riepilogando tu devi avere 2 tabelle così (poi aggiusterei...vedi dopo):

    Persone
    IDPersona (contatore, chiave primaria)
    Cognome
    Nome
    Indirizzo
    Comune
    ...altri campi tipicamente anagrafici...

    Ordinanze
    IDOrdinanza (contatore, chiave primaria)
    Protocollo
    DataProtocollo
    NumeroOrdinanza
    DataOrdinanza
    IDPersona (numerico)
    DataEvasione (io userei un campo così per indicare quando l'Ordinanza viene FATTA SCADERE in un modo o in un altro...piuttosto di un campo Sì/No. In ogni caso si tratterebbe di un campo che solo l'utente può digitare)

    Relazione Persone.IDPersona uno-a-molti con Ordinanze.IDPersona.

    Sia chiaro che DataProtocollo+>30 e DataOrdinanza+>30 NON DEVONO essere campi da inserire in tabella Ordinanze, ma il frutto di una apposita query che prende i campi DataProtocollo e DataOrdinanza e li fa diventare, grazie a una espressione Data (vedi il link suggerito e trova tu l'espressione più consona a te) DataProtocollo+>30 e DataOrdinanza+>30.
    Non finisce qui. Nella query devi aggiungere anche il campo DataEvasione e filtrare Null. In questo modo tu stai filtrando non solo i DataProtocollo+>30 e/o DataOrdinanza+>30, ma affinchè l'avviso cercato non si perpetui in eterno, verifichi anche i Null che ho detto prima.

    Devi agire passo passo:
    1. Normalizzare da una Tabella in 2 tabelle
    2. Crea la query secondo tutte le indicazioni che ho scritto prima
    3. Imposta la tua strategia (via macro o codice VBA) per far apparire l'avviso che deve comunque far leva sulla query
  • Re: Messaggio di avviso rispetto alla data

    Grazie osvaldo per la spiegazione, un'unica cosa non ho capito. Dove sta il link per la Data??
    Inoltre per quanto riguarda l'avviso stavo pensando di evitare di usarlo, forse mi conviene usare solo la query per far visualizzare le ordinanze scadute.
  • Re: Messaggio di avviso rispetto alla data

    Stewie ha scritto:


    Dove sta il link per la Data??
    Te l'ho scritto nel mio messaggio del 25 mar 2015, 12:36 (leggi i post precedenti).

    Stewie ha scritto:


    Inoltre per quanto riguarda l'avviso stavo pensando di evitare di usarlo, forse mi conviene usare solo la query per far visualizzare le ordinanze scadute.
    Puoi fare l'uno e/o l'altro. Ti consiglio un passo alla volta: comprendi bene la query prima.
    Nulla ti vieta di far apparire un messaggio (MsgBox) che in sostanza dice:
    "Ci sono alcune Ordinanze scadute. Vuoi visualizzarle?"
    e qui prevedi 2 pulsanti Yes e No.
    Resta comunque chiaro il concetto che la MsgBox dovrà avere una condizione che guarda il numero di record della tua query. Quindi ritorna il concetto che devi prima predisporre la query.
  • Re: Messaggio di avviso rispetto alla data

    Ah ok scusami, ti ringrazio per l'aiuto. Se dovessi incontrare altri problemi ti faccio sapere.

    Ciao ciao
  • Re: Messaggio di avviso rispetto alla data

    Ho fatto delle prove e mi sono reso conto che la query non è poi così semplice/scontata da mettere in piedi. Vediamo di ragionare per piccoli passi.
    1. Crea una nuova query in visualizzazione struttura
    2. Importa sicuramente la tabella Ordinanze, facoltativamente anche Persone
    3. Trascina nella griglia tutti i campi di Ordinanze e quelli di Persone che ti interessa vedere (io penserei almeno a Cognome e Nome)
    4. In una colonna vuota della griglia, posiziona il cursore in corrispondenza di Campo e scrivi:
    DataProtocollo+30: [DataProtocollo]+30
    5. In un'altra colonna vuota della griglia, posiziona il cursore in corrispondenza di Campo e scrivi:
    DataOrdinanza+30: [DataOrdinanza]+30
    6. A questo punto tu hai la necessità di filtrare qualcosa che somigli a una espressione del genere:
    (DataProtocollo+30 < Oggi AND DataEvasione Is Null) OR (DataOrdinanza+30 < Oggi AND DataEvasione Is Null)
    Per scrivere <Oggi, non so perchè ho scritto <Date() e Access mi risponde con un messaggio di errore. Ho aggirato questo ostacolo scrivendo <Now()...continuando:
    Vai alla colonna DataProtocollo+30, in corrispondenza di Criteri, scrivi:
    <Now()
    Vai alla colonna DataEvasione, stesso rigo Criteri, scrivi:
    Is Null
    Vai alla colonna DataOrdinanza+30, in corrispondeza di Oppure, scrivi:
    <Now()
    Vai alla colonna DataEvasione, stesso rigo Oppure, scrivi:
    Is Null
    7. Salva la query con nome OrdinanzeScaduteNonEvase

    Ho fatto un test e funziona.
Devi accedere o registrarti per scrivere nel forum
20 risposte