Newsgroup: it.comp.appl.access
Titolo: controllo casella combinata con un SELECT con maschere continue

Ciao a tutti.
Una cosa che mi sembrava banale mi ha riservato una brutta sorpresa.
A seguito di una scelta in un controllo casella combinata vorrei
cambiare l'origine riga di un altro controllo casella combinata sulla
stessa linea.
Il problema è che quando scelgo un valore nel primo controllo la
modifica all'origine riga ha efficacia su tutti i controlli (non solo su
quello della stessa linea) avendo come effetto collaterale quello di far
sparire il valore visualizzato (ma non di cancellarlo), perché cambia la
condizione WHERE della SELECT associata al controllo.
Esempio:
i controlli sono tipoPiatto e piatto
scelgo tipoPiatto = "PRIMI"
ed in piatto posso scegliere tra vari primi, seleziono "SPAGHETTI ALLA
CARBONARA"
Scendo alla seconda linea, scelgo tipoPiatto = "SECONDI" e come per
magia "SPAGHETTI ALLA CARBONARA" sparisce; scelgo tra i secondi
"SCALOPPINE AL LIMONE"
Adesso se sulla terza linea riseleziono tipoPiatto = "PRIMI", "SPAGHETTI
ALLA CARBONARA" ricompare dalla nebbia, mentre spariscono le scaloppine.
Sebbene i valori alla fine vengano perfettamente conservati, già vedo
l'utente che salta sul PC con 3 martelli e scassa tutto. Consigli?
Thanx
giaconet

 ha scritto nel messaggio
news:ana1rb$c5sm1$1...@ID-71483.news.dfncis.de...

Se ci pensi è normale visto che le caselle combinate sono solo 2 e non due
per ogni riga, quindi, quando modifichi la proprietà di una di esse,
l'effetto si riperquote su tutte le righhe che visualizzi.
Ti consiglio di risolvere così: creati due query per l'origine riga della
seconda casella combinata (quella dalla quale selezioni il piatto).
La prima chiamala Query1 e deve avere un codice SQL identico a quello che
usi ora , ovvero deve essere una query parametrica, dove i parametri sono
rappresentati dal valore della prima query.
La seconda la chiami Query2 e deve essere uguale a Query1 ma non deve essere
parametrica, ovvero non deve contenere la clausola WHERE, tale per cui
visualizza tutti i piatti e non solo quelli del tipo piatto selezionato con
la prima query.
A questo punto, a fronte dell'evento "Su corrente" della maschera imposta
come origine riga della seconda casella combinata Query2 (quella senza
parametri) e fai un Requery della seconda casella combinata.
A fronte dell'evento "Dopo aggiornamento" della prima casella combinata
imposta come origine riga della seconda casella combinata Query1 (quella
parametrizzata) e fai un Requery della seconda casella combinata.
A fronte dell'evento "Dopo aggiornamento" della seconda casella combinata
imposta nuovamente l'origine riga della seconda casella combinata con Query2
(quella senza parametri) e fai un Requery della seconda casella combinata.
Così facendo il contenuto delle seconde caselle combinate delle righe
precedenti sparirà solo nel momento in cui effettui la selezione sulla prima
casella combinata (selezione del tipoPiatto) ma ritornerà tutto a posto dopo
che avrai effettuato la selezione sulla seconda casella combinata
(selezione del piatto) ed inoltre non avrai spiacevoli sorprese quando apri
la maschera.
Nella struttura della maschera, come origine riga della seconda casella
combinata usa Query2 (quella non parametrizzata).
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------


Si, avevo pensato ad una cosa del genere (non era ancora a questo
livello), ma onestamente trovo inaccettabile far sparire anche solo per
un istante il contenuto del campo.
Grazie. Passerò a maschera singola.
Bye
giaconet