Newsgroup: it.comp.appl.access
Titolo: avere la scelta tutti in una c.combinata

Ciao a tutti, sto perdendo la testa per avere in una casella combinata con
una serie di valori anche la scelta tutti.
P.S. ho visto il consiglio del msg nel sito comune ma non mi funziona.
Infatti con una query di unione riesco ad avere nella casella il valore
tutti ma quando lo seleziono invece di darmi tutti i valori mi scrive tutti
nella sottomaschera.
 Sono disperato aiutatemi!
Michele

 wrote in message
9iu2ui$e63$1...@lacerta.tiscalinet.it...

La query della sottomaschera deve avere un criterio where del tipo
like
iif([forms]![tuaform]![tuacombo]="tutti";"*";[forms]![tuaform]![tuacombo])
Antonio


Scusami Anonio ma non ci riesco!
Ho aggiunto nella tabella relativa alla casella combinata la scelta tutti e
poi sono andato, come da listato, ad inserire la riga da te consigliatami.
Quando scelgo <tutti>, nella sottomaschera mi compare <tutti> come testo e
non tutti i records.
AIUTOOOOOOOOO
SELECT Aziende.CodiceAzienda, Aziende.Denominazione, Aziende.CodAgente,
Aziende.Attivita, Aziende.Citta_ID
FROM Aziende
WHERE (((Aziende.CodAgente) Like
IIf([forms]![scelta]![codagente]="<tutti>","*",[forms]![scelta]![codagente])
))
ORDER BY Aziende.CodiceAzienda DESC;

se ti puo' essere di aiuto,
la query mi funziona. infatti aprendo solo la query e digitando alla
richiesta <tutti> mi fa vedere tutti gli articoli. Come e' possibile che non
mi funziona con maschera e sottomaschera?
cmq ho creato una maschera vuota dove ci ho messo la casella combinata poi
ho trascinato la query nella maschera ed ho collegato i campi codagente.
funziona tutto tranne quel maledetto <tutti> che viene riscritto nella sm.
ciao antonio
e scusami ancora

 ha scritto nel messaggio
news:9iuemi$hml$1...@lacerta.tiscalinet.it...

Scusate se mi intrometto, ma poichè la FAQ cui si fa riferimento l'ho
scritta io mi sento chiamato in causa.
L'sempio della FAQ presupponeva che la casella combinata avesse due colonne:
nella prima conteneva un ID di tipo Numerico, e la seconda una descrizione
di tipo testo.
La tua casella combinata quante colonne ha?
Se anche la tua casella combinata ha due colonne come previsto nella FAQ,
allora nella iif il confronto non lo devi fare con "<tutti>" ma con l'ID che
ha dato al record con descrizione <tutti> che hai inserito nella tabella che
è origine riga della casella combinata (nell'esempio della FAQ con 0).
Se invece la casella combinata ha una sola colonna e CodAgente è un campo di
tipo Testo, è sbagliato il modo in cui hai scritto la Like, che la hai
scritta con una sintassi per una ricerca in un campo di tipo Numerico e non
di tipo testo.
Il fatto che tutto funzioni aprendo direttamente la query introducendo il
parametro in una finestra di dialogo è naturale, ma non puoi simulare una
casella combinata a due colonne con una finestra di dialogo.
Per trovare la giusta soluzione al tuo problema occorre sapere:
1) Quante colonne ha la casella combinata.
2) Che tipo data ha il campo CodAgente
3) Il codice SQL della query che è origine riga della casella combinata.
4) Se invece come origine riga della casella combinata hai, invece di una
query, direttamente una tabella, la struttura di tale tabella.
Non capisco infine per quale motivo non hai usato come origine riga della
casella combinata una query unione anziché inserire un record fittizio nella
tabella.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

Ok, cerco di essere chiaro.
Queri di unione:     Tuttiagenti
SELECT "<TUTTI>"  as codagente from agente
 UNION SELECT  agente.codagente FROM agente;
Query di selezione:     Azienda
SELECT Aziende.CodiceAzienda, Aziende.Denominazione, Aziende.CodAgente,
Aziende.Citta_ID, Aziende.Attivita
FROM Aziende
GROUP BY Aziende.CodiceAzienda, Aziende.Denominazione, Aziende.CodAgente,
Aziende.Citta_ID, Aziende.Attivita
HAVING (((Aziende.CodAgente) Like
IIf([forms]![sceltaopzioni]![codagente]="<tutti>","*",[forms]![sceltaopzioni
]![codagente])));
ho creato una maschere nominata SCELTAOPZIONI ed una sottomaschera SMAZIENDA
(creata trascinando la query di selezione)
in campi master e secondari ci ho messo CODAGENTE
Nell'origine riga della casella combinata ci ho messo: Tuttiagenti
La tabella AGENTE ha una sola colonna ed  è CODAGENTE di tipo testo.
Spero di non aver omesso nulla
Ancora grazie
Michele

 ha scritto nel messaggio
news:9iv238$o3b$1...@pegasus.tiscalinet.it...

Le cose coì non ti funzioneranno mai, e non per colpa della query di
selezione o della query unione.
Infatti, avendo creato una struttura maschera/sottomaschera nella quale hai
impostato le proprietà del controllo sottomaschera Collega campi secondari e
Collega campi master ambedue a CODAGENTE, quando selezioni nella casella
combinata CODAGENTE contenuta nella maschera principale il valore "<TUTTI>",
Access ti visualizzerà nella sottomaschera SMAZIENDA solo i record che nel
campo CodAgente hanno come valore <TUTTI>, ovvero nessun record. Hai così
vanificato tutto il lavoro di selezione che hai impostato nella query
Azienda; in effetti la selezione della query è esatta (infatti se apri
manualmente la query ti verranno mostrati tutti i record), ma poi viene
introdotto un ulterire filtraggio tramite le proprietà Collega campi
secondari e Collega campi master; é quel filtro che non ti fa comparire
nulla nella sottomaschera SMAZIENDA se hai selezionato <TUTTI> nella casella
combinata.
Quello che hai fatto funziona solo se non selezioni nella combo il valore
<TUTTI>.
Quindi la soluzione più veloce (anche se non la più elegante) per risolvere
il problema è a mio avviso questa.
1) Butta via la maschera SCELTAOPZIONI.
2) Fai in maniera che la maschera SMAZIENDA abbia una visualizzazione a
Maschere continue ed abbia come origine record la query di selezione che hai
chiamato Azienda.
3) Inserisci nella intestazione (bada bene nell'intestazione e non nel
corpo) della maschera SMAZIENDA la casella combinata alla quale devi però
dare come nome CodiceAgente (non più CODAGENTE altrimenti avresti nella
maschera due controlli con lo stesso nome).
4) La casella combinta CodiceAgente deve avere le stesse caratteristiche di
quella che usi attualmente: una sola colonna e come origine riga la query
unione Tuttiagenti, così come l'ha preparata.
5) Modifica il codice SQL della query Azienda nel seguente modo:
SELECT Aziende.CodiceAzienda, Aziende.Denominazione, Aziende.CodAgente,
Aziende.Citta_Id, Aziende.Attivita
FROM Aziende
GROUP BY Aziende.CodiceAzienda, Aziende.Denominazione, Aziende.CodAgente,
Aziende.Citta_Id, Aziende.Attivita
HAVING (((Aziende.CodAgente) Like
IIf([Forms]![SMAZIENDA]![codiceagente]="<TUTTI>","*",[Forms]![SMAZIENDA]![co
diceagente])));
6) A fronte dell'evento "Dopo aggiornamento" della casella combinata
CodiceAgente genera questa riga di codice VBA:
Me.Requery
A questo punto apri direttamente la maschera SMAZIENDA, effettua la scelta
nella casella combinata: dovresti ottenere ciò che ti serviva (almeno
spero).
Prova e facci sapere.


Pensandoci bene c'è una soluzione molto più veloce per far funzionare tutto.
Cancella CODAGENTE dalle proprietà Collega campi secondari e Collega campi
master; così facendo elimini il secondo filtro di cui parlavo nel mio
messaggio precedente, così che la selezione dei record verrà effettuata solo
in base a quanto hai stabilito nella query Azienda.
Se anche il controllo sottomaschera inserito nella maschera SCELTAOPZIONI si
chiama anche lui SMAZIENDA (come la sottomaschera), devi però generare, a
fronte dell'evento "Dopo aggiornamento" della casella combinata CODAGENTE la
seguente riga di codice VBA:
Me!SMAZIENDA.Requery
A questo punto scegli tu la soluzione che preferisci.


ok Roberto funziona tutto. ho utilizzato il requery.
un'ultima cosa: volendo usare un filtro intelligente su combo tenendo
presente la combo precedente, del tipo LIKE
NZ([forms]![miaforms]![comboprecedente];"*") come e dove devo collocare
questa riga? per caso nella query di unione? se si tenendo presente che la
query union è del tipo
SELECT "<tutti>" as attivita
  from agente
 UNION SELECT  attivita.attivita  FROM attivita;
come dovrà essere?
ancora infinitamente grazie
Michele

 ha scritto nel messaggio
news:9j166m$ae2$1...@pegasus.tiscalinet.it...

Le due soluzioni sono in alternativa.
La procedura che hai ora attuato ti visualizza tutti i record se tu
selezioni >TUTTI> dall'elenco della casella combinata.
L'altra soluzione invece ti visualizzerà tutti i record nel caso in cui la
casella combinata è vuota (se hai già selezionato qualcosa devi
cancellarla).
Facendo riferimento all'esempio discusso precedentemente, in questo caso non
devi crearti una query unione; come origine riga della casella combinata
scriverai:
SELECT agente.codagente FROM agente;
La query Azienda, che è origine record della sottomaschera SMAZIENDA, dovrà
avere il sequente codice SQL:
SELECT Aziende.CodiceAzienda, Aziende.Denominazione, Aziende.CodAgente,
Aziende.Citta_Id, Aziende.Attivita
FROM Aziende
GROUP BY Aziende.CodiceAzienda, Aziende.Denominazione, Aziende.CodAgente,
Aziende.Citta_Id, Aziende.Attivita
HAVING (((Aziende.CodAgente) Like
Nz([Forms]![SCELTAOPZIONI]![codagente],"*")));
Naturalmente fermo restando il Me!SMAZIENDA.Requery a fronte dell'evento
"Dopo aggiornamento" della casella combinata.
Però penso che la soluzione con la selezione di <TUTTI> dall'elenco della
casella combinata è a mio avviso più elegante e più intuitiva per
l'operatore.
