Newsgroup: it.comp.appl.access
Titolo: Aiuto per visibilità delle variabili

Non mi č chiaro come funzionano le variabili in Access 97. Chi mi
chiarische?
In pratica:
1) USO DELLE VARIABILI STATIC:
Se io uso una variabile static all'interno di una funzione (che sta ad es.
in una classe o in un modulo) quando richiamo successivamente quella
funzione, la variabile č sempre vuota (inizializzata a 0 se numerica, a data
vuota se date ecc.)
Dal manuale sembra che il valore nelle static sia mantenuto finchč č in
memoria quel modulo. Ma se io ad es. apro una finestra (nel cui modulo di
classe ho una fn con la static che mi interessa), quando chiudo la finestra,
torno al menu e poi richiamo nuovamente la finestra... il valore della
static č sparito!!!
In "C" e in altri linguaggi invece le static mantengono il valore finchč
l'eseguibile č attivo!
2) PARAMETRI BYREF:
Il manuale dice che le variabili passate ad una fn sono per default by
reference, ovvero č possibile modificarne il valore.
Ebbene, a me non funziona cosě, infatti nella fn chiamante il valore NON č
cambiato, ma č sempre quello originale. Ad es.:
function Pippo( intValue as integer )
    ' intValue č 10
    call pluto( intValue)  ' che cambia raddoppiando
    ' intValue č ancora 10
end function
function Pluto( intValue as integer )
    intValue =intValue * 2
    ' qui intValue č 20!
end function
L'unica soluzione trovata č di far ritornare il valore calcolato come valore
di ritorno della fn, ma se avessi piů parametri e volessi cambiarne piů di
uno?
Grazie dell'aiuto
--
*****************************
** Harry Evans - Bolzano
** Clipper Specialist & Magician
** e-mail:  
harry...@tin.it
*****************************
---------------------------------------------------------
->C.N.G.E.I. - Sezione di Bolzano
->
www.edp-progetti.it/cngei.bz
---------------------------------------------------------

Per prima cosa sarebbe bene che ti rilegessi l'help a questo proposito che
mi sembra abbastanza chiaro.
Poi per la domanda 1):
devi stare attento perché il modulo di classe che appartiene soltanto alla
finestra corrispondente è da considerare come un eseguibile a parte che
nasce con la finestra e muore con la sua chiusura...
Questo è la particolarità delle classi in Access, cha fà secondo me la loro
forza, perché poi rendere dei codici più indipendenti fra una finestra e
l'altra. Se hai esigenze di conservare dei valori fra una finestra a
l'altra, ovviamente rimane la soluzione di scrivere quelle funzioni e sub in
vari moduli, dove con un bel shared alle variabili di tua scelta, ci puoi
giostrare come vuoi. I moduli vengono attivati al momento della chiamata di
una loro routine (se non erro) e comunque le variabili sharate (uaoh che
neologismo!) vengono annullate alla chiusura di tutto il database che le
contiene.
Per la domanda 2):
per esperienza personale ti posso dire che non bisogna mai mettere lo stesso
nome fra la variabile che porti alla funzione/subroutine (nel tuo esempio
pluto(intValue) nella funzione pippo) e quella che ne prende il valore (in
function pluto (IntValue)). Questo non funziona e può generare in certi casi
anche degli errori. Per evitare dichiarazioni di variabili inutilmente
complicate, ti consiglo di cambiare il nome della variabile all'interno di
una function/sub. In questo esempio sarebbe:
function Pippo( intValue as integer )
     ' intValue è 10
     call pluto( intValue)  ' che cambia raddoppiando
     ' intValue è ancora 10: ma certo!!
     Pippo=Pluto 'per esempio
end function
 function Pluto( intValuePluto as integer )
     intValuePluto =intValuePluto * 2
     ' qui intValuePluto è 20!
    Pluto=intValuePluto
end function
Ciao