Newsgroup: it.comp.appl.access
Titolo: Query con criterio valore multiplo proveniente da form

 
Buongiorno
ho questa stringa sql
sql = "SELECT b.Id, r.Id, r.NumeroProvv, r.DataProvv, rt.Rata, rt.Scadenza, "
sql = sql & " b.Totale, b.ImportoLettere, b.QuartoCampo, b.ImportoCodeLine, t.Tributo  "
sql = sql & " FROM ((tblRateizzazioni AS r INNER JOIN tblRate AS rt "
sql = sql & " ON r.Id = rt.IdRateizzazione) INNER JOIN tblEmissTarsuBollettini AS b "
sql = sql & " ON 
rt.id
 = b.IdBollettino) INNER JOIN tblTributi AS t "
sql = sql & " ON r.IdTributo = t.Id "
sql = sql & " WHERE b.Id In ( " & [Forms]![frmRateizzazioni]![lblIdBollettino] & ") "
sql = sql & " ORDER BY rt.Rata;"
 
se questa stringa la trasformo in una query non funziona perchè non accetta i valori multipli passati dal campo della form In -> ( " & [Forms]![frmRateizzazioni]![lblIdBollettino] ")"
 non funziona sia se i valori li passo separati con la "," che separati con il ";"
esempio 
[Forms]![frmRateizzazioni]![lblIdBollettino] = 12345,345,879
[Forms]![frmRateizzazioni]![lblIdBollettino] = 12345;345,879
Il campo Id di ricerca è numerico chiaramente.
 
Qualcuno sa come devo formattare questro criterio nella query?
La necessità è dovuta al fatto che la devo passare come stampa unione a word
 
Grazie
Giuseppe


questo
"12345,345,879"
e' diverso da questo:
'12345','345','879'
col doppio apice fa lo stesso
-- 
ac (x=y-1)
Aborro il Killfile
(La violenza e' l'ultimo rifugio degli incapaci -Salvor Hardin-)
 
---
Questa e-mail � priva di virus e malware perch� � attiva la protezione avast! Antivirus.
http://www.avast.com
 
 

 La necessitï¿œ ï¿œ dovuta al fatto che la devo passare come stampa unione a word
 
Di solito in questo caso si usa VBA per costruire la stringa SQL della 
query ma c'ï¿œ anche una soluzione sporca:
 
Togli il criterio attuale, vai in vis. struttura della query e aggiungi 
un campo calcolato:
 
Eval(b.Id & ' In(' & Forms!frmRateizzazioni!lblIdBollettino & ')')
 
con criterio: True
 
-- 
Ciao
Karl
*********
Access FAQ:  
http://www.donkarl.com/it
 
Access Lobby: 
http://www.AccessDevelopers.org
 


Questa soluzione non funziona, stesso problema, non la esegue va in errore

 Access Lobby: 
http://www.AccessDevelopers.org
 
 
Questa soluzione funziona solo che è un pò lenta...
 
L'ho fatta con la stringa sql e funziona perfettamente, solo che devo eseguire la stampa unione su word, perchè al momento non riusciamo a capire ne io ne il CED il motivo per cui ora le stampe sul terminal server si bloccano in anteprima, faccio la formattazione del report via codice.
Quindi per ora unica soluzione è trasformazione dei report in word.....purtroppo.
 
grazie a tutti
se avete altre soluzione....anche di reportistica ben vengano
 
Ciao
Giusppe

 sql = sql & " WHERE b.Id In ( " & [Forms]![frmRateizzazioni]![lblIdBollettino] & ") "
sql = sql & " WHERE b.Id In ( "a","b","c")
 
non funziona? Non ci credo neanche se lo vedo ;)
La IN, soprattutto se la lista e' lunga, e' piuttosto lenta.
Se a questo aggiungi le tre inner join una "certa" lentezza e' il minimo 
da aspettarsi.
 
Per ottenere quello che ho scritto si puo' fare cosi':
x = "'" & 
replace([Forms]![frmRateizzazioni]![lblIdBollettino],",","','" & "'"
sql = sql & " WHERE b.Id In ( " & x & ")"
 
 
Per valutare bene i pesi fai una query senza la where ed eseguila come 
query e vedi quanto ci mette. Usa poi quella query applicando la where e 
l'order by
-- 
ac (x=y-1)
Aborro il Killfile
(La violenza e' l'ultimo rifugio degli incapaci -Salvor Hardin-)
 
---
Questa e-mail è priva di virus e malware perché è attiva la protezione avast! Antivirus.
http://www.avast.com
 
 

Il 25/09/2014 16:13, Alessandro Cara ha scritto:
x = "'" & replace([Forms]![frmRateizzazioni]![lblIdBollettino],",","','" 
& "'"
 
scordata una parentesi
x = "'" & 
replace([Forms]![frmRateizzazioni]![lblIdBollettino],",","','") & "'"



L'istruzione sql funziona, anche quella che ho postato io.
Non funziona nella query, il mio problema è cosa scrivera nel campo criterio della query.
L'istruzione che mi hai passato ora fa la stessa cosa della precedente, inserisce gli apici prima e dopo il numero.
Ma poi quando vado a passare nella query il criterio
Campo ->ID
Criterio -> In([Forms]![frmRateizzazioni]![lblIdBollettino])
o nel tuo il tuo ultimo caso la variabile  "x"
mi esce l'errore
 
Io faccio questo ciclo per verificare le rate selezionate dall'utente:
For Each liCurr In Me!elencoEmissioni.ListItems
    If liCurr.Checked = True Then
        If IsNull(Me.lblIdBollettino) Then
            Me.lblIdBollettino = liCurr.Text
        Else
            Me.lblIdBollettino = Me.lblIdBollettino & "," & liCurr.Text
        End If
        liCurr.Checked = False
    End If
Next liCurr
 
in questo modo popolo il campo lblIdBollettino con gli id delle rate
questa la versione che avevo modificato dopo il tuo primo post
For Each liCurr In Me!elencoEmissioni.ListItems
    If liCurr.Checked = True Then
        If IsNull(Me.lblIdBollettino) Then
            Me.lblIdBollettino = "," & liCurr.Text & ","
        Else
            Me.lblIdBollettino = Me.lblIdBollettino & ",'" & liCurr.Text & "'"
        End If
        liCurr.Checked = False
    End If
Next liCurr
 
Grazie
Giuseppe


Alt! id delle rate e' numerico?!  La lista va quindi passata senza 
delimitatori di stringa quindi la tua forma iniziale era corretta
sql = sql & " WHERE b.Id In ( " & 
[Forms]![frmRateizzazioni]![lblIdBollettino] & ") "
 
Ma tu non dici neanche che tipo di errore prendi.
Il mio consiglio resta valido, quello della query su cui successivamente 
applicare il criterio.
In questi casi per capire si fa una debug.print a valle della 
costruzione di "sql" (intendo la tua variabile) e poi si preleva la 
stringa costruita e la si esegue come query "esterna" (cioe' andando 
sotto query e facendo il copia incolla ed esecuzione della stessa). 
Talvolta prelevando tale stringa ci si accorge /subito/ dell'errore 
sintattico commesso, perche' alla base, ai bet, c'e' un errore sintattico.


 Il 25/09/2014 17:05, yosef ha scritto: > Il giorno giovedì 25 settembre 2014 16:16:41 UTC+2, Alessandro Cara ha scritto: >> Il 25/09/2014 16:13, Alessandro Cara ha scritto: >> >> x = "'" & replace([Forms]![frmRateizzazioni]![lblIdBollettino],",","','" >> >> & "'" >> >> >> >> scordata una parentesi >> >> x = "'" & >> >> replace([Forms]![frmRateizzazioni]![lblIdBollettino],",","','") & "'" >> >> >> >> -- >> >> ac (x=y-1) >> >> Aborro il Killfile >> >> (La violenza e' l'ultimo rifugio degli incapaci -Salvor Hardin-) >> >> >> >> --- >> >> Questa e-mail è priva di virus e malware perché è attiva la protezione avast! Antivirus. >> >> 
http://www.avast.com
 > > L'istruzione sql funziona, anche quella che ho postato io. > Non funziona nella query, il mio problema è cosa scrivera nel campo criterio della query. > L'istruzione che mi hai passato ora fa la stessa cosa della precedente, inserisce gli apici prima e dopo il numero. > Ma poi quando vado a passare nella query il criterio > Campo ->ID > Criterio -> In([Forms]![frmRateizzazioni]![lblIdBollettino]) > o nel tuo il tuo ultimo caso la variabile "x" > mi esce l'errore > > Io faccio questo ciclo per verificare le rate selezionate dall'utente: > For Each liCurr In Me!elencoEmissioni.ListItems > If liCurr.Checked = True Then > If IsNull(Me.lblIdBollettino) Then > Me.lblIdBollettino = liCurr.Text > Else > Me.lblIdBollettino = Me.lblIdBollettino & "," & liCurr.Text > End If > liCurr.Checked = False > End If > Next liCurr > > in questo modo popolo il campo lblIdBollettino con gli id delle rate > questa la versione che avevo modificato dopo il tuo primo post > For Each liCurr In Me!elencoEmissioni.ListItems > If liCurr.Checked = True Then > If IsNull(Me.lblIdBollettino) Then > Me.lblIdBollettino = "," & liCurr.Text & "," > Else > Me.lblIdBollettino = Me.lblIdBollettino & ",'" & liCurr.Text & "'" > End If > liCurr.Checked = False > End If > Next liCurr > > Grazie > Giuseppe > Alt! id delle rate e' numerico?! La lista va quindi passata senza delimitatori di stringa quindi la tua forma iniziale era corretta sql = sql & " WHERE b.Id In ( " & [Forms]![frmRateizzazioni]![lblIdBollettino] & ") " Ma tu non dici neanche che tipo di errore prendi. Il mio consiglio resta valido, quello della query su cui successivamente applicare il criterio. In questi casi per capire si fa una debug.print a valle della costruzione di "sql" (intendo la tua variabile) e poi si preleva la stringa costruita e la si esegue come query "esterna" (cioe' andando sotto query e facendo il copia incolla ed esecuzione della stessa). Talvolta prelevando tale stringa ci si accorge /subito/ dell'errore sintattico commesso, perche' alla base, ai bet, c'e' un errore sintattico. -- ac (x=y-1) Aborro il Killfile (La violenza e' l'ultimo rifugio degli incapaci -Salvor Hardin-) --- Questa e-mail è priva di virus e malware perché è attiva la protezione avast! Antivirus. 
http://www.avast.com
 
 
Buongiorno,
si l'id è numerico l'avevo scritto e scusate non ho messo l'errore, è questo:
se lancio la query in access (non l'istruzione sql da codice) esce:
Espressione digitata non correttamente o troppo complessa per essere valutata. Un'espressione numerica, ad esempio, può contenere troppi elementi complessi. Semplificare assegnando parti dell'espressione a variabili.
 
L'errore è corretto, ci mancherebbe, si trova come criterio un ID che deve essere uguale ad una serire di numeri separati da una virgola (es: 1345,345,567,98765). Io chiedevo se c'era la possibilità di formattare in modo tale ce accettasse più volori numerici.
La soluzione proposta da Karl funziona.
 
 
Questo invece l'errore di automazione che viene fuori da Word (giustamente)
Errore di run-time '462':
Il computer server remoto non esiste o non è disponibile
 
cliccando su debug si posiziona sulla riga:
With ActiveDocument.MailMerge
 
Se salto il blocco With in word è come se avesse tolto i dati di origine della stampa unione.
 
Grazie
e scusa se non sono molto chiaro
Giuseppe