Gestione appuntamenti

Anonimo
2018-09-28T15:10:08+00:00

Ciao a tutti sto creando un gestionale per delle pratiche della mia agenzia nulla di complicato funziona bene e sono soddisfatto del risultato che ho ottenuto, desso però mi servirebbe un qualcosa che mi avvisi degli appuntamenti del giorno o meglio che mi avvisi prima dell'ora impostata.

ho creato la tabella appuntamenti con i seguenti campi

id

data inserimento

data appuntamento

ora appuntamento

note

ho creato un query tutti i campi nel campo data appuntamento ho assegnato il seguente criterio date()

nella maschera che ho creato ho inserito un codice che ho trovato in rete riadattandolo alle mie esigenze che è il seguente

Private Sub Form_Load()

Dim x As Integer

x = DCount("[data appuntamento]", "[App]", "[data appuntamento]=Date()")

If x > 0 Then

If MsgBox("Attenzione hai persone da chiamare " & x & "  Vuoi visualizzarle?", vbYesNo, "AVVISO") = vbYes Then

DoCmd.OpenReport "listapp", acViewPreview

End If

End If

End Sub

funziona nel senso che ogni volta che apro la maschera mi avvisa se ho persone da chiamare in quel giorno in questo modo peò mi fa un elenco di tutte le persone in una volta, ma non è quello che mi serve, mi servirebbe avere un allert che mi avvisa di chiamare quella persona all'orario prestabilito e che mi avvisi man mano che si avvicinano gli eventi. Ringrazio tutti in anticipo per l'aiuto

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2018-09-29T09:00:05+00:00

Corretto!! .... +/- ....  :-)

modifica questa parte del codice

    With rst

  .MoveLast

        iContact = .RecordCount

    End With

come segue:


    With rst

        If Not .EOF Then

            .MoveLast

            iContact = .RecordCount

        Else

            iContact = 0

        End If

    End With


dovresti poter risolvere

David

La risposta è stata utile?

3 persone hanno trovato utile questa risposta.
0 commenti Nessun commento

7 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2018-09-28T21:39:58+00:00

    Più o meno ...

    Prova a dare un'occhiata a questa demo Appuntamenti.

    Nella tabella tAppuntamenti imposta qualche appuntamento di prova poi apri una delle due maschere "fReminder_con_dcount" o "fReminder_con_recordset" (fanno sostanzialmente la stessa cosa) e aspetta un minuto (tempo che puoi impostare a piacere nell'evento Open delle due maschere.

    Vedrai comparire il tuo warning e rispondendo SI si aprirà automanticamente la maschera fAppuntamenti con l'elenco degli appuntamenti della giornata in scadenza.

    Prova ora a simulare la chiusura di un appuntamento cliccando sul checkbox "Contattato". Trascorso un altro minuto vedrai "scomparire" automaticamente il record e comparire gli eventuali altri appuntamenti rentranti nella scadenza preimpostata di 15 minuti (anche questo valore può essere impostato a piacere nel codice). Quando tutti gli appuntamenti saranno conclusi e nessun nuovo appuntamento rientrerà nel range di minuti scelto, la maschera "fAppuntamenti" si chiuderà automaticamente da sola lasciando solo la maschera principale aperta. Di nuovo, ogni minuto verrà fatto un check di esistenza di eventuali appuntamenti in scadenza per ricominciare tutto daccapo.

    Ti dicevo che le due form "fReminder_con_dcount" e "fReminder_con_recordset" svolgono lo stesso compito. La differenza fondamentale sta nell'uso del recordset al posto della funzione Dcount, notoriamente inefficiente come tutte le funzioni di aggregazione sui domini. Al crescere dei dati nella tabella appuntamenti, l'utilizzo di Dcount potrebbe causare dei rallentamenti nell'esecuzione del codice. Al momento non hanno differenze apprezzabili nei tempi di esecuzione.

    Vedi se si avvicina alla tua esigenza.

    David

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2018-09-29T08:02:15+00:00

    Ciao David,

    intanto grazie, si è la soluzione che fa per me,  ho riscontrato questo problema se uso il reminder recordset cliccando sull'ultimo appuntamento mi esce un errore di run time 3021

    Private Sub Form_Timer()

        Dim db As DAO.Database

        Dim rst As DAO.Recordset

        Dim sSQL As String

        'Imposta i minuti di anticipo per l'avviso

        Const iReminder As Integer = 15

        Dim iContact As Integer

        Dim sMessage As String

        Set db = CurrentDb

        sSQL = "SELECT * FROM tAppuntamenti " _

                    & "WHERE Eseguito = 0 AND " _

                    & "DataAppuntamento = Date() AND " _

                    & "DateDiff(""n"", Time(), OraAppuntamento) <= " & iReminder

        Set rst = db.OpenRecordset(sSQL, dbOpenSnapshot, dbReadOnly)

        With rst

      .MoveLast

            iContact = .RecordCount

        End With

        If iContact = 0 Then

            If CurrentProject.AllForms("fAppuntamenti").IsLoaded = True Then

                DoCmd.Close ObjectType:=acForm, _

                            ObjectName:="fAppuntamenti", _

                            Save:=acSaveNo

            End If

            Exit Sub

        End If

        If CurrentProject.AllForms("fAppuntamenti").IsLoaded = False Then

            If iContact = 1 Then

                sMessage = "Attenzione hai " & iContact & " persona da chiamare nei prossimi" & vbCrLf _

                            & iReminder & " minuti. Vuoi visualizzarla?"

            ElseIf iContact > 1 Then

                sMessage = "Attenzione hai " & iContact & " persone da chiamare nei prossimi" & vbCrLf _

                            & iReminder & " minuti. Vuoi visualizzarle?"

            End If

            If MsgBox(Prompt:=sMessage, _

                        Buttons:=vbQuestion + vbYesNo, _

                        Title:="AVVISO") = vbYes Then

                'Scegli cosa vuoi fare

                '   'Apri un report

                '   DoCmd.OpenReport "listapp", acViewPreview

                'oppure

                '   'Apri una maschera

                    DoCmd.OpenForm FormName:="fAppuntamenti"

                    Forms("fAppuntamenti").Form.RecordSource = sSQL

                'oppure

                '   'Apri una query

                    'DoCmd.OpenQuery "nomeQuery"

            End If

        Else

            'Scegli cosa vuoi fare

            '   'Apri un report

            '   DoCmd.OpenReport "listapp", acViewPreview

            'oppure

            '   'Maschera già aperta, aggiorno il recordsource

                Forms("fAppuntamenti").Form.RecordSource = sSQL

            'oppure

            '   'Apri una query

                'DoCmd.OpenQuery "nomeQuery"

        End If

        rst.Close

        db.Close

        Set rst = Nothing

        Set db = Nothing

    End Sub

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2018-09-28T17:50:51+00:00

    Intanto ti ringrazio per la risposta

    Dici in questo modo

    Private Sub Form_Load()

    Dim x As Integer

    x = DCount("[ora appuntamento]", "[App]", "[ora appuntamento]=Now()")

    If x > 0 Then

    If MsgBox("Attenzione hai persone da chiamare " & x & "  Vuoi visualizzarle?", vbYesNo, "AVVISO") = vbYes Then

    DoCmd.OpenReport "listapp", acViewPreview

    End If

    End If

    End Sub

    Ma se invece di aprire il report voglio aprire un altra maschera o una query ?

    il timer come si imposta ?

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2018-09-28T17:01:30+00:00

    Ciao Fabry_102

    direi che, senza stravolgere quello che hai già fatto, nel tuo Dcount potresti utilizzare la funzione Datediff confrontando l'ora attuale con quella dell'appuntamento e poi implementare lo stesso confronto nulla funzione timer della tua form in modo che periodicamente tu possa venire avvisato degli eventi in scadenza

    David

    La risposta è stata utile?

    0 commenti Nessun commento