Newsgroup: it.comp.appl.access
Titolo: Quale evento è generato dall'aggiornamento dei dati in una sottomaschera?

Ho una maschera dove scelgo valore del controllo "IDPaziente", e di
conseguenza cambiano i dati nelle sottomanschere collegate alla maschera
tramite appunto l'IDpaziente.
Ore in una di queste, una sottomaschera con dati continui, voglio fare dei
calcoli, ovvero sommare tutti gli importi in un certo modo, e voglio che
questa somma venga rifatta ogni volta che i dati cambiano in seguito al
cambiamento dell'IDPaziente nella maschera principale.
Ho provato tutti gli eventi della sottomaschera ma nessuno sembra adatto
allo scopo: ci sono eventi previsti per il cambiamento dei dati contenuti
nella sottomaschera (aggiornamento) o per il passaggio da un dato all'altro
nella stessa (su corrente), ma niente che si attivi quando cambiano TUTTI i
dati della stessa dato che č cambiato l'IDpaziente.
Ho provato a mettere il codice a seguito dell'update dell'idpaziente nella
maschera principale, ma questo codice viene eseguito DOPO che la
sottomaschera venga effettivamente aggiornata.
A questo punto
- o metto un timer ed aspetto un po' a fare il calcolo in modo che nel
frattempo la sottomaschera si sia aggiornata
- o aspetto che l'idpaziente della sottomaschera cambi veramente facendo un
ciclo while
- oppure, visto che le 2 soluzioni sopra mi sembrano un po' brutali e non
sono convinto che funzionino:
datemi un suggerimento voi! :-))
Magari mi č sfuggito qualche evento, anche se li ho provati praticamente
tutti....
Grazie in anticipo.
Ciao.

 ha scritto nel
messaggio news:ELoe8.21184$v7.8...@twister1.libero.it...

Magari non ho capito il tuo problema, ma hai provato a scrivere l'algoritmo
di calcolo nell'origine controllo del controllo che deve portare il
risultato?
Cosě ci pensa Access quando farlo.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 Così ci pensa Access quando farlo.
Ho seguito il tuo suggerimento e ci ho provato or ora, richiamando una
funzione nell'origine dati del controllo.
Ora però non riesco + ad accedere ai dati, e mi dà errore se uso
Forms![nome sottomaschera].Recordset
o anche se uso
Forms![nome sottomaschera]![IDPaziente]
Dato che non posso usare il "Me" credo che questo sia l'unico modo di
accedere ai dati, ma forse sbaglio qualcosa...
Ho notato che con questa sintassi riesco solo ad accedere ai dati delle
maschere correntemente aperte, ESCLUSE le sottomaschere.
Forse potrei prendere l'IDPaziente e fare la query direttamente sulle
tabelle per estrapolarne i dati, ma non mi sembra molto efficiente come
soluzione.
Grazie del suggerimento comunque.

 Forms![nome sottomaschera]![IDPaziente]
Hai provato con 
Forms!NomeMaschera!NomeCONTROLLOsottomaschera!Nomecontrollo?

 ha scritto nel messaggio
news:c2f1e49e.02022...@posting.google.com...

Grazie, con questa sintassi funziona (era solo un problema di MIA
ignoranza), ma purtroppo il metodo di inserire la
function direttamente nell'origine dati del controllo non funziona affatto
bene:
- i dati vengono gestiti in modo parecchio strano, ed all'inizio ho dovuto
  fare un movefirst, ma quello non è il vero problema,
- esegue il codice UNA volta PER OGNI record della subform (che è a maschere
continue se ti ricordi) !
- alla fine spesso dà un risultato errato forse per l'intrecciarsi ed il
sovrapporsi delle molte istanze dello stesso codice eseguito.
La cosa potrebbe forse funzionare nel caso di una maschera singola, ma in
quel caso non si sarebbe nemmeno posto il mio problema di fare il un calcolo
sulla base di tutti i record...
Ho quindi provato a fare i calcoli usando direttamente le query, costruendo
un paio di sottomaschere non visibili che dovevano fare i risultati parziali
per poi usarli nel mio calcolo. Ma anche così non funzionava perché a volte
i dati non venivano aggiornati in tempo, e se una delle query "accessorie"
non dava nessun risultato (caso possibile con alcuni dati) il calcolo finale
si impiantava miseramente (non è come avere un controllo "= 0" o null, è
proprio come chiamare un valore che non esiste sulla faccia della terra di
access :-).
Anche un requery non serviva a niente al mio scopo.
INFINE ho trovato la soluzione al problema:
PER AVERE I DATI AGGIORNATI NELLA SOTTOMASCHERA BASTA SPOSTARE SU DI ESSA IL
FOCUS!
Praticamente uso l'evento generato dalla modifica dell'IDpaziente nella
maschera principale, sposto il focus sulla sottomaschera, faccio i miei
conti facendo passare tutti i record (facendo prima un movefirst altrimenti
una volta su dieci non mi funziona), poi risposto il focus nella maschera
principale e scrivo il risultato!
Così funziona, non so bene perché: forse mettendo il focus sulla
sottomaschera access aspetta che i dati siano aggiornati prima di ripassare
il controllo alla funzione, oppure il tempo necessario al cambio di focus è
sufficiente perché i dati nel frattempo si aggiornino (spero non sia così
perché in questo caso con un numero grande di dati potrebbe non funzionare +
niente)
Questa potrebbe essere una FAQ, mi dispiacerebbe se altre persone perdessero
tempo inutilmente su questa cosa come ho fatto io ... o magari c'era un
metodo molto + semplice o un evento che mi è sfuggito per fare questo...
Ciao.
P.S. a proposito della gestione dei campi/controlli calcolati tramite
funzione, avete notato che se mettete in una query una funzione VBA per
generare un campo access va in loop infinito continuando a richiamare la
funzione e non c'è modo di fermarlo se non killandolo? Se invece si usa una
semplice espressione questo non succede...