Newsgroup: it.comp.appl.access
Titolo: query con parametri multipli...

Salve a tutti,
su di una maschera utilizzando il codice
riesco a scrivere in una casella di testo
una condizione del tipo "085","086","087"
ora vorrei che la mia query prenda come
paramentro la condizione scritta sopra.
Nella query scrivo come critrio:
 IN (forms!maschera!casella_testo)
ma non funziona...
qualcuno ha una dritta?
grazie!
ringo

  IN (forms!maschera!casella_testo)
Perchè non ti crei dinamicamente la query preparando la stringa SQL con il
criterio IN e i valori presi via codice senza dover passare dal controllo
della maschera?
Antonio

 ha scritto nel messaggio
news:aneeet$gn4$1...@serv1.albacom.net...

Posso sbagliarmi ma mi sembra che, in una preposizione WHERE, la clausola IN
deve avere tra parentesi o una lista di costanti o una istruzione SQL.
Se nella casella di testo hai memorizzato il valore:
085,086,087
potresti provare a scivere nei criteri della query:
In
(Left([Forms]![maschera]![casella_testo];3);Mid([Forms]![maschera]![casella_
testo];5;3);Mid([Forms]![maschera]![casella_testo];9;3))
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 ha scritto nel messaggio
news:tJzm9.38997$e31.8...@twister2.libero.it...

eh si hai ragione
ma non ho molto voglia... anzi
non ho tanto temo, dovrei cambiare tutta l'impostazione, questa per esempio
è una delle
select cheuso attualmente senza creare la stringa via VBA:
SELECT Polcli.fraz, Polcli.ramo, Polcli.ramo, RAMI.descrizione, Polcli.sub,
Subagenti.descri, Polcli.npc, Anacli.cognome1, Anacli.nome1, [cognome1] & "
" & [nome1] AS nominativo, Titcli.pol, Titcli.decorr, Titcli.totrata,
Anacli.indir1, Anacli.numciv1, Anacli.cap1, Anacli.citta1, Titcli.stato,
Anacli.prov1, Anacli.tel1, Anacli.modpag, Titcli.titolo, RAMI.descrizione,
IIf(([polcli].[ramo]="013") Or ([polcli].[ramo]="031") Or
([polcli].[ramo]="032"),"auto","no auto") AS tipo_auto,
IIf(([polcli].[ramo]="081") Or ([polcli].[ramo]="086"),"vita","no vita") AS
tipo_vita, IIf(([polcli].[ramo]<>"081") And ([polcli].[ramo]<>"086") And
([polcli].[ramo]<>"013") And ([polcli].[ramo]<>"031") And
([polcli].[ramo]<>"032"),"danni","no danni") AS tipo_danni,
provvigione.IMPORTO_PROVVIGIONI AS provvage
FROM ((((Titcli LEFT JOIN Polcli ON Titcli.pol = Polcli.pol) LEFT JOIN
Subagenti ON Polcli.sub = Subagenti.codice) LEFT JOIN RAMI ON Polcli.ramo =
RAMI.Ramo) LEFT JOIN Anacli ON Polcli.npc = Anacli.npc) LEFT JOIN
provvigione ON Titcli.PROG_TITOLO = provvigione.PROG_TITOLO
WHERE (((Polcli.fraz) Is Not Null) AND ((Polcli.ramo) Like
IIf([forms]![scheda_agente_arretrato]![select_ramo]="*","*",[forms]![scheda_
agente_arretrato]![select_ramo])) AND ((Polcli.ramo) In ("085","086")) AND
((Polcli.sub) Like
IIf([forms]![scheda_agente_arretrato]![select_agente]="*","*",[forms]![sched
a_agente_arretrato]![select_agente])) AND ((Titcli.decorr) Between
[forms]![Scheda_Agente_arretrato]![inizio_arretrato] And
[forms]![Scheda_Agente_arretrato]![fine_arretrato]) AND ((Titcli.stato)="E")
AND ((Titcli.titolo) Like
IIf([forms]![scheda_agente_arretrato]![pol_perf]=True,"1","*")) AND
((IIf(([polcli].[ramo]="013") Or ([polcli].[ramo]="031") Or
([polcli].[ramo]="032"),"auto","no auto")) Like
IIf([forms]![scheda_agente_arretrato]![tipo_pol]="2","auto","*")) AND
((IIf(([polcli].[ramo]="081") Or ([polcli].[ramo]="086"),"vita","no vita"))
Like IIf([forms]![scheda_agente_arretrato]![tipo_pol]="3","vita","*")) AND
((IIf(([polcli].[ramo]<>"081") And ([polcli].[ramo]<>"086") And
([polcli].[ramo]<>"013") And ([polcli].[ramo]<>"031") And
([polcli].[ramo]<>"032"),"danni","no danni")) Like
IIf([forms]![scheda_agente_arretrato]![tipo_pol]="4","danni","*")))
ORDER BY Polcli.fraz, Titcli.pol;
se riuscivo senza passare dalla "scorciatoia" VBA risparmierei molto tempo!
grazie!
ringo

 ha scritto nel messaggio
news:aneeet$gn4$1...@serv1.albacom.net...

Ho trovato un'altra soluzione al tuo problema.
Se la maschera si chiama Maschera1.
Se la casella di testo si chiama Pippo.
Se in Pippo sei riuscito a scrivere 085,086,087 (senza virgolette).
Se il campo della query su cui vuoi fare la selezione si chiama Codice.
In un modulo del tuo database copia le seguenti due funzioni:
    Function GetToken(stLn, stDelim)
         Dim iDelim As Integer, stToken As String
         iDelim = InStr(1, stLn, stDelim)
         If (iDelim <> 0) Then
            stToken = LTrim$(RTrim$(Mid$(stLn, 1, iDelim - 1)))
            stLn = Mid$(stLn, iDelim + 1)
         Else
            stToken = LTrim$(RTrim$(Mid$(stLn, 1)))
            stLn = ""
         End If
         GetToken = stToken
      End Function
      Function InParam(Fld, Param)
         Dim stToken As String
         Fld = UCase(Fld)
         Param = UCase(Param)
         If IsNull(Fld) Then Fld = ""
         Do While (Len(Param) > 0)
            stToken = GetToken(Param, ",")
            If stToken = LTrim$(RTrim$(Fld)) Then
               InParam = -1
               Exit Function
            Else
               InParam = 0
            End If
         Loop
      End Function
Nella tua query aggiungi un campo calcolato che nella riga Campo: abbia
scritto:
InParam([Codice];[Forms]![Maschera1]![Pippo])
Vella riga Criteri: del campo calcolato scrivi:
Vero
Per rendere il campo calcolato non visibile, disattiva lo svirgolino dalla
sua riga Mostra: .


 ma non funziona...
    Verifica la seguente query:
        SELECT
            Clienti.*
        FROM
            Clienti
        WHERE
            DCount
            (
              "*"
            , "Clienti"
            , Chr$(34) & [IDCliente] & Chr$(34)
            & " In ( " & [Forms]![x_ringo]![cdtCriteri] & " )"
            )
            > 0
        ;
con la tabella:
        Clienti
del database:
        Northwind
e una maschera di nome:
        x_ringo
sul corpo della quale porrai un controllo Casella di testo di nome:
        cdtCriteri
ed un controllo Pulsante di comando di nome:
        pdcMostraQuery
con associato il seguente codice:
        Private Sub pdcMostraQuery_Click()
            DoCmd.OpenQuery "x_ringo"
        End Sub
    Apri la maschera:
        x_ringo
e digita in cdtCriteri:
        "ALFKI","ANATR","ANTON"
o altri IDCliente realmente esistenti nel tuo Northwind, quindi clic su
pdcMostraCritery.
    E' questo che intendevi?
    Considera anche che la velocita' di esecuzione ottenuta con questa
"soluzione" potrebbe anche essere insoddisfacente.
--
Ciao :-)
Maurizio
--------
?SPQR(C)
 X
--------

 ha scritto nel messaggio
news:Q%Bm9.39594$e31.8...@twister2.libero.it...

beh devo dire che la tua soluzione mi ha letteralmente
SBALORDITO!!!
sarebbe utile a molti la tua soluzione
che ne dici se la inviamo sul sito comune?
grazie!
ringo

 ringo
