Newsgroup: it.comp.appl.access
Titolo: Strano comportamento delle combo box

Salve a tutti.
Ho una maschera associata alla tabella Ordini e una combo box non
associata che prende i dati della lista dalla tabella Clienti.
Nel momento in cui scelgo un cliente dalla combo, devo visualizzare
tutti gli ordini di quel cliente, se la combo è vuota, la maschera deve
restare vuota.
Per far questo, nell'evento Change della combo modifico il record source
della maschera con una select.
Il problema è il seguente: se dopo aver scelto un cliente (ed aver
ricevuto normalmente l'elenco di ordini) cancello il contenuto della
combo, la maschera non viene svuotata, ma conserva l'elenco ordini
attuale.
Ho provato a fare l'esecuzione passo passo e, sorpresa, nell'evento
Change della combo il valore della stessa è ancora quello che aveva
subito prima della cancellazione.
In pratica è come se la cancellazione del testo della combo non
provocasse un cambio nel valore della stessa (io mi sarei aspettato che
in questa situazione la combo fosse posta a Null) o almeno questo non
avviene durante l'evento Change.
Ora, premesso che (per motivi che è troppo complesso spiegare) non posso
usare una soluzione a sottomaschera (lo so sarebbe stato troppo facile)
e che ho provato anche a gestire l'evento "Non in elenco" senza
risultati, c'è qualcuno che sa come gestire tale meccanismo?
Grazie, Tonio

 avviene durante l'evento Change.
Prima di tutto hai sbagliato evento.
Non dovevi usare l'evento change ma l'evento DopoAggiornamento.
Comunque non sono daccordo che esistano situazioni in cui non sia possibile
usare maschera e sottomaschera, al limite potevi fare una maschera che
contenesse solo la combo.
Sib

 Sib
A questo punto mi vedo costretto a dilungarmi nella spiegazione
effettiva del problema (l'avrei risparmiato, ma mi ci hai tirato per i
capelli ;o) ).
In realtà ho 3 combo box che filtrano 3 campi diversi (per es. Cliente,
TipoProdotto, Modalità), questi 3 campi compaiono insieme solo nella
tabella Ordini, per cui non so quale tabella dovrei associare alla
maschera master.
A complicare la cosa c'è il fatto che questa maschera non serve solo a
leggere gli ordini, ma anche ad inserirne di nuovi, questo significa che
ad un certo punto devo poter scegliere una combinazione nuova dei 3
campi ed avere nella sottomaschera un record vuoto da riempire.
Ho provato a fare una query del tipo "Select Distinct Cliente,
TipoProdotto, Modalità From Ordini" e ad associarla alla maschera master
usando i 3 campi come collegamento alla sottomaschera (che è associata
direttamente ad Ordini), ma mi combina casini; per es. se seleziono un
nuovo valore in una combo, mi dice "Recordset non aggiornabile", se
cerco di creare una combinazione non ancora utilizzata delle 3 combo non
mi mostra il record vuoto, ecc.
L'unica soluzione accettabile che ho trovato è quella da me postata.
Comunque, nel frattempo sono riuscito a risolvere il problema: gestisco
sia l'evento Change che l'evento Exit di ogni combo, infatti l'evento
Exit mi da sempre il valore aggiornato della combo (anche Null se
cancello il contenuto). Sono obbligato a gestirli entrambi perché se uso
solo l'Exit, per vedere il cambiamento devo appunto uscire dal
controllo. In pratica è come se l'evento Change mi servisse ad
aggiornare i dati quando cambio il contenuto di una combo, mentre
l'evento Exit mi servisse a svuotare la maschera quando ne annullo il
contenuto.
Lo so è una soluzione incasinata, ma è l'unica che mi da il
comportamento che voglio.
Se riuscite a trovare qualcosa meglio fatemelo sapere.
Ciao e grazie
Tonio

 solo l'Exit,
CUT
Come ti dicevo: DopoAggiornamento.
Sib

 Grazie, Tonio
Mah...io avevo un problema simile al tuo :
Io applico un filtro sull'evento Change nella Combo...anche con piu' combo a
cascata
ed ho trovato un modo per tornare alla situazione originale(tutti i record)
forse poco elegante
o poco professionale..non so ma funzia ed è velocissima.
Piccolo botton con una bella X sopra e sull'evento click :
Docmd.ShowAllRecords
Me.Requery
Lo so , lo so ...Me.Requery sembra inutile dopo uno ShowAllRecords, ma
senza,
l'aggiornamento della maschera era piu' lento e a volte dovevo cliccare 2
volte sul botton.
Cosi' invece è una scheggia.
Non so se puo' servirti o è poco ortodossa come soluzione...ma....
Ciao
Eddie

 Sib
Ok, ok hai ragione tu. Chissà perché ero convinto che non funzionasse.
Comunque grazie e alla prossima.
Tonio

 Eddie
Grazie per il suggerimento, lo terrň presente
Tonio