Newsgroup: it.comp.appl.access
Titolo: eseguire funzione dopo apertura maschera

Ciao a tutti
avei il seguente problema:
vorrei eseguire una funzione grazie alla quale eseguire la compattazione 
dell'mdb, ma solo dopo che si sia aperta una determinata maschera
ho provato a richiamare la funzione sull'eveto "su apertura" della 
maschera ma succede che la funzione viene eseguita prima dell'apertura 
della maschera stessa
come faccio a verificare che prima la maschera sia completamente 
caricata e dopo fargli eseguire la funzione?



  Non sono affatto convinto che questa sia la strada migliore - ma ho 
sonno e non mi viene in mente altro :-) -, ma se scrivi questo codice 
all'interno di una form vedrai che si comporterà come tu vuoi.
Private Sub Prova()
    MsgBox "La form è tutta caricata!"
End Sub
Private Sub Form_Load()
    Me.TimerInterval = 1000 ' attende per 1sec
                            ' aumentare se necessario
End Sub
Private Sub Form_Timer()
    Me.TimerInterval = 0
    Prova
End Sub
-- 
Raccolta di programmi freeware
http://digilander.libero.it/winses/
----
Togli '_' e '.invalid' per rispondere...

 ha scritto nel messaggio news:ql5Me.55980$2U1.3...@news3.tin.it...

Tratto dall'help in linea evento Activate:
'---
Quando si apre una maschera per la prima volta, si verificano gli eventi elencati di seguito (nell'ordine indicato):
Apertura -> Caricamento -> Ridimensionamento -> Attivazione -> Corrente
'---
Ciao.
-- 
Sergio MAZZA 

Sergio MAZZA ha scritto:

Ho richiamato la funzione"compatta" sull'evento OnActivate ma non accade 
comunque nulla!
la funzione non viene eseguita
dove sbaglio?

 dove sbaglio?
Ci fai vedere questa funzione?
Ciao.
-- 
Sergio MAZZA 

Sergio MAZZA ha scritto:

Eccola:
Private Sub Compatta()
Dim CartellaDB As String
CartellaDB = "C:\Documents and Settings\m\Desktop\server\"
If Dir(CartellaDB & "competenze_be.ldb", vbDirectory) <> "" Then
     MsgBox "Attenzione prima di compattare gli archivi chiudere tutte 
le tabelle.", vbApplicationModal + vbExclamation + vbOKOnly
     Exit Sub
Else
     FileCopy CartellaDB & "competenze_be.mdb", CartellaDB & 
"competenze_be_copia.mdb"
     FileCopy CartellaDB & "competenze_be.mdb", CartellaDB & 
"competenze_be_copia2.mdb"
     Kill CartellaDB & "competenze_be.mdb"
     DBEngine.CompactDatabase CartellaDB & "competenze_be_copia2.mdb", 
CartellaDB & "competenze_be.mdb"
     Kill CartellaDB & "competenze_be_copia2.mdb"
     Kill CartellaDB & "competenze_be_copia.mdb"
     Me.lblsituazione.Caption = "...compattazione archivi completata!"
End If
End Sub

 End Sub
A prima vista non hai inserito il codice nell'evento "OnActivate" della form; dovrebbe essere:
Private Sub Form_Activate()
... tuo codice per compattare
End Sub
Ciao.
-- 
Sergio MAZZA 

Sergio MAZZA ha scritto:

ho provato sia ad inserire il codice direttamente nell'evento Activate 
si a richiamarlo, ma il risultato è sempre lo stesso la maschera si apre 
ma il codice non va in esecuzione

maurizio ha scritto:

E' inutile le ho provate tutte ma non riesco a risolvere il problema
Qualcuno ha qualche idea?

 Qualcuno ha qualche idea?
Per esperienza personale io utilizzo il metodo
che ti ha suggerito il primo 3D di "falsim" che
ritengo sia la soluzione più funzionale.
L'hai provato....????
Se anche quello non ti funziona stai sbagliando 
qualche cosa di grossolano.
Saluti.
@Alex
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 
Non ho usato il suggerimeto di "falsim" xchè l'evento timer della 
maschera mi serve per dare un pò di "movimento" ad un'immagine in essa 
contenuta  (esempio che ho trovato su sitocomune), quidi se vado ad 
inserire anche l'esecuzione della funzione compatta mi si crea un gran 
casotto (già provato)

 maschera si apre ma il codice non va in esecuzione
Io ho fatto questa prova copiando/incollando il tuo codice in un modulo (togliendo il Private dalla Sub):
[db1]
(Modulo1)
'-----
Sub Compatta()
Dim CartellaDB As String
CartellaDB = "C:\Documents and Settings\Ospite\Documenti\"
If Dir(CartellaDB & "db2.ldb", vbDirectory) <> "" Then
   MsgBox "Attenzione prima di compattare gli archivi chiudere tutte le tabelle.", vbApplicationModal + vbExclamation + vbOKOnly
   Exit Sub
Else
   FileCopy CartellaDB & "db2.mdb", CartellaDB & "db2_copia.mdb"
   FileCopy CartellaDB & "db2.mdb", CartellaDB & "db2_copia2.mdb"
   Kill CartellaDB & "db2.mdb"
   DBEngine.CompactDatabase CartellaDB & "db2_copia2.mdb", CartellaDB & "db2.mdb"
   Kill CartellaDB & "db2_copia2.mdb"
   Kill CartellaDB & "db2_copia.mdb"
   Msgbox "...compattazione archivi completata!"
End If
End Sub
'-----
(form Maschera1)
Evento "su attivazione"
'----
Private Sub Form_Activate()
Compatta
End Sub
'----
Quando apro la form l'mdb "db2" viene compattato...
Ciao.
-- 
Sergio MAZZA 

 casotto (già provato)
In realtà il problema è dato da qualche errore di valutazione
tuo o dal fatto che non hai scritto il codice correttamente.
Private Sub Form_Timer()
  Static NotFirstTime as Boolean
  If NotFirstTime = False then
     ' Esegui la Funzione
     NotFirstTime = True
  End If
  ' Qu' metti il resto della routine Timer.
End Sub
Se devi condizionare anche il tempo inserisci una
variabile Static che faccia da Counter ed incrementala
confrontando il numero di Cicli Timer per l'esecuzione
della Funzione.
Ciao


 >>> CartellaDB = "C:Documents and SettingsmDesktopserver"


L'evento è di una maschera o di una sottomaschera? La routine Compatta() è
nella maschera o in un modulo? C'è la scritta [Routine Evento] nella
finestra dele proprietà della maschera in corrispondenza di "Su
attivazione"?
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Alessandro Baraldi ha scritto:

certo se mi potresti dare un ulteriore prezioso aiutino con qualche 
altro esempio su come condizionare anche il tempo...

 altro esempio su come condizionare anche il tempo...
PRemetto che non conosco a quanto hai impostato la proprietà
TimerInterval pertanto faccio un'ipotesi:
TimerInterval=500
Supponi di voler lanciare la Routine dopo 3secondi quindi
6 volte il TimerInterval.
Private Sub Form_Timer()
  Static NotFirstTime as Boolean
  If nTime < 6 then 
      nTime=nTime+1
  Elseif nTime=6 then
      ' Esegui la Funzione
       nTime=nTime+1
  End If
  ' Quì metti il resto della routine Timer.
End Sub
Ciao


 wrote in message
news:dd3df156a2b15b103b...@mygate.mailgate.org
Scusa l'errore di dichiarazione Variabili:
Private Sub Form_Timer()
  Static nTime as Integer


 
come sempre i tuoi esempi e cosigli hanno risolto il problema (la 
funzione si esegue dopo un tot di secondi senza andare in conflitto con 
l'animazione della form
ancora un'ultima cosa (spero)
come potrei fare in modo che una volta eseguita la funzione compatta 
dopo qualche secondo essa si chiuda in automatico?
ci ho provato in tutti i modi (come per esempio mettere il comando 
"docmd.close..." nella funzione ma questo mi genera un errore a causa 
del ciclo relativo all'animazione

 del ciclo relativo all'animazione
Un pň di fantasia......
Private Sub Form_Timer()
   Static nTime as Integer
   If nTime < 6 then 
       nTime=nTime+1
   Elseif nTime=6 then
       ' Esegui la Funzione
        nTime=nTime+1
   ElseIf nTime<12 and nTime>=7
       nTime=nTime+1
   ElseIf nTime=12
       ' Interrompi l'animazione
       ' quindi CHIUDI TUTTO
       Exit Sub
   End if
   ' Quě metti il resto della routine Timer.
End Sub
Ciao
@Alex
