Newsgroup: it.comp.appl.access
Titolo: Codice vba

 Ringrazio coloro che mi aiuteranno a risolvere il mio problema.
Ho creato una routine su un controllo sull'evento after update il quale
secondo una serie di condizioni if mi testa il da farsi.
Mi spiego :
Private Sub PIPPO_AfterUpdate()
If PIPPO = "PLUTO" And PAPERINO = 201 Or 202 Or 210 Or 214 Or 218 Or 222 Or
225 Or 228 Or 238 Then
CLARABELLA.Value = "FELICE"
End If
Cio che mi chiedo ..c'è un modo per ovviare al problema delle infinite OR?
Ho provato con una select CIOè PAPERINO = SELECT NOMECAMPO FORM TABELLA
WHERE CAMPO = VALORI NUMERICI
Purtroppo non funziona.Grazie per l'aiuto.Felicità a tutti !
--------------------------------
Inviato via 
http://usenet.libero.it

 Purtroppo non funziona.Grazie per l'aiuto.Felicità a tutti !
No, hai usato il metodo più veloce, l'alternativa che
hai usato è tutt'altra cosa, e non serve per definire una
condizione, ma definisce la condizione di una Clausola Where
in un istruzione SQL che serve per "Filtrare dati"....!
NOn è il tuo caso.
@Alex.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Purtroppo non funziona.Grazie per l'aiuto.Felicità a tutti !
Nelle query puoi usare:
WHERE campo In (201, 202, 210, 214, 218)
Negli If non puoi usare l'operatore "In", devi fare tutti i singoli test
con gli OR, ma come l'hai scritto tu non va bene, devi ripetere anche il
nome del campo:
If PIPPO = "PLUTO" And PAPERINO = 201 Or PAPERINO = 202 Or PAPERINO = 210
Or PAPERINO = 214 Or PAPERINO = 218 OR .....
altrimenti confronterà il valore di PAPERINO con il risultato
dell'espressione (201 Or 202 Or 210 Or 214 Or 218 Or .....) e non darà il
risultato che ti aspetti.
Namor
-- 
 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Namor
Sei sicuro...??????????????


 @Alex.
Mi hai fatto venire il dubbio e ho controllato, effettivamente funziona
anche così:
If variabile=valore1 or valore2 or valore3
Dà il comportamento che ho scritto io se gli metti le parentesi:
If variabile=(valore1 or valore2 or valore3)
così valuta il valore dell'espressione a destra dell'uguale prima di fare
il confronto.
Comunque mi sembra un comportamento strano perchè non segue le regole di
precedenza degli operatori segnate nella guida in linea, e nella guida di
If non viene citata questa possibilità.
Secondo la guida la precedenza è:
- operatori aritmetici
- operatori di confronto
- operatori logici
quindi questa espressione
If variabile=valore1 or valore2 or valore3
dovrebbe al limite essere valutata così
If (variabile=valore1) or valore2 or valore3
Adesso che so che c'è questa possibilità negli if, la trovo comoda per
evitare di ripetere il nome del campo più volte, ma:
1. potevano documentarlo nella guida
2. non so se funziona anche in visual basic o in altri linguaggi
Ciao.


 Namor
Ho fatto un'altro test, prova anche tu:
If 32 = 25 Or 47 Then MsgBox "Ciao!"
Dovrebbe essere così:
If (32 = 25) Or 47 Then MsgBox "Ciao!"
35=25 restituisce falso, cioè zero
zero Or 47 restituisce 47, cioè non falso, cioè vero
Quindi il comportamento è logico e bisogna ripetere sempre per intero
tutti i confronti separati dagli or:
If 32 = 25 Or 32 = 47 Then MsgBox "Ciao!"
che, per la precedenza degli operatori già citata, verrà valutata come:
If (32 = 25) Or (32 = 47) Then MsgBox "Ciao!"


 Namor
Non sò che dire, ma io la uso sia in VBA che VB4/5/6 da diverso
tempo....!
A me però pare che rispetti esattamente la precedenza logica
indicata, è solo una abbreviazione di scrittura.
Con le parentesi secondo me perde il senso della sintassi.
E un pò come se ripetesse il confronto di Uguaglianza con
le varie clausole aggiunte dall'operatore OR, c'è solo
una soppressione della Variabile.


 ha scritto nel messaggio
news:4953906eaca31552fa...@mygate.mailgate.org...

Scusate se mi infilo nella discussione, ma mi ha incuriosito molto .
Forse mi faccio venire troppi scrupoli, ma personalmente non mi azzarderei
ad uscire dalla sintassi classica di una condizione "if" che è la seguente:
If PIPPO = "PLUTO" And (PAPERINO = 201 Or PAPERINO = 202 Or PAPERINO = 210)
Then ...
Per diverse ragioni:
Questa è sicuramente funzionante anche in futuro.
E' una sintassi collaudata e valida anche in molti altri linguaggi di
programmazione.
Supponendo che un giorno tramite un' utility si voglia migrare verso chissà
quale altro linguaggio, oppure venga  prodotto da qualcuno (miraggio!), un
compilatore che trasformi un database Access in .exe, che fine farebbe una
sintassi come quella?   ...!!?
Mi sà che mi son messo a parlare del sesso degli angeli.
Comunque, se ci sono molti valori da confrontare la sostituirei con
If Pippo = "PLUTO" Then
    Select Case PAPERINO
        Case 201, 202, 210
            ....
        End Select
End If
Ciao a tutti.

 ha scritto nel messaggio
news:gpmeb.146409$hE5.4...@news1.tin.it...

No, anzi io sono pienamente in accordo con te.........!
Quello che ho sollevato era un dubbio sul fatto che
non funzionasse, non che fosse +/- corretta.
La condizione di Select...Case è almeno il 40%
più lenta del controllo If..Then.
Prova a verificarlo ciclando 1E6 di numeri, tanto per avere
un tempo stimabile.....!
Ciao.
@Alex.

 Ciao a tutti.
Non è un problema di compatibilità futura o con altri linguaggi. Il fatto
è che per ottenere il risultato voluto e cioè confrontare il valore di una
variabile con una serie di altre variabili o costanti, o usi il Select
Case come dici tu, o l'If con tutti i criteri ripetuti per intero per ogni
confronto.
Ho verificato che la forma
If variabile = valore1 Or valore2 Or valore3 Or ... valoreN
rispetta le precedenze degli operatori, nell'ordine: aritmetici, di
confronto e logici.
Quindi variabile = valore1 sarà valutata per prima e il risultato verrà
combinato in Or con gli altri valori.
Poichè Access, vba e credo quasi tutti i linguaggi di programmazione
considerano "True" un qualsiasi valore diverso da zero, ne risulta che un
confronto di questo tipo risulterà sempre essere vero se anche uno solo
dei valori di confronto da valore2 a valoreN abbia valore diverso da zero,
come si può verificare con un test del tipo:
debug.print 1=2 Or 3
questa espressione restituirà sempre e comunque "True" anche se 1 è
palesemente diverso sia da 2 che da 3.
L'unica espressione corretta per l'If risulta quindi essere questa:
If 1=2 Or 1=3
