Newsgroup: it.comp.appl.access
Titolo: funzione eval

ciao a tutti!!
Nel codice inizializzo due variabili: myVariabile1 e myVariabile2 a cui 
assegno il valore che mi interessa. Con queste due variabili devo 
eseguire un'operazione matematica.
Da un campo di una tabella leggo per esempio:
  myVariabile1 - myVariabile2 
Scrivo nel codice:
strFormula= miaTabella!mioCampo 
dblValore= eval (strFormula)  'strformula="myVariabile1 - myVariabile2"
A questo punto si verifica l'errore 2482 "Impossibile trovare il 
nome 'myvariabile1' specificato nell'espressione.
Qual'è la sintassi corretta?
Grazie, 
      Paolo
Inviato da 
www.mynewsgate.net

       Paolo
Non ho mai usato cosě la funzione Eval....!
Prova a scrivere una Funzione del tipo:
Public Function Differenza() as variant
    Differenza=myVariabile1 - myVariabile2
End Function
Poi nel tuo codice scrivi:
strFormula= miaTabella!mioCampo
 dblValore= eval (strFormula)  'strformula="Differenza()"
Ciao.
@Alex.

 @Alex.
Grazie per l'attenzione!!!
..Forse non ho capito la tua risposta, ma probabilmente non mi sono 
spiegato bene. Ci riprovo.
Ho una serie di variabili a disposizione nel codice. A seconda della 
situazione devo eseguire delle operazioni matematiche tra due o più di 
queste variabili. Ho pensato di affrontare questa cosa creando una 
tabella con i campi "IDSituazione", "Formula".
In "Formula" scrivo le variabili e l'operatore matematico (es. var1 - 
var2).
Il problema è che quando cerco di applicare la funzione {Eval (miatabella!
miocampo)} il valore del campo fromula viene restituito ed interpretato 
come stringa {cioè diventa Eval("var1 - var2"), che ovviamente da errore} 
e non come due variabili con l'operatore "-" {cioè Eval (var1 - var2), 
che funziona perfettamente}.
Quindi io dovrei avere la possibilità di applicare Eval direttamente al 
valore del campo formula. Si può (Oppure in che altro modo potrei 
affrontare il problema?
Ciao,
      Paolo
Inviato da 
www.mynewsgate.net


In parte avevo capito, ma in effetti credo che no si possa fare quello
che chiedi.
Eval funziona come ti accennavo se lo usi per richiamare una Funzione
oppure un Riferimento ad un Controllo, ma non può interpretare
myVal1 come una variabile.
Per questo ti consigliavo di attribuire MyVal1 ad una Funzione.....!
Quindi MyVal1 diventando una Funzione che non fa altro che
recuperare il valore dalla Variabile funziona...., ma devi scrivere:
Risultato=Eval("MyVal1()")-Eval("MyVal2()")
Dove avrai che MyVal1 è una Function eMyVal2 un'altra....!
Per le conoscenze che ho io non è conveniente eseguire questo tipo di
gestione per quello che vuoi ottenere, ma se è necessario credo sia
l'unica soluzione.
Eventualmente se proponi meglio la relazione Causa-Effetto (in oratica
quello che devi fare) si può provare a trovare alternative.....!
Ciao.
@Alex.

 @Alex.
vedo che non sono solo io che quando ho dei "tarli" non guardo data e ora per 
lavorare eheheheh.
Mentre mi studio la tua risposta provo a spiegarti la Causa-Effetto
L'applicazione servirà per creare mobili che verranno realizzati su misura.
L'inserimento dei pezzi avviene in modo parametrico.
Es. Dato un mobile con FiancoSx e fiancoDx, se devo inserire la base posso 
scegliere tra diversi tipi di inserimento. Per es. potrò scegliere il tipo 
{"Tra due Pezzi" (Pezzo1=FiancoSx, Pezzo2=FiancoDx)}. A questo punto avrò per 
es.
Lunghezza.Base=Lunghezza.Mobile-Spessore.FiancoSx-Spessore.FiancoDx.
Se gestisco i tipi di inserimento da codice irrigidisco l'applicazione, cioè 
se l'utente vuole aggiungerne uno nuovo devo intervenire io per programmare; 
per questo ho pensato di utilizzato una tabella (sigh).
Spero di essermi spiegato abbastanza, ancora grazie
ciaoooo
       Paolo
 
Inviato da 
www.mynewsgate.net

"paolo p." <21...@mynewsgate.ned.invalid> ha scritto nel messaggio
news:200311231...@mynewsgate.net...

Chiaro come il Sole, peccato che da me c'è nebbia....!
Ho capito, ma mi viene sempre + forte di suggerirti la Funzione Generica.
Se strutturi la Funzione in modo da passare i Parametri e cosa deve fare
è come se ti fossi fatto la Tabella con le Operazioni Elementari.
Public Function Ricalcolo(Mode as integer,Misura1 as long, Misra2 as Long)
as long
    Select Case Mode
        Case 1
               ricalcolo=misura1-Misura2
        Case 2
                'eccetera......!
    End select
End Function
Spero di averti dato una soluzione valida piuttosto che averti fatto perdere
tempo....!
Ciao.
@Alex.

 
Ok. Mi sa che veramente non c'è altra strada. Grazie mille
Paolo
Inviato da 
www.mynewsgate.net

paolo p. ha scritto:


Potresti scrivere una funzione che legga la stringa "var1-var2" e
sostituisca i nomi delle variabili con i loro valori, per ottenere una
stringa tipo "45,7-12,3" che poi puoi passare ad Eval per il calcolo del
risultato.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 
intanto Grazie, ...ma come?
E' proprio quello che cercavo di fare
ciao Paolo
Inviato da 
www.mynewsgate.net

 ha scritto:
CUT> 


Chiamiamo "expNomi" l'espressione con i nomi delle variabili ed "expVal"
quella con i valori.
Supponi di avere un'espressione cosě: 
expNomi = "var1+var2-12"
devi scorrere la stringa finchč incontri un operatore (- + * /).
In questo caso la scorri finchč incontri il primo "-" e ottieni "var1".
Adesso accodi il valore di questa variabile e l'operatore ad expVal.
Il valore della variabile lo ricavi cosě:
Select case strNomeVar
  Case "var1": expVal=expVal & cstr(var1)
  Case "var2": expVal=expVal & cstr(var2) 
  Case ....
End select
Alla fine otterrai in expVal un'espressione tipo
"27,4+32-12"
che puoi passare ad Eval() per il calcolo.
Ovviamente i nomi di variabile che puoi usare nell'espressione sono
limitati, saranno solo quelli che valuti nel Select. Devi gestire (con
Case Else) anche il caso in cui venga inserito un nome variabile
sbagliato, magari mostrando un messaggio di errore.
Se vuoi gestire anche i calcoli con le parentesi devi usare la funzione in
modo ricorsivo.


 Namor
..e facci sapere, se riesci a farlo funzionare!



CUT>

 Mica male, ora ci provo e se va....wow!!!
grazie mille
Paolo