Newsgroup: it.comp.appl.access
Titolo: Filtrare record con casella combinata?

Sono un principiante e ho un problema.
Ci sto perdendo la testa da due giorni e non ci sono ancora riuscito!
Mi trovo in questa situazione:
Ho creato due tabelle (diciamo Tabella1 e Tabella2), le ho legate con una
relazione (uno a molti).
Ho creato le relative maschere (Maschera1 e Maschera2).
Ho poi creato una query (Query1) che mi seleziona dei campi alle due tabelle
e gli ho creato una maschera (Maschera3) con visualizzazione continua in
modo da avere un record per riga.
Ora vorrei creara una casella combinata (Combo1) nella Maschera3 per
visualizzare e quindi per modificare solo i record che hanno in comune lo
stesso valore in un campo.
Ho ricevuto alcuni suggerimenti, ma non ce l'ho ancora fatta.
La combo l'ho messa nell'intestazione della Mascera3.
Nella Query1, nei criteri relativi al campo che mi interessa filtrare, ho
scritto [Forms]![Maschera3]![Combo1]
Ho generato, relativamente all'evento "Dopo aggiornamento" della Combo1 la
linea di codice: Me.Requery
Qualcuno mi puņ aiutare?

 ha scritto nel messaggio
news:5TIY6.4824$8R5....@news.infostrada.it...

Sei stato preciso nell'esporre la situazione, ma dov'č il problema?
Ciao.

Il problema è che la Combo non funziona.
Credo che il problema sia nell'istruzione che inserisco nei criteri della
query.
Quindi quello che ho fatto è corretto?


Per capire qualcosa di più dicci:
1) Quale è il tipo dati del campo di Query1 per il quale hai scritto i
criteri di selezione (testo, numerico, contatore, data ecc.).
2) Quante colonne ha Combo1 (comprese naturalmente quelle a lunghezza zero).
3) Combo1 come origine riga ha un elenco, una query o una tabella?
4) Se ha come origine riga uan query, quele è il suo codice SQL?
5) Se ha come origine riga una tabella, quale è la sua struttura?
Ti rammento che così come hai fatto, passi come criteri alla query la prima
colonna di Combo1.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 5) Se ha come origine riga una tabella, quale è la sua struttura?
Su queste tre domande ho fatto diversi tentativi, ma senza risultato.
Ho guardato la guida in linea ma non ho trovato nessuno aiuto (forse non ho
guardato bene!)
Mi sapresti dire dove posso trovare queste informazioni?
....magari anche un buon libro.....


 ....magari anche un buon libro.....
Naturalmente una buona guida all'uso di Access; dai uno sguardo alla Sezione
Libri del Sito Comune (link qui sotto).


 codice SQL.
Qui ci ho messo il nome della query a cui si riferisce la combo (Query3)



Prova a postarci il codice SQL di Query3.
Per far questo, apri la griglia di struttura di Query3, dal menu Visualizza
scegli SQL; ciò che ti compare nella finestra che così ti si apre è il
codice SQL della query.
[CUT]


 ha scritto nel messaggio
news:Fy1Z6.17521$8R5.3...@news.infostrada.it...

Devi controllare, nella combo, quale colonna è associata e a quale campo
(della query) corrisponde. Se (per esempio) devi filtrare i dati per Cognome
e la combo ha come istruzione sql: "Select Nome, Cognome From Anagrafica" e
come colonna associata la 1 (prima); quando utilizzi la combo il valore
ritornato non sarà mai il Cognome (colonna associata n.2) ma il Nome
(colonna associata n.1), quindi il filtro va a farsi friggere...
Ciao.

 codice SQL della query.
Eccolo:
SELECT Atleti.IDAtleta, Atleti.Cognome, Atleti.Nome, Atleti.Pettorale,
Società.NomeSocietà, Categorie.[Nome Categoria], Nazioni.Nazione,
Atleti.[Anno di Nascita], Atleti.Note
FROM Società INNER JOIN (Categorie INNER JOIN (Nazioni INNER JOIN Atleti ON
Nazioni.IDNazione = Atleti.IDNazione) ON Categorie.IDCategorie =
Atleti.IDCategorie) ON Società.IDSocietà = Atleti.IDSocietà
WHERE (((Società.NomeSocietà)=[Forms]![Assegnazione
Pettorali]![cmb_RicercaSocietà]))
ORDER BY Società.NomeSocietà;


 ha scritto nel messaggio
news:N5KZ6.2273$6x.6...@news.infostrada.it...

Scusami, ma questa non può essere la query che è origine riga della casella
combinata (che a quanto pare si chiama cmb_RicercaSocietà ed è inserita
nella maschera Assegnazione Pettorali).
Questa, se non sbaglio, dovrebbe essere la query che nei messaggi precedenti
tu hai chiamato Query1 e che è origine origine record della maschera che nei
messaggi precedenti tu hai chiamato Maschera3.
A me serve conoscere il codice SQL della query che è origine riga della
casella combinata, query che, a naso, dovrebbe essere basata su una tabella
Società.



Ops...
SELECT Societą.IDSocietą, Societą.NomeSocietą
FROM Societą
ORDER BY Societą.NomeSocietą;



E' quello che mi immaginavo. ;-)
Se effettivamente la proprietą Numero colonne della casella combinata č 1 e
non hai nulla nella sua proprietą Larghezza colonne, modifica il codice SQL
della query in:
SELECT Societą.NomeSocietą
FROM Societą
ORDER BY Societą.NomeSocietą;
Facci sapere.


 Roberto
Ok, ora la combo funziona, ma non mi filtra i record.
Come ti dicevo nel campo "Dopo aggiornamento" degli eventi della combo avevo
generato la linea di codice
Me.Requery...... ma mi sa che non ci azzecca molto......



Ci azzecca, ci azzecca. A mio avviso č proprio la non esecuzione del
Me.Requery che non ti fa vedere i risultati che ti aspetti; potrebbe essere
successo che durante le varie modifiche che hai fatto al tuo database hai
anche cambiato il nome alla casella combinata senza rigenerare il suo codice
VBA a fronte dell'evento "Dopo aggiornamento"; sei sicuro che hai un codice
VBA a fronte dell'evento "Dopo aggiornamento" della casella combinata
chiamata cmb_RicercaSocietā? Verificalo attentamente.
Non vorrei che nel corso del thread tu abbia cambiato i presupposti del
problema; riverifichiamoli insieme.
Hai creato una maschera chiamata Assegnazione Pettorali; tale maschera ha
una visualizzazione a Maschere continue ed ha come origine record una query
che ha il seguente codice SQL:
SELECT Atleti.IDAtleta, Atleti.Cognome, Atleti.Nome, Atleti.Pettorale,
Societā.NomeSocietā, Categorie.[Nome Categoria], Nazioni.Nazione,
Atleti.[Anno di Nascita], Atleti.Note
FROM Societā INNER JOIN (Categorie INNER JOIN (Nazioni INNER JOIN Atleti ON
Nazioni.IDNazione = Atleti.IDNazione) ON Categorie.IDCategorie =
Atleti.IDCategorie) ON Societā.IDSocietā = Atleti.IDSocietā
WHERE (((Societā.NomeSocietā)=[Forms]![Assegnazione
Pettorali]![cmb_RicercaSocietā]))
ORDER BY Societā.NomeSocietā;
Nell'intestazione della maschera hai messo una casella combinata che si
chiama cmb_RicercaSocietā; la casella combinata ha una sola colonna ed ha
come origine riga una query che ha il seguente codice SQL:
SELECT Societā.NomeSocietā
FROM Societā
ORDER BY Societā.NomeSocietā;
A fronte dell'evento "Dopo aggiornamento" della casella combinata
cmb_RicercaSocietā hai generato la seguente riga di codice VBA:
Me.Requery
Se tutto quanto scritto sopra č vero e nella maschera, dopo aver selezionato
dalla casella combinata un nome di societā, non ti compare nulla, a mio
avviso c'č qualcosa che non va nella query che č origine record della
maschera; d'altra parte hai messo in INNER JOIN quattro tabelle (Societā,
Categorie, Nazioni ed Atleti) e, se il contenuto di una delle tabelle non č
completo, la query, e di conseguenza la maschera, risultano vuote.
Per verificare questa eventualitā, senza aprire la maschera, apri
direttamente la query: nella finestra di dialogo che ti comparirā digita il
nome di una societā esistente; se la query ti si aprirā vuota significa che
il problema č nel predicato FROM della query o nel contenuto di una o pių
delle quattro tabelle.
Il database ce lo hai in mano tu e solo tu puoi fare tutte le verifiche del
caso; io posso darti una sola certezza: la tecnica che abbiamo discusso nel
presente thread č corretta, come fra l'altro č anche dimostrato
dall'intervento di Sergio.
--
Roberto
