PDA

Visualizza la versione completa : [ACCESS] Filtrare query con variabili di una selezione multipla


km5000
14-02-2006, 10:15
(ACCESS) Filtrare query senza filtro ma con variabili di una selezione multipla.

Salve a tutti.
Ho un problema da risolvere per fare un piccolo motore di ricerca che potrei risolvere con un filtro di una query.
In veritÓ non sono in grado di scrivere il codice per costruire un filtro complesso e quindi per rendere "modulare" e di facile modificabilitÓ la query, la maschera e i report, voglio evitare di scrivere la sql con righe di codice in VBA creando delle query parametriche basate unicamente su caselle di testo, selezioni multiple, ecc di una form.

Per semplificare diciamo che ho un Db con 2 tabelle.
Tabella "iscritti" Ŕ composta come segue:
IDiscritti codice
1 PA
2 MM05
ecc ecc

Tabella "Tab015" Ŕ composta come segue:
codice Desc_codice
PA PAGAMENTO
MM05 Abbonamento MM05
ecc ecc

La form "RICERCA" ha una casella di riepilogo con una selezione multipla chiamata "codice1" (in veritÓ ne avrÓ tante di caselle) che prende i dati da "Tab015".
Con il seguente codice (ne scrivo solo una parte per fare capire) la casella "codice1" riempie una casella di testo chiamata "codice" facendo una stringa che come risultato finale avrÓ come valori (a seconda dei codici che seleziono) "PA, MM05, ecc".

Private Sub codice1_Click()
For Each varItem In Me!codice1.ItemsSelected
Me!codice = Me!codice & Me!codice1.Column(0, varItem) & ", "
Next varItem
End Sub

La form richiama con un bottone il report "ELENCO" i cui dati sono basati sulla query "00_RICERCA"
La query "00_RICERCA" Ŕ composta come segue:
SELECT iscritti.codice, iscritti.* FROM iscritti
WHERE ((iscritti.codice) In ([forms]![RICERCA]![codice]))

Ora: se nella maschera la casella "codice" ha 1 valore solo (es: MM05) la query "00_RICERCA" funziona filtrando i dati correttamente.
Per˛ se la casella codice ha pi¨ di 1 valore (es: PA, MM05) la query "00_RICERCA" non funziona.

Inserendo a mano i valori PA, MM05 la query funziona perfettamente (la condizione diventa: WHERE ((iscritti.codice) In ([PA, MM05)).
Ho provato a inserire tutti gli apici possibili e immaginabili facendo in modo che la casella di testo "codice" avesse i seguenti valori:
"PA", "MM05"
oppure
'PA', 'MM05'

Tuttavia il risultato Ŕ sempre lo stesso: funziona con un valore solo (con o senza apici)

Penso che il problema stia nel fatto che non riesco a "formattare" le condizioni separate da una virgola come stringhe singole mentre la query mi legge la casella "codice" come un unica stringa: un po come se la stringa finale della condizione fosse "PA, MM05, ecc" e non "PA", "MM05", "ecc".

C'Ŕ un modo per "formattare" le stringhe in modo corretto senza usare VBA (o usandolo solo in minima parte)?

grazie per la pazienza a chiunque mi pu˛ dare una mano.

km5000
14-02-2006, 12:22
Al limite se qualcuno avesse idea del codice VBA per filtrare una sql con i campi della maschera che ho inserito ...

km5000
14-02-2006, 16:12
Se qualcuno volesse cimentarsi posto il link per scaricare il Db
DB_PROVA.mdb (http://www.amcli.it/DB_PROVA.mdb)

Loading