Newsgroup: it.comp.appl.access
Titolo: liste opzioni e scelta con CASE

ho una sottomaschera in cui vi sono una casella di controllo (scelta) con
opzioni (vero,falso,neutro) ed un pulsante che apre un'altra maschera.
Su quest'altra maschera vi sono 15 pulsanti di opzione (si, no)
Quello che voglio ottenere è questo: se in questa maschera seleziono tutti
o anche uno solo di NO, la casella di controllo (scelta) mi evidenzia la
spunta sull'opszione falso, mentre se sono TUTTI SI, la casella (scelta)
mi spunta l'opzione vero. (l'Opzione neutro la vado ad aggiornare
manualmente per altri motivi non legati ad altre opzioni.
Come fare? che codice adottare?
avevo pensato a CASE, ma mi perdo nella sintassi!
oppure devo usare tanti if quanti sono i SI-NO, ma questo mi sembra poco
fattibile.
SOS
grazie
l.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 grazie
ehm...
operatore OR ?
Antonio 

 Antonio
su tutti i 15 pulsanti di opzioni? non è troppo complicata poi la gestione?
in effetti, tutti questi pulsanti appartenenti ad una tabella dati, non
devono fare altro che: 1) se sutti di valore 1 attivare l'opzione vero, 2)
se tutti 0 o anche uno solo di valore 0  e gli altri 1, attivare l'opzione
falso. Oltre tutto, se poi il valore 0 dovesse ritornare a 1, riattivare
l'opzione vero.
complesso?
l'operatore OR se ancora valido, lo uso sul comando if -then o su case
select? e su quale evento? prima di aggiornare della maschera o su cosa?


 ha scritto nel messaggio 
news:i80908$kna$1...@news.newsland.it...

va beh vah... tiriamo fuori lo sporco trucco, per i pigri che non vogliono 
scrivere tanto
ogni tuo pulsante lo chiami per esempio con lo stesso prefisso
puls_1
puls_2
...
puls_15
ti crei poi una sub public dentro la form
dentro ci metti un ciclo su tutti i control della form testando il nome
se inizia per puls_1 testi il valore
se ne trovi uno a 0 setti a false l'altro controllo, altrimenti lo metti a 1
fine
Antonio

 Su quest'altra maschera vi sono 15 pulsanti di opzione (si, no)
Basta che fai la somma dei valori presi dai tasti per tutti i tasti.
(Ipotizzo che nessuno sia a null)
S = me.t1.value + me.t2.value + ...
if S = -15 then
   sono messi tutti a VERO
else
   almeno uno di loro e' FALSO
endif
Oppure puoi fare (meglio) :
P = me.t1.value * me.t2.value * ...
if P = 0 then
   almeno uno e' a FALSO
else
   sono tutti a VERO.
endif

 wrote:
Se uno di questi e' a null, P dovrebbe dare Null se
non sbaglio.
Cio' significa che l' utente non ha effettuato una scelta
completa.
Per cui
dim P as VARIANT
P = me.t1.value * me.t2.value * ...
if isnull(P) then
   gestisci_scelta_incompleta( )
   exit sub
endif
if P = 0 then
   almeno uno e' a FALSO
   gestisci_Falso (  )
   exit sub
else
   gestisci_VEro( )
   exit sub
endif

 (Ipotizzo che nessuno sia a null)
Se non gli va di fare gli OR non gli va neanche di fare i +
Antonio 

 Antonio
antò!, non è che non mi va di fare gli OR, solo che sono perplesso nella
fluidità e velocità di esecuzione di tutti quei OR, tu mi suggerisci una
sub public (che è? un modulo?) ma non hai considerato che sono abbastanza
ignorante eh! e arrivare a fare quello che suggerisci la vedo difficile!
Quello che suggerisce radicale è una valida alternativa? (la vedo più
semplice e dettagliata per me.


 dim P as VARIANT



che dici, questo codice lo metto nell'evento "prima di aggiornare" della
maschera o dove? 
e per far aggiornare la maschera senza cambiare record? che dici , un
refresh nel tuo codice andrebbe bene?


 semplice e dettagliata per me.
Luigi caro, è necessario che tu cerchi informazioni sulle cose che ti 
vengono segnalate, altrimenti non evolverai mai nella programmazione.
Come fai a dire che gli or appesantiscono???
cosa appesantiscono?
il test di 15 condizioni messe in OR non pesa niente!!!!
lo devi solo scrivere, una volta per tutte, punto
quello che ti suggerisco implica che ti vai a vedere sugli help i controlli, 
i cicli, le sub
ma se non sai cosa è una sub public e non cerchi di capire cosa è, parliamo 
due lingue diverse
allora vai da qualcuno che ti fa il programma e basta, se vuoi imparare devi 
anche studiare!!!!
cmq e chiudo
public sub calcola()
dim ctl as control
for ctl in me.controls
  if 
ctl.name
 like "puls_" then
    if ctl.value = 0 then
      altro_controllo = false
      exit sub
    end if
  end if
next
altro_controllo = true
end sub
Antonio 

  if 
ctl.name
 like "puls_" then
ci mancava questo each
Antonio 

 l.
ciao Luigi
oltre quanto ti stanno suggerendo, prova a leggere questa discussione
del 23/09/2010:
"Ciclare controlli con più tag errore di runtime 9 indice non trovato 
nell'intervallo."
Daniele 

 Daniele
azz! quella è una discussione che ho aperto io!   :-))


 l.
smemorato  :D
Daniele 

e per far aggiornare la maschera senza cambiare record?
Se costruisci una sub private P( ) nella sub maschera
che contiene il mio codice, potresti ad esempio chiamarla
nell' evento after_update di ogni tasto (dei 15) della
sub maschera.

quei OR
Gli OR non vanno bene perche' se uno dei controlli e' null
ti danno errore.

 sub maschera.


 ha scritto nel messaggio 
news:1f567719-2b20-4d45...@l6g2000yqb.googlegroups.com...



benedetto radicale libero
nz(ctl1,0) OR ... OR nz(ctl15,0)
firulì, firulà
Cmq per la cronaca serviva l'AND non l'OR, visto che basta un solo valore 0 
per rendere tutto 0
Antonio 

 Antonio
mi dispiace antò, ma non arrivo a comprendere la tua spiegazione, sei
troppo avanti per essere compreso da me, e il tuo consiglio di studiare
ecc. non è applicabile in quanto la soluzione mi serve subito e non fra un
anno.
Ho chiesto aiuto al NG per questo, non per altro, sono cosciente che è
solo un tentativo e non posso pretentere nulla, pazienza! ne farò a meno.
grazie lo stesso.


 per rendere tutto 0
ho scritto infatti :
dim P as variant
P = ctl_01.value * ctl_02.value * ... * ctl_15.value
Il "+" l' ho suggerito ipotizzando che nessun controllo e' NULL.
Ciao.

 cosa intendi con una sub private P() un modulo? abbi pazienza!
sei capace di scrivere una routine d' evento ?
Credo di si. Allora appena sotto quella scrivi :
private sub P(  )
   ,,,
   ,,,
end sub

 l.
ammazza oh, te l'ho scritto tutto per esteso, bastava un copia incolla...
mah
Antonio