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

Sto cercando di far digerire al query builder il seguente concetto:
Inserire in criteri la seguente stringa   In([Forms]![MiaForm]![MioElenco])
Nella form MiaForm gestire un controllo che assume come valore una stringa
contenente l'elenco dei valori da me voluti nell'estrazione.
Es. "pippo";"pluto";"paperino"
Non riesco proprio a capire come deve essere costruita la stringa da
assegnare a MioElenco. Mi sembra di avere provato in tutti i modi (apici
singoli, doppi, tripli, quadrupli, ...), ma non ne esco.
Se inserisco solo "paperino" funziona perfettamente, quindi il problema non
è il criterio ma la stringa.
Qualcuno ha la soluzione ?
Grazie in anticipo
Nicky

 ha scritto nel messaggio
news:gZbq6.2841$x3.5...@news2.tin.it...

E se come separatore adoperi la virgola anziché il punto e virgola, cosa
succede?
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

è il criterio ma la stringa.
Devi mettere LIKE, non IN. Che io sappia IN si usa solo con SELECT. (Blabla
WHERE pippo IN SELECT * FROM blabla)
Saluti.
Luciano
(DOC)

Luciano (DOC) ha scritto nel messaggio ...

No, credo che il problema sussista.
Probabilmente il controllo contiene un elenco di valori e separatore, selezionati da una casella di
riepilogo a selezione multipla.
In questo caso la funzione In(<valore1>, <valore2>, ... <valoreN>) sarebbe molto comoda usata come
criterio in una query.
Mesi fa ho incontrato lo stesso problema, e non riuscendo a risolvere in tempi brevi ho aggirato con
uno sporco trucco.
Naturalmente sono gradite smentite  :-)
Ciao, warp


Non funziona.
Il problema è come costruire la stringa, che se fosse inserita nel criterio
sarebbe  in("pippo";"pluto";"paperino"), ma come parametro boh!
Nicky

 ha scritto nel messaggio
news:dGuq6.43012$lj4.9...@news6.giganews.com...

Non può essere LIKE, altrimenti troverei anche paperinone !
Nicky

 ha scritto nel messaggio
news:98fg8e$rab$1...@fe2.cs.interbusiness.it...

Quale sporco trucco?
Nicky

Quale sporco trucco?
Ho creato un numero fisso di controlli nascosti sulla form (una dozzina nel caso mio bastavano e
avanzavano).
Ho passato ad ognuno un singolo valore selezionato dalla casella di riepilogo; dopodichè come
criterio di filtro nella query anzichè un bellissimo in(<Elenco valori>) ho usato un rozzo like
Forms!xxx!campo1 or forms!xxx!campo2 or .... forms!xxx!campo12.
Certo, è un palliativo, ma se le selezioni non sono tantissime può andare.
Ciao, warp

Non può essere LIKE, altrimenti troverei anche paperinone !
Nicky, Nicky....ti stai perdendo nel classico bicchiere d'acqua!:-)
LIKE '*paperino*' (asterisco, paperino, asterisco)
trova anche paperinone, ma
LIKE '* paperino *' (asterisco, spazio, paperino, spazio, asterisco)
trova solo la stringa intera.
Saluti.
Luciano
(DOC)


Ma se non passi tutti i parametri che succede ?
Nicky
P.S. comunque trovo assurdo che non si possa passare la striga come criterio
In, tanto piů che per un solo elemento funziona !

avanzavano).
Seeeee!!! :-))))
Cosi' ti leghi da solo mani e piedi!
Ma scusa eh, dobbiamo recuperari i valori di uan casella di riepilogo e
passarli come parametro? beh, facciamolo, no?:-)
Mentre si costruisce l'SQL, arrivati al WHERE si cicla sugli itemselected e
si aggiunge un LIKE (con asterischi o meno) on un = a seconda delle esigenze
per ognuno degli item.
Mi sembra la soluzione piu' semplice e versatile.
Saluti.
Luciano
(DOC)

Saluti.
Sono d'accordo, e in effetti appena ho tempo faccio la rettifica:  bravo  :-)
Resta il fatto che la soluzione in assoluto migliore (e probab. la + performante) non funge: usare
In(<controllo Valori>) come criterio di query.
Naturalmente non preoccuparti di smentirmi, mi farebbe piacere  ;-D
Ciao, warp

In, tanto piů che per un solo elemento funziona !
Vero, d'altro canto non č affatto male la soluzione proposta da Luciano (DOC).
Ciao, warp

Naturalmente non preoccuparti di smentirmi, mi farebbe piacere  ;-D
Non funziona per il semplice fatto che una casella di riepilogo con
selezione multipla non ha la proprieta' valore!
pippo = me.casriep non ti da nulla se c'e' piu' di un elemento selezionato.
L'unico modo per recuperare i valori selezionati e' ciclare su itemselected.
Saluti.
Luciano
(DOC)

Saluti.
No, non hai capito in cosa consiste il problema.
E' naturale che bisogna scorrere la casella di riepilogo e rilevare con itemselected i valori
selezionati dall'operatore!
La comodità consisterebbe nel memorizzare in un controllo nascosto la selezione (con i valori
separati da , o ;) e poi passare al criterio della query il contenuto di tale casella con la
funzione In(<Controllo della form che contiene l'elenco valori>).
Tutto bello sulla carta, nei fatti non funziona.
Almeno con A '97, domani proverò con A '2000 a titolo di curiosità.
Ciao, warp


non e' proprio esatto, nel senso che e' possibile utilizzare IN anche senza
SELECT.
nel caso di stringhe, la sintassi e' ...WHERE pippo In("nome1"; "nome2";
"nome3")
il ; se inserita nel querybuilder, in sql ci va la virgola.
il problema di Nicoletta e' che usando il riferimento ad un controllo testo:
In([Forms]![MiaForm]![MioElenco])
il sql viene tradotto (circa)
WHERE In("'nome1'; 'nome2'; 'nome3'")
che naturalmente non funziona in quanto non viene passato un elenco di
stringhe, ma un'unica stringa,
infatti con un solo nome funziona
-- 
Federico
----------------------------------
Rimuovi paperino. per e-mail
----------------------------------
Tutte le richieste che arrivano
in privato, vengono cestinate.
----------------------------------
Sito Comune di it.comp.appl.access
http://www.sitocomune.com
mailto:
webm...@sitocomune.com
----------------------------------

infatti con un solo nome funziona
La cosa curiosa è che lo spunto per l'utilizzo di quella tecnica ha origini "prestigiose":
http://www.mvps.org/access/reports/rpt0005.htm
Bah, il mistero s'infittisce :-)
Ciao, warp

 ha scritto nel messaggio
news:jWQq6.47662$lj4.1...@news6.giganews.com...

E' propio così!!!!
Il mio controllo è nascosto e lo devo costruire per i fatti miei in base a x
parametri.
Il problema è come costruire questa maledetta stringa.
Capisco l'eventualità di costruirsi la query da codice, ma in questo caso
DEVO usare il builder perchè tale query è a volte modificabile dall'utente
Ciao
Nicky


Chiedo scusa; hai ragione.
Ma per tanto cosě posso anche usare n OR
Ciao
Nicky

 ha scritto nel
messaggio news:3AACB708...@paperino.sitocomune.com...

Beccato il problema, manca la soluzione.
Anche perchè come postato poc'anzi, devo usare il querybuilder per lasciare
all'utente la possibilità di modificare a volte tale query.
Ciao
Nicky


no ;-)
attenzione, la procedura di Dev Ashish funziona benissimo, in quanto la query
(l'intera stringa) viene creata dinamicamente.
naturalmente nell'esempio vengono usati dei numeri, nel caso di stringhe
bisogna apportare una piccola modifica:
...
stWhat = stWhat & Chr(34) & Me!mslbxTest.ItemData(vItm) & Chr(34)
...
cioe' aggiungere i doppi apici.


 Nicky
imho, in generale, non puoi permettere all'utente di modificare una query usata
dal programma.
prova a pensare cosa succederebbe se l'utente eliminasse il riferimento al
controllo testo della form.
se vuoi usare una form per l'inserimento di criteri di selezione, la query non
deve essere modificabile dall'utente, quindi ad esempio puoi usare l'esempio
citato da warp; inoltre potresti migliorare la ricerca inserendo, ad esempio,
la selezione dei campi da visualizzare o altri criteri di selezione.
se poi l'uente vuole farsi altre query, se le fa, ma questo non deve
interferire con gli oggetti predisposti da te.


cioe' aggiungere i doppi apici.
Ehmm ... sě, in effetti ieri sera dopo aver postato il riferimento a Dev Ashish ho provato meglio
l'esempio e funziona.
Direi che siamo a posto, non č cosě importante che funzioni nel query builder.
Anche perchč credo che una query salvata ma con parametri, venga ricompilata in ogni caso prima
dell'esecuzione, quindi il vantaggio rispetto a una query scritta a codice sarebbe discutibile.
Ciao, warp

 all'utente la possibilità di modificare a volte tale query.
Nuovo bicchiere d'acqua direi...:-)
Come ti ha giustamente detto Federico non devi assolutamete lasciare
l'utente libero di modificare la tua query. Fallo tu da codice piuttosto!
In base alle scelte dell'utente modifichi l'SQL della query prima di
lanciarla ed il gioco e' fatto.
Guarda querydef sull'help a riguardo.
Saluti.
Luciano
(DOC)

 funzione In(<Controllo della form che contiene l'elenco valori>).
Si, rimane il fatto che si sta cercando la soluzione ad un problema male
impostato!
L'utente fa le sue scelte da maschera, in base a quelle io costruisco il mio
SQL, se mi serve (non e' detto) lo salvo come querydef dopo di che lo eseguo
e mostro i risultati dove meglio credo (sottomaschera, report, grafico).
Io almeno lavoro da sempre in questo modo....
Saluti.
Luciano
(DOC)

 DEVO usare il builder perchè tale query è a volte modificabile dall'utente
Lascia perdere il query builder, dammi retta....:-)
metti un bel bottone sulla maschera e quando l'utente lo preme cominci a
costruire il tuo SQL.
strsql = "SELECT * FROM miatabella WHERE pippo like "
For each varsel in miacasriep.itemselected
    strsql = strsql & varsel & " AND/OR pippo like "
next
strsql = left (strsql,(len(strsql)-18)
e via dicendo...
Poi, o esegui l'SQL o modifichi l'SQL della tua query e poi la lanci.
Saluti.
Luciano
(DOC)

Saluti.
E' la stessa cosa che utilizzare il famigerato IN().
La differenza è una pura questione di stile ... d'altro canto il materiale publicato da Dev Ashish
si può definire in molti modi, ma di certo non male impostato!
Ciao, warp

 ha scritto nel messaggio
news:vxqr6.53568$lj4.1...@news6.giganews.com...

Vi ringrazio per i vari suggerimenti; ora condivido l'idea di creare la
query da codice.
Purtroppo l'mdb è del cliente, la query è sua, io ho solo aggiunto il
parametro. Il cliente di volta in volta si modifica la sua query o
costruisce un suo report, quindi, purtroppo, non posso fare altrimenti.
Ciao
Nicky

 si può definire in molti modi, ma di certo non male impostato!
Beh, lui propone delle cose...bisogna poi vedere l'uso che se ne fa!:-)
Saluti.
Luciano
(DOC)

Beh, lui propone delle cose...bisogna poi vedere l'uso che se ne fa!:-)
Nella fattispecie è una buonissima proposta.
Ma attenzione, non sto affatto stroncando la tecnica che suggerisci, di certo è meglio della pezza
fatta in quattro e quattr'otto (con l'apostrofo?) dal sottoscritto.
Ma se facessimo un sondaggio sul ng. sono quasi sicuro che avrebbe partita vinta la proposta del
buon vecchio Dev  :-)
Ciao, warp

 E io ridico proprio no! ;-)
Mi ridite quale č il tema della disputa cosě vi dico chi č che sta
scacchietando?
Antonio

 scacchietando?
Se sulla matriciana ci va il parmiggiano o il pecorino...
Saluti.
Luciano
(DOC)
PS che vuol dire scacchietando?

 Poi ognuno se la magna come gli pare....
Eheheh, lo sapevo che abboccavi e ti accaloravi....:-)))
Saluti.
Luciano
(DOC)

 buon vecchio Dev  :-)
:-))))
Si? Tu porti Dev? E io porto A mio cuGGino!
Saluti.
Luciano
(DOC)

 PS che vuol dire scacchietando?
E' una parola campana che dovrebbe voler dire dire cavolate, spararla
grossa, cazzeggiare....
Antonio

Saluti.
CIAO, Warp