Newsgroup: it.comp.appl.access
Titolo: impostare clausola IN() prelevata da maschera

Buongiorno a tutti/e,
Devo produrre query filtrate in base a parametri "personalizzati" per
vari utenti che entrano nell'applicazione.
Sto cercando di praticare questa strada:
- nella "tabella_utenti" c'è il campo "utente" e il campo "filtro", il
quale contiene i valori separati da virgole.
Per l'utente "topolino" il campo filtro contiene:
"pippo","pluto","topolina"
Per l'utente "paperino" il campo filtro contiene "qui","quo","qua"
Questo perché contavo di "caricare" il campo filtro in una maschera, e
filtrare una query tramite
IN ([forms]![maschera]![filtro])
in tal modo ogni utente avrà filtrata la query in base ai valori del
campo "filtro".
Il problema è che scritta così non va, e CREDO che esista invece il
modo di far riconoscere a Access che quel campo deve considerarlo come
un elenco di valori separato da virgole per l'istruzione IN.
Volevo sperimentare questa strada. C'è modo di usare
IN(valore1,valore2) con una stringa separata da virgole, che viene
presa da una maschera?
grazie,
Panathos

 Sto cercando di praticare questa strada:
Mah... mi sembra un po' un bordello... io farei una tabella con nome
utente e valori ammessi, che e' anche piu' maneggevole per manipolare
le autorizzazioni:
Tabella Autorizzazioni
(utente)    (valore)
Topolino   Pippo
Topolino   Pluto
Topolino   Minni (siamo seri)
Paperino  Qui
Paperino  Quo
Paperino  Qua
e poi nella query...
IN ( SELECT Valore FROM autorizzazioni WHERE Utente=forms!maschera!
utente )
Altrimenti riscrivi l'SQL della query su ogni aggiornamento
dell'utente
Query.sql="SELECT blah blah blah WHERE blah blah IN(" & forms!maschera!
filtro &")"
cia'
Max


Prova ad impostare il filtro come 
"TuoCampo IN(" & [forms]![maschera]![filtro] & ")"
ma non so se funzionerà ed ora non posso provare.
In alternativa, nella casella di testo che contiene il filtro, invece
di scrivere l'elenco dei valori, scrivi l'espressione completa:
IN('pippo','pluto','topolina')
quindi imposta come origine record della maschera da filtrare questa
istruzione SQL:
SELECT * FROM TuaTabella WHERE TuoCampo & [forms]![maschera]![filtro]
Questa soluzione dovrebbe funzionare senza problemi.

 filtro &")"
Uhm. Questo presuppone che la query venga generata da codice. Io
invece la query ce l'ho "fissa", creata nel QBE, e da questa query ne
"discendono" altre, pertanto da vba non saprei come cavarmela.
cmq grazie,
Panathos

 SELECT * FROM TuaTabella WHERE TuoCampo & [forms]![maschera]![filtro]
Come dicevo, non ho una maschera da filtrare, ma una query nel QBE. Da
codice non ci sono problemi, perché comunque in quel campo c'è una
stringa, che viene passata ad un'altra stringa (l'istruzione SQL), e
tutto funziona.
Il problema è invece nel QBE. Utilizzare IN ([forms]![maschera]!
[campo]) funziona solo se nel [campo] c'è un valore soltanto.
Per inserire più valori sto provando a usare virgole e puntoevirgole
come separatori, virgolette singole e doppie come delimitatori di
stringa, sto provando anche eval(in([forms]![maschera]![campo])) come
filtro nel QBE, ma niente da fare.
Sto anche provando cose tipo "<> "Minni"", e si ottiene esattamente
quello che ho scritto:  invece di vedere <> "Minni" come stringa,
Access vede "<> "Minni"" come stringa.
Per far funzionare questi "giochetti" di usare controlli come campi
dinamici, bisognerebbe che ci fosse il modo di 'dereferenziare' un
livello di stringa.
Adesso provo con il metodo parameters...
ciao,
Panathos