Newsgroup: it.comp.appl.access
Titolo: Area di validità di una variabile.

In un modulo ho definito
    Public FRM As Form
e la uso in diverse sub e funzioni, ad esempio:
    Set FRM = Forms(NomePassatoAllaSub)
    Lungo = FRM.RecordsetClone.RecordCount
Ho preparato una funzione che, all'avvio di certe maschere, dice:
    Set FRM = Forms("mDatiGruppo" & dove)
L'idea è che altre funzioni di quel modulo, invece di dire ad esempio:
    Forms("mDatiGruppo" & dove).Recalc
avessero
    FRM.Recalc
Purtroppo, ottengo l'errore di run-time 91: variabile oggetto o
variabile del blocco With non impostata.
Dove sbaglio?
Grazie a tutti.
Riccardo Baldinotti


Ciao!
Non è che la form che stai passando alla funzione non è aperta?
Hai provato a mettere una interruzione sulla FRM.Recalc per vedere
com'è valorizzato l'oggetto FRM?
HTH
Popi


Ho provato, e mi compare la scritta con l'errore che dicevo.
Grazie
Riccardo Baldinotti


Quell'errore ti compare ... nella finestra delle variabili del debug?
Ovviamente hai anche provato a mettere l'interruzione già sulla
chiamata della tua funzione per vedere cosa succede e non hai trovato
alcun punto in cui la tua variabile perde il suo valore?
Popi

 Popi
Alla fine della funzione con il SET ho messo
MsgBox FRM.Name
e mi dà correttamente il nome della maschera.
Riccardo Baldinotti


Attenzione. Se per caso prendi errore o modifichi cose "delicate" 
mentre in debug, Access tende a distruggere le variabili pubbliche che 
vanno reinstanziate, ovviamente, soprattutto se oggetti.
Questa cosa mi ha fatto "inalberare" piu' di una volta i questi giorni.
-- 
ac (x=y-1)

 Riccardo Baldinotti
Ne ho scoperta una: la FRM è definita
Public FRM As Form
in un modulo diverso da quello delle funzioni che mi danno errore.
Ho notato però, aprendo la finestra delle variabili globali, che tre
variabili dichiarate in quel modulo, e modificate insieme al comando
SET, restano invece valorizzate.
Ho così aggiunto una
Dim FRM1 As Form
nel modulo che dà problemi e sostituito i riferimenti a FRM con
riferimenti a FRM1.
In questo modo non ho più errore e tutto funziona.
La soluzione c'è, ora mi manca di capirne il perché.
Riccardo Baldinotti


E se anche a te capita di "inalberarti", posso mettermi l'anima in
pace.
(i difetti dei grandi sono la consolazione dei mediocri).
Riccardo Baldinotti

 quel modulo?
Si, soprattutto se da qualche parte fai un set nothing o se hai qualche 
resume next e non testi l'errore, oltre a quanto gia' da me descritto.
L'altra cosa "tricky" avviene quando non c'e' option explicit dichiarato 
(qualche volta puo' sfuggire) e a te sembra di aver istanziato 
correttamente ma lo hai fatto per un nome inesistente che, generalmente, 
e' locale e quindi ha la "nothing" assicurata.
ad es. set fmr invece di set frm
-- 
ac (x=y-1)


Hai più di una dichiarazione di FRM in moduli diversi.
Popi


wrote:

Option Explicit è fisso in tutti i miei moduli! Non oso immaginare,
altrimenti, i guai.
Come dicevo, ho l'impressione che fra la SET e il mio click non accada
altro. Comunque, preso atto del fenomeno, avrò cura che le variabili
usate siano valide all'interno del proprio modulo.
A pensarci bene, mi è capitato di istanziare una RST pubblica in una
funzione e averne il Recordset disponibile anche in un'altra, ma non
ricordo se in tutti questi casi avevo un flusso ininterrotto o se
l'elaborazione terminava per poi essere avviata da un altro evento. E
magari un conto è un RST e un conto è un FRM.
Grazie a tutti per il confronto.
Riccardo Baldinotti


No, ho controllato. C'è un solo Public FRM in un modulo usato anche
come serbatoio di cose comuni.
Riccardo Baldinotti