Newsgroup: it.comp.appl.access
Titolo: Ancora su eventi timer diversi ...

Buon giorno a tutto il NG,
nonostante i preziosi consigli di Geppo e Max offertimi nel mio
precedente post, credo di ... non aver capito ... cerco di riproporre
il problema, anche se modifcato, in maniera diversa e più pratica ...
Utilizzo una slash form per verificare, all'apertura del DB che il DB
Front End Client sia aggiornato all'ultima versione ... per motivi di
"abbellimento", ma nahc eper meglio comprendere il funzionamento della
funzione Timer Interval, vorrei che all'apertura della form si
visualizzasse un messaggio del tipo "verifica connessioni e versione
in corso" e, solo dopo il controllo cdella congruità della versione,
si visualizzasse il messaggio p.e. "versione recente ... buon
lavoro" ... quindi ho provato con il seguente condice:
Private Sub Form_Load()
On Error Resume Next
    'Popolamento delle variabili quando la form viene caricata
    strVerClient = Nz(DLookup("[VerionNumber]", "[tblVersionClient]"),
"")
    strVerServer = Nz(DLookup("[VerionNumber]", "[tblVersionServer]"),
"")
    Me.TimerInterval = 2000
End Sub
Private Sub Form_Timer()
On Error Resume Next
    Dim strMsg As String
    Dim strPath As String
    Dim strUpdateTool As String
    Const q As String * 1 = """"
    'Se le versioni coincidono, si procede con l'apertura della
mschera principale
    If strVerClient = strVerServer Then
        Me.Testo51.Visible = True
        Me.TimerInterval = 5000
        DoCmd.OpenForm "Anni"
        'DoCmd.Close acForm, "Splash"
    '...se le versioni NON coincidono, si offre l'opportunità
all'operatore di scaricare la più recente
    Else
        strMsg = "Non sei in possesso della versione corretta
dell'applicativo." & vbCrLf & vbCrLf & _
            "Vuoi scaricare l'ultima versione ?"
        If MsgBox(strMsg, vbExclamation + vbOKCancel, "Update") = vbOK
Then
            strPath = Left(CurrentDb.Name, LastInStr(CurrentDb.Name,
"\"))
            strPath = strPath & "Update.mdb"
            strUpdateTool = "MSAccess.exe" & q & strPath & q
            'viene usata la SHELL per aprire l'utility UPDATE.MDB
            '... quindi viene chiusa questa versione CLIENT per essere
sovrascritta
            Shell strUpdateTool, vbNormalFocus
            DoCmd.Quit
        End If
    End If
... ma non ne vuole sapere di aspettare il tempo impostato per farmi
visualizzare il msg. di "        Me.Testo51.Visible = True" ... ma
passa direttamente all'apertura della form "Anni".
Ovviamente le ho provate tutte ...
Grazie per l'attenzione.
Francesco

 Francesco
Per quel poco che ho letto rapidamente sull'help TimerInterval va inserito 
su Form_Load e poi il codice in Form_Timer.
Ciao, Valerio.

 Francesco
Scusa, ho detto una sciocchezza, hai TimerInterval anche in Form_Load, 
perch� poi anche dopo? Comunque non credo che Timer sospenda l'esecuzione 
del codice, quindi suppongo, e solo suppongo che tu debba lasciare 
nell'evento Timer solo ci� che vuoi temporizzare e poi avviare l'altra form 
su un'evento tipo su chiusura.
Ciao, Valerio.

 ha scritto nel messaggio 
news:76069fa2-0629-431f...@o6g2000yqj.googlegroups.com...
Buon giorno a tutto il NG,
nonostante i preziosi consigli di Geppo e Max offertimi nel mio
precedente post, credo di ... non aver capito ... cerco di riproporre
il problema, anche se modifcato, in maniera diversa e pi� pratica ...
Utilizzo una slash form per verificare, all'apertura del DB che il DB
Front End Client sia aggiornato all'ultima versione ... per motivi di
"abbellimento", ma nahc eper meglio comprendere il funzionamento della
funzione Timer Interval, vorrei che all'apertura della form si
visualizzasse un messaggio del tipo "verifica connessioni e versione
in corso" e, solo dopo il controllo cdella congruit� della versione,
si visualizzasse il messaggio p.e. "versione recente ... buon
lavoro" ... quindi ho provato con il seguente condice:
Private Sub Form_Load()
On Error Resume Next
    'Popolamento delle variabili quando la form viene caricata
    strVerClient = Nz(DLookup("[VerionNumber]", "[tblVersionClient]"),
"")
    strVerServer = Nz(DLookup("[VerionNumber]", "[tblVersionServer]"),
"")
    Me.TimerInterval = 2000
End Sub
Private Sub Form_Timer()
On Error Resume Next
    Dim strMsg As String
    Dim strPath As String
    Dim strUpdateTool As String
    Const q As String * 1 = """"
    'Se le versioni coincidono, si procede con l'apertura della
mschera principale
    If strVerClient = strVerServer Then
        Me.Testo51.Visible = True
        Me.TimerInterval = 5000
        DoCmd.OpenForm "Anni"
        'DoCmd.Close acForm, "Splash"
    '...se le versioni NON coincidono, si offre l'opportunit�
all'operatore di scaricare la pi� recente
    Else
        strMsg = "Non sei in possesso della versione corretta
dell'applicativo." & vbCrLf & vbCrLf & _
            "Vuoi scaricare l'ultima versione ?"
        If MsgBox(strMsg, vbExclamation + vbOKCancel, "Update") = vbOK
Then
            strPath = Left(CurrentDb.Name, LastInStr(CurrentDb.Name,
"\"))
            strPath = strPath & "Update.mdb"
            strUpdateTool = "MSAccess.exe" & q & strPath & q
            'viene usata la SHELL per aprire l'utility UPDATE.MDB
            '... quindi viene chiusa questa versione CLIENT per essere
sovrascritta
            Shell strUpdateTool, vbNormalFocus
            DoCmd.Quit
        End If
    End If
... ma non ne vuole sapere di aspettare il tempo impostato per farmi
visualizzare il msg. di "        Me.Testo51.Visible = True" ... ma
passa direttamente all'apertura della form "Anni".
Ovviamente le ho provate tutte ...
Grazie per l'attenzione.
Francesco
-----------  RISPOSTA  --------------
Mi sembra un po' confusa la cosa.
Nell'evento Load imposti il TimerInterval a 2000 millisecondi, quindi a 2 
secondi.
Dopo 2 secondi si innesca l'evento ed il controllo passa alla routine Timer.
All'interno di questa routine vai a modificare il TimerInterval... perch� 
?!? Questo parametro serve solo per far rientrare nella routine dopo 5 
secondi, ma non per attendere 5 secondi. Se vuoi inserire un tempo di attesa 
prima che prosegua dopo aver impostato a true quella variabile che dici tu, 
potresti fare cos�:
    dim TimerSleep as single
    TimerSleep = timer
    while timer - TimerSleep < 5
    wend
In questo modo fa un loop per 5 secondi. Comunque credo che per fare 
visualizzare quel controllo, prima di attivare questa specie di 
temporizzatore, tu debba lanciare un refresh della maschera seguito da 
doevents. Riepilogando:
    If strVerClient = strVerServer Then
        Me.Testo51.Visible = True
            me.refresh
            doevents
            dim TimerSleep as single
            TimerSleep = timer
            while timer - TimerSleep < 5
            wend
        DoCmd.OpenForm "Anni"
e prosegue...
Ciao
Antonio

 Antonio
Ciao Valerio e Antonio,
 ... con l'indicazione di Antonio ho risolto egregiamente ed ho anche
compreso come posso gestire periodi di attesa nell'ambito della
strutturazione del mio di DB ...
Grazie nuovamente per la sempre cortese attenzione dimostrata da tutti
i componenti di questo NG attraverso il quale riusciamo a superare i
quotidiani problemi con l'amato Access ...
Buona giornata lavorativa per chi deve ancora "soffrire" e ottime
ferie per chi invece se la sta già godendo ...
Francesco