Newsgroup: it.comp.appl.access
Titolo: Perchè Requery non funziona?

Ciao a tutti
Ho un problema che ho risolto temporaneamente con un'espediente, ma vorrei
trovare una soluzione corretta per avere chiarezza una volta per tutte sul
metodo Requery:
Ho una maschera principale ed una sottomaschera;
Dalla maschera principale avvio una routine che utilizzando ADO aggiunge
un record alla tabella origine dati della sottomaschera.
Inoltre dalla sottomaschera sempre con ADO a seconda della condizione creo
uno o più records per le future transazioni.
Affinchè l'utente possa visualizzare immediatamente nella maschera le
modifiche alla base dati sottostante senza bisogno di premere il tasto F9
ho aggiunto al termine della routine lanciata dalla maschera principale:
[Maschera]![Sottomaschera].form.requery ed al termine della routine
lanciata dalla sottomaschera Me.Requery ma nessuna delle due funziona.
Ho provato a lanciarla come routine a parte in coda alle altre, niente.
L'istruzione Requery assegnata ad un pulsante a sè funziona [Recalc dà
apparentemente lo stesso risultato].
Sembra che per funzionare debba essere come dire "staccata" dalle
istruzioni che modificano il recordset sottostante,
allora ho assegnato l'istruzione Requery all'evento Timer con
TimerInterval impostato ad alcuni secondi dall'ultima riga delle routine
che creano nuovi records ed allora tutto funziona ma francamente mi sembra
un espediente da quattro soldi.
Qual'è il problema?
Un dubbio sul metodo Refresh -  per quello che ne so dovrebbe aggiornare
il recordset origine della maschera ma l'Help dice anche:
[È possibile utilizzare il metodo Refresh per visualizzare le modifiche
apportate al set di record corrente]  
Quindi agisce in due direzioni? 
Ciao e grazie
Prometeo
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 ha scritto nel messaggio
news:d4ecgl$5li$1...@news.newsland.it...

Penso che l'errore consista nella sintassi:
DoCmd.Requery
Ciao
--
kaloma

 ha scritto nel messaggio
news:d4ecgl$5li$1...@news.newsland.it...

Ciao Prometeo,
prova a riassegnare il recordsoucrce alla tua sottomaschera dopo l'aggiunta
del record:
me.TuaSottomaschera.form.recordsource="Select * from TUATABELLA"
Ciao, buona domenica

 kaloma
Grazie, ma non funziona lo stesso, anche perchè mi sembra che l'utilizzo
dell'oggetto docmd in questo caso,(Comando docmd.Requery della
sottomaschera lanciato da pulsante sulla form principale) 
non sia adatto in quanto funziona solo con l'oggetto attivo.
Ma ripeto, l'istruzione Oggetto.Requery da sola tramite pulsante o timer
funziona e mi restituisce a video il recordset aggiornato, ma se è
lanciata in sequenza alla modifica del recorset non visualizza le
modifiche.
Ciao


 Ciao, buona domenica
Ciao Sandro, ti ringrazio ma non funziona, anche perchè sia la maschera
che la sottomaschera sono già costantemente associate tramite query
all'origine dati.
Si tratta solo di forzare la rilettura dell'origine dati  ed il metodo
requery mi sembra il modo giusto, anche perchè se comandato da solo
tramite pulsante o timer funziona! solo se lanciato in sequenza alla
modifica del recordset non visualizza le modifiche.
Ciao



Mettici prima il setfocus e poi il requery
MAssimiliano
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Prometeo
Mi è capitato qualche volta (però non mi pare con
Requery) di dover inviare un comando da dentro
una sub due o tre volte perché Access, in
tutt'altre faccende affacendato, alla prima non dava udienza.
Prova anche tu con Requery, chissà...
Bruno

 wrote in message
news:d4ecgl$5li$
1...@news.newsland.it

Ciao Prometeo.
Innanzitutto chiarisco che nè RECALC nè REFRESH sono metodi
che servono a questo scopo.
L'istruzione corretta è REQUERY.
Questo problema avviene se con ADO ti sei connesso direttamente
al BE(JET), se al posto di ADO usi DAO oppure una SQL_ACTION
non succede.
Purtroppo mi ero scontrato anch'io con questo problema che
trattai anche con Giorgio Rancati circa un'anno fà.
Io non potendo rinunciare ad ADO ho risolto rendendo la
FORM associata al recordset ADO invece che alla Tabella.
In pratica mi apro una COonnection a livello GLOBALE e su
quella estraevo il Recordset via OLEDB_PROVIDER ed assegnavo
alla Form il Recordset.
In qusto modo ottenevo il risultato di avere una Form Associata
e sincrona.
Il tuo problema non credo sia risolvibile, però se non hai
in previsione di passare a MSDE(con ADP) ti consiglio di
tornare su DAO o al massimo di fare un test invece di usare Recordset
di usare una Query ACTION.
Fammi sapere.
@Alex  
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 @Alex  
Ciao Alex e grazie 
La tua risposta mi conforta, perlomeno adesso so che il problema esiste ed
il mancato funzionamento non è causato da un errore sul metodo usato.
Ho notato anch'io che l'aggiunta di records tramite Query di comando
visualizza istantaneamente l'aggiornamento.
Premetto che a parte le query di comando ho iniziato a gestire recordset
da codice da non molto tempo e non conoscendo DAO, pensando che via via
scomparisse, per problemi di tempo ho scelto di passare subito a studiarmi
un pò ADO. 
Per la procedura in questione, dovrei lasciare aperta la possibilità in
futuro di passare agevolmente ad un BE basato non su Jet e quindi forse è
il caso di usare ADO, anche se forse una SQL_ACTION  teoricamente dovrebbe
funzionare,(Però mi pare  esistano diversi dialetti SQL).   
Intanto voglio fare delle prove sull'associazione tra form e recordset ADO
da te suggerita, per acquisire maggiore dimestichezza con la gestione dei
recordset.
Per risolvere il  problema specifico [Requery] per ora utilizzo l'evento
[su Timer] che per funzionare non deve avere tempi troppo brevi e non è
generalizzabile in quanto toglie la possibilità nel caso servisse di
utilizzare l'evento per altri scopi, poi proverò ancora a cercare una
soluzione alternativa.
Saluti


 MAssimiliano
Grazie Massimiliano, ma il setfocus sulla sottomaschera è uno dei tanti
tentativi che ho già fatto inutilmente.
Evidentemente come dice Alex si crea un problema quando l'Update è stato
fatto con ADO  direttamente al BE.
Eppure basta che il metodo venga lanciato successivamente per funzionare!


 Prometeo
Direi che la scelta di ADO nell'ottica da te impostata è
conveniente, ma il linguaggio SQL è tendenzialmente
standard, SQL_JET un pò meno ma direi accettabile
come compromesso.
Ti consiglio di usare il Metodo EXECUTE sull'Oggetto
Connection con ADO per usare una Query Action.
Non usare sistemi empirici per ottenere quello che serve
ma sforzati di usare il metodo corretto al fine di non avere
il problema.
Usando Pezze su Pezze non è mai un bel modo di procedere 
con lo sviluppo.
Buon lavoro.
