Newsgroup: it.comp.appl.access
Titolo: esseguire sub da un'altra Form

Buongiorno,
ho questo problema.
 
Ho la necessita' di passare  il controllo alla sub xxx_AfterUpdate della 
maschera A dopo aver aggiornato il valore dello stesso campo xxx.
Il problema e' che il valore xxx viene assegnato trovandomi con il focus 
sulla form B.
 
Ho trovato anche un precedente post del 3 Marzo scorso di France dellavalle 
che mi pare avesse lo stesso problema, ma proprio non riesco a risolvere.
 
Ho provato con questo:
...
Set frm = Forms![A]
frm![xxx].SetFocus
frm![xxx] = "valore assegnato"
Call frm.codice_AfterUpdate      ' per eseguire l'azione 'Dopo 
Aggiornamento' del campo X sulla Form A
 
E' qui l'errore su cui mi sono arenato: ho provato in vari modi, ma non 
riesco proprio a capire...
 
Dove mi sono perso?
 
Grazie 1000 a tutti
 
Marco67 
 
 


Premesso che in quello che dici c'è qalche cosa che non torna affatto dal punto di vista tecnico... è veramente inconcepibile che tu faccia una modifica di un dato in una Maschera e poi tu debba lanciare un AfterUpdate di un'altra maschera per lo stesso dato... assurdo veramente.
 
Se devi interagire con i dati di una maschera su un'altra ci sono logiche ben precise che evitano questi incroci indefiniti... ma serve capire bene lo scenario.
 
Un esempio è gestire la FORM chiamata in modalità SINCRONA(acDialog) e, fatte le modifiche nella Form Chiamata, la si rende NON VISIBILE(invece di chiuderla) questo rimanda l'attivazione alla Form Chiamante, che può leggere il valore ed operare in modo regolare e sequenziale.
 
Detto questo, che vedrai tu... devi anche comprendere un ulteriore errore tecnico che stai introducendo. 
Gli Eventi degli Oggetti sono PRIVATE, quindi impossibile raggiungerli dall'esterno.
 
Per questo motivo chi sviluppa deve ragionare in LOGICA Object Oriented.
Quindi si predispongono delle Interfacce PUBLIC, che possono essere Metodi/Proprietà o Eventi accessibili dall'esterno.
 
Nel tuo caso devi o dovresti creare una Function Public nella Form su cui agire in modo da poter interagire.
 
Es. nella Form Chiamata (chiamiamola B) devi predisporre:
Public Function ExtAfterUpdate()
   Call Form_AfterUpdate()
End Function
 
Quindi dalla Form A scriviamo:
Call Forms("B").ExtAfterUpdate
 
Questa funzione Public poi rilancia sulla Private di Maschera.
 
Ti suggerisco in ogni caso di chiarirti le cose prima di fare troppe modifiche non adeguate.
 
@Alex

 ha scritto nel messaggio 
news:bc0ac5f3-7863-40e9...@googlegroups.com...

Ho capito Alex,
provo l'apertura della maschera in modalita' AcDialog, poi utilizzero' la 
funzione Public giustamente.
 
Grazie 1000 per il prezioso aiuto e, soprattutto, chiarezza.
Un saluto
Marco67 
 
 

Se usi la modalità SINCRONA non serve alcuna funzione... ti basta leggere la proprietà VALUE del controllo.
 
@Alex

 ha scritto nel messaggio 
news:25bf68c1-c877-4622...@googlegroups.com...
Se usi la modalità SINCRONA non serve alcuna funzione... ti basta leggere la 
proprietà VALUE del controllo.
 
@Alex
 
Alex,
ho risolto richiamando la function pubblica, come mi hai suggerito.
 
Pero', a titolo di conoscenza, penso di non aver capito l'utilizzo 
dell'apertura sincrona di una form.
 
Ho provato ma, non mi cambia nulla:
ho aperto la mia form B dalla Form 'A' (che dovra' ricevere un valore in 
base alla scelta in form 'B').
Una volta scelto un valore, lo stesso viene assegnato al campo x nella form 
A.
 
Fin qui ok, ma il fatto e' che sulla form A deve risultare come fosse 
inputato manualmente dall'utente, quindi automaticamente eseguire l'azione 
afterUpdate, che anche nel caso di apertura SINCRONA (AcDialog),  non 
avviene.
 
Ripeto, ho risolto tranquillamente attraverso la public function, ma 
certamente non ho capito il sistema di apertura AcDialog e come diversamente 
si comporti.
 
Grazie ancora Alex