Newsgroup: it.comp.appl.access
Titolo: Criterio query

Ciao a tutti.
In una maschera riempio un campo chiamato MiaLista con una sequenza di valori di tipo testo separati dalla virgola:
valore1,valore2,valore3, ecc.
Poi in una Function pubblica imposto un criterio da richiamare in una query:
 
Function MioCriterio()
MioCriterio = [Forms]![MiaForm]![MiaLista]
End Function
 
Nella query imposto nel MioCampo il criterio.
Ho provato sia così: Like Nz(MioCriterio();"*") che così In ([Forms]![MiaForm]![MiaLista])
Il primo funziona solo se seleziono un solo valore per volta altrimenti non mi restituisce nessun record. Il secondo immagino non funzioni perché il metodo legge il contenuto fra parentesi non come il campo da dove pescare i valori ma come valore stesso da ricercare.
Qualcuno mi può gentilmente spiegare come devo scrivere il criterio in modo corretto perché la query restituisca i record in cui nel MioCampo vi sia uno dei valori contenuti nella MiaLista?
Premetto che l’esempio 2.36 del Sito Comune non fa al caso mio perché dovrei definire da codice una miriade di query molto complesse.
 
Grazie anticipatamente.

 ...
 
Non funziona perch� tutto che mandi dalla funzione viene preso
come stringa fissa (letterale). Devi o cambiare direttamente la
stringa SQL della query o usare un workaround con Eval().
Vedi:
http://groups.google.com/group/it.comp.appl.access/browse_frm/thread/38a2f2a09399d881/21c2ca5e983faf4e
 
 
-- 
Ciao
Karl
*********
Access FAQ: 
www.donkarl.com/it
 
 
 

 Access FAQ:
www.donkarl.com/it
 
 
Grazie Karl,
ho provato ad inserire nella query il campo:
NuovoCampo: Eval([MioCampo] & ' In(' & MioCriterio() & ')')
ma ottengo la seguente risposta: Espressione digitata non
correttamente o troppo complessa per essere valutata....

 correttamente o troppo complessa per essere valutata....
 
L'esempio nella discussione era per numeri. Valori di tipo testo devi
rinchiudere in apostrofi. Cio� la tua funzione deve fornire p.e.
'pippo','pluto','pasta'
e l'espressione nella query diventa:
 
NuovoCampo: Eval("'" & [MioCampo] & "' In(" & MioCriterio() & ")")
 
Se non riesci chiama la tua funzione dalla finestra immediata e
incolla il risultato esatto nel prox messaggio. Incolla anche
l'enunciato SQL della query.


 Access FAQ: 
www.donkarl.com/it
 
 
Ok adesso funziona perfettamente.
 
Per chi avesse bisogno, questa è la SQL semplificata:
 
SELECT MiaTabella.ID, MiaTabella.MioCampo, Eval("'" & [MioCampo] & "'  In(" & MioCriterio() & ")") AS Espr2
FROM MiaTabella
GROUP BY MiaTabella.ID, MiaTabella.MioCampo, Eval("'" & [MioCampo] & "'  In(" & MioCriterio() & ")");
 
Come suggerito da Karl la stringa tipo testo nella casella da cui pesco i valori, è una sequenza di testi racchiusi tra virgolette e separati dalla virgola. Es: "testo1","testo2","testo3",....."testo100"
 
Grazie ancora a Karl.


Scusate mi ero dimenticato una cosa fondamentale: il criterio deve
essere impostato su Vero
 
SELECT MiaTabella.ID, MiaTabella.MioCampo, Eval("'" & [MioCampo] & "'
In(" & MioCriterio() & ")") AS Espr2
FROM MiaTabella
GROUP BY MiaTabella.ID, MiaTabella.MioCampo, Eval("'" & [MioCampo] &
"'  In(" & MioCriterio() & ")")
HAVING (((Eval("'" & [MioCampo] & "'  In(" & MioCriterio() &
")"))=True));
 
Ciao