Newsgroup: it.comp.appl.access
Titolo: Parametri multipli da listbox a query via VBA

Tramite una routine di Roberto da me modificata vorrei alimentare dalla
selezione
multipla fatta su una listbox (A) un'altra listbox(B).
Questo è il codice,il problema è che funziona solo se seleziono sulla
listbox A una riga ma
se selezione più di una riga la listbox B carica tutti i record e non solo
quelli selezionati.
Private Sub lstboxA_Click()
Dim varItem As Variant
Dim strSQL As String
Dim Parametri As String
    For Each varItem In Me!listboxA.ItemsSelected
        Parametri = Parametri & Me!listboxA.Column(0, varItem) & " Or "
    Next varItem
Parametri = Left$(Parametri, Len(intX) - 4)
strSQL = "SELECT ID,CampoA,CampoB FROM MiaQuery WHERE ID  = " & Parametri &
""
Me.listboxB.RowSource = strSQL
End Sub
Se seleziono solo una riga la strSQL è così
SELECT ID,CampoA,CampoB FROM MiaQuery WHERE ID  = 7
e la listboxB si carica correttamente
Se seleziono due righe la stringa SQL è così
SELECT ID,CampoA,CampoB FROM MiaQuery WHERE ID  = 7 Or 5
ma la listbox si carica con tutte i record (e non con solo quelli
selezionati)
P.S.
Se passo a mano il valore della variabile Parametri sulla griglia della qry
funziona.
Suggerimenti?
SunRex

 Suggerimenti?
Ciao SunRex
puoi usare l'operatore IN
es..
-------------------
Private Sub ListBoxA_Click()
Dim varItem As Variant
Dim strSQL As String
Dim Parametri As String
    For Each varItem In Me!ListBoxA.ItemsSelected
        Parametri = Parametri & "," & Me!ListBoxA.Column(0, varItem)
    Next varItem
Parametri = "(" & Mid(Parametri, 2) & ")"
strSQL = "SELECT ID,CampoA,CampoB FROM MiaQuery WHERE ID IN " & Parametri
Me.ListBoxB.RowSource = strSQL
End Sub
----------------
Ciao Giorgio

 SunRex
Visto che stai costruendo dinamicamente il codice SQL di una query, sarebbe
bene che anndassi a vedere come Access organizza la WHERE quando nei criteri
della griglia di struttura scrivi:
7 Or 5
Ti accorgeresti che il codice SQL della query non è come tu dici uguale a:
SELECT ID,CampoA,CampoB FROM MiaQuery WHERE ID  = 7 Or 5
ma è invece:
SELECT ID,CampoA,CampoB FROM MiaQuery WHERE ID  = 7 Or ID = 5
Ciò premesso prova a modifica il tuo codice VBA di cui sopra sostituendo la
riga:
Parametri = Parametri & Me!listboxA.Column(0, varItem) & " Or "
con:
Parametri = Parametri & Me!listboxA.Column(0, varItem) & " Or ID = "
e sostituemdo la riga:
Parametri = Left$(Parametri, Len(intX) - 4)
con:
Parametri = Left$(Parametri, Len(Parametri) - 9)
-- 
Roberto
-----------------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
----------------------------------------------------

 ha scritto nel
messaggio news:4262404c$0$18243$5fc...@news.tiscali.it...

Mumble mumble, se uso il tuo codice se seleziono una riga esegue la query
ma se seleziono due o più righe non ho più risultati.
Parametri mi restituisce
con più righe
...WHERE ID  = (2479,2469,2475)      (nessun risultato e chiaramente sulla
griglia delle qry non va)
con una
WHERE ID  = (2479)      (ok un risultato)
SunRex

 ha scritto nel messaggio
news:uir8e.50059$IN.8...@twister2.libero.it...



Ciao SunRex
hai copiato male :-)
---------
WHERE ID IN  (2479,2469,2475)
---------
Ciao Giorgio

 ha scritto nel messaggio
news:uir8e.50059$IN.8...@twister2.libero.it...

Hai perfettamente ragione.Adesso funziona perfettamente (tranne la selezione
estesa....:(.. )
Grazie.
SunRex

 SunRex
Sono comunque d'accordo con Giorgio che la soluzione più corretta è quella
di usare l'operatore IN ivece dell'operatore =; fra l'altro nel mio esempio
pubblicato sul Sito Comune di cui hai accennato nel tuo primo messaggio si
risolve il problema usando tale operatore: d'altra parte per definizione la
stringa di un filtro di un report o di una maschera non è altro che la
proposizione WHERE di una query senza la parola WHERE.


 SunRex
Semplicemente stai sbagliando la sintassi SQL
Questo che hai scritto č decisamente errato:
SELECT ID,CampoA,CampoB FROM MiaQuery WHERE ID  = 7 Or 5
Questo č la stessa cosa ma corretta:
SELECT ID,CampoA,CampoB FROM MiaQuery WHERE (ID=7 Or ID=5)
Di conseguenza per fare uanto chiedi io farei cosě:
Me.listboxB.RowSource =retSQL() 
Dove la Funzione retSQL() č questa:
Private Function retSQL() as string
   Dim vItm As Variant
   Dim stWhat As String
   Dim stCriteria As String
   Dim stSQL As String
 
   stWhat = "":    stCriteria = ","
   For Each vItm In Me.lstPrint.ItemsSelected
          stWhat = stWhat & Me!listboxA.ItemData(vItm)
          stWhat = stWhat & stCriteria
   Next vItm
   stCriteria = CStr(Left$(stWhat, Len(stWhat) - Len(stCriteria)))
   stSQL = "SELECT " & _
               "ID, " & _
               "CampoA, " & _
               "CampoB " & _
           "FROM MiaQuery "
           "WHERE ID IN (" & stCriteria & ")"
   End If
   retSQL= stSQL
End Function
Ovviamente č concepita per un ID Numerico.
Ciao
@Alex
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Ciao Giorgio
Scusa Giorgio non avevo visto la tua risposta.
Non ne posso più di Tiscali...!!!
Ciao
@ALex 



Rispondo qui a tutti e tre (@Alex,Roberto e Giorgio).
Che dire funziona in tutte e due  i modi cioè sia usando IN
che Or.Ora su che principii argomentare le due scelte?
P.S.
Grazie a tutti e tre.
SunRex


ha .. sicuramente non hai visto anche la risposta di Roberto
Giorgio


vai tranquillo :-)
capita spesso anche a me (ho anch'io tiscali) a volte sono costretto a
consultare it.comp.appl.access dal server di edisontel.
Ciao Giorgio

 che Or.Ora su che principii argomentare le due scelte?
Scegli quella che piů ti piace :-)
una vale l'altra, direi che l'unico punto in vantaggio della clausola IN č
quella di passare una stringa Sql piů piccola.
Ciao Giorgio

 wrote in
message news:42629fe7$0$24449$
5fc...@news.tiscali.it

No, prima no ora vedo tutto...!
Io non riesco più ad accedere al NG MS(Access) saltuariamente
ad ICAA, quindi spesso vado su NewsLand o Mailgate(anche questo
ogni tanto fà arrabbiare).
Sospetto che oltre al provider Tiscali ci sia di mezzo 
anche il mio Provider privato che si appoggia a Tiscali, ma
più che segnalare la cosa e non ricevere risposte dovrei
infuriarmi...!
Pazienza.
Ciao
@Alex


 proposizione WHERE di una query senza la parola WHERE.
Scusa anche te Roberto come ho già detto a Giorgio il 3D
lo vedevo senza risposte fino a qualche minuto fà...!


 Ciao Giorgio
Ciao MVP,
ho anche io Edisontel (edbusiness) e lo trovo eccezionale
;-P
-- 
_ _
Ciao
MAssimiliano Amendola
Cisa1 - I° Conferenza Italiana per Sviluppatori Access Arezzo 4+5
Giugno 2005 Sono aperte le iscrizioni  Info:  
www.donkarl.com/it

 ;-P
vero, però devo dire che il ritardo (anche di giorni), nel mostrare i thread
da parte del server news di tiscali è l'unico lato negativo che ho
riscontrato, per il resto mi trovo molto bene.
:-)
Ciao Giorgio

 @Alex
