Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [Access] Query con piu di un parametro utente

    ho un problema penso comunissimo.In pratica vorrrei sapere come adattare la mia query alla valutazione di piu di un parametro utente,magari selezionati attraverso dei checkbox...

    1.Ho un elenco di nomi,e ho una query generica che me li filtra
    2.All utente viene proposta una scelta tramite checkbox(il numero di parametri è fisso)
    3.Access valuta la query includendo tra le condizioni,quelle selezionate nel punto 2 dall utente

    A parole funge benissimo,ma la pratica mi è oscura XD grazie infinite per l aiuto

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Domanda troppo vaga.
    Una volta spuntate le checkbox cosa ci si doverebbe fare?

    Se tutte le condizioni devo verificarsi contemporaneamente devi concatenare le varie opzioni con un and. Se è sufficiente che se ne verifichi una usi l'operatore booleano or oppure potrebbe essere sufficiente risolvere con IN. Senza maggiori dettagli non si può essere più precisi.

  3. #3
    Grazie infinite...Mi spiego meglio con un esempio.Supponiamo di avere una tabella contatti.
    Al suo interno ci sono 3 voci A B C, che sono dei campi vero/falso e un campo che è il nome del contatto

    L utente avra davanti un listato in cui è possibile selezionare, o A o B o C in qualsiasi ordine

    Cliccando su un pulsante CERCA, dovrei avere come risultato tutti i contatti che hanno vero su una (o su tutte o solo su alcune)delle 3 voci....

    Certo dopo dovrei fare una query di eliminazione duplicati.ma magari sto sbagliando logica

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Il problema mi sa che è a monte. Devi decidere a priori che tipo di ricerca vuoi effettuare.

    Se è sufficiente che una sola delle condizioni sia vere usi or

    select * from contatti where a = -1 or b= -1 or c = -1

    (in access il campo "checkato" non viene identificato con 1 ma col -1)

    Se invece le condizioni devono essere TUTTE CONTEMPORANEAMENTE vere allora usi and.

    select * from contatti where a = -1 and b= -1 and c = -1


    In sintesi, anche nel caso volessi costruire dinamicamente la tua query, devi decidere prima cosa deve essere restituito in base alle scelte dell'utente.

    Nessuno ti vieta di mettere eventualmente anche un radio button con due opzioni, del tipo "TUTTE" o "ALMENO UNA", e a seconda di tale opzione, generi la query di conseguenza con gli and oppure con gli or.

  5. #5
    Mi sono spiegato male scusami...
    Allego un esempio di codice cosi è piu chiaro e puo essere di aiuto anche per altre persone in futuro

    prova selezione multipla_mdb
    http://www.mediafire.com/?nimzjzummny

    Chiedo venia per i nomi degli utenti

    L output sarebbe: Selezionando solo A mi restituisce solo pluto,selezionando B e C restituisce pippo,paperino,topolino e pluto e selezionando A,B,C tutti i nomi presi una sola volta

    grazie molte

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Ah, stai usando un controllo listbox.

    codice:
    Private Sub Comando11_Click()
    Dim strSQL As String
    Dim i As Integer
    
    If Elenco.ItemsSelected.Count = 0 Then
        MsgBox "selezionare almeno una voce"
        Exit Sub
    End If
    
    strSQL = "select * from prova where 1<>1 "
    For i = 0 To Elenco.ListCount - 1
            If Elenco.Selected(i) Then
             strSQL = strSQL & "or " & Elenco.Column(0, i) & "=-1"
            End If
    Next i
    MsgBox strSQL
    End Sub
    Una volta generata la query ci fai quel che vuoi.

  7. #7
    Scusa la domanda idiota ma una volta ottenuta la stringa sql come faccio ad eseguirla?
    E poi una domanda per capire il tuo ragionamento,perchè 1 diverso da 1?
    select * from prova where 1<>1

    e poi perchè legare le condizioni con gli or anzichè con gli and?

    p.s. dillo che sei un bot

  8. #8
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Originariamente inviato da nikkysixx
    Scusa la domanda idiota ma una volta ottenuta la stringa sql come faccio ad eseguirla?
    E poi una domanda per capire il tuo ragionamento,perchè 1 diverso da 1?
    select * from prova where 1<>1

    p.s. dillo che sei un bot
    Ho messo 1<>1 perchè all'inizio della stringa "select * from prova where " devo concatenare le scelte fatte dall'utente

    or a=-1
    or a=-1 or b=-1

    eccetera

    poichè non posso scrivere

    select * from tabella where or a=-1 or b=-1, mi serve una condizione che non infici quanto segue. Siccome nel tuo caso usi or, metterai 1<>1.

    Se invece avessi dovuto mettere

    and a=-1 and b=-1 eccetera, allora avresti usato 1=1 che è sempre vera, mentre 1<>1 è sempre falsa.
    Al posto di 1<>1 potresti anche scrivere 0 e al posto di 1=1 semplicemente 1.

    Per quel che riguarda l'esecuzione della query dipende da ciò che vuoi fare. Vuoi aprire un report, un form, o cos'altro?

    Del bot non me l'avevano ancora dato.

    edit.
    Uno dei modi per verificare il risultato della query è questo:

    codice:
    Private Sub Comando11_Click()
    Dim strSQL As String
    Dim i As Integer
    Dim dbs As Database
    Dim rs As Recordset
    Dim qdf As QueryDef
    
    Set dbs = CurrentDb()
    
    
    If Elenco.ItemsSelected.Count = 0 Then
        MsgBox "selezionare almeno una voce"
        Exit Sub
    End If
    
    strSQL = "select * from prova where 1<>1 "
    For i = 0 To Elenco.ListCount - 1
            If Elenco.Selected(i) Then
             strSQL = strSQL & "or " & Elenco.Column(0, i) & "=-1"
            End If
    Next i
    'MsgBox strSQL
    
    Set rs = dbs.OpenRecordset(strSQL, dbOpenSnapshot)
    
    With dbs
        Set qdf = .CreateQueryDef("tmpQuery", strSQL)
        DoCmd.OpenQuery "tmpQuery"
        'nel caso volessi impedire le modifiche sul risultato della query 
        'sostituisci la riga precedente con quella sottostante
        'DoCmd.OpenQuery "tmpQuery", , acReadOnly
    .QueryDefs.Delete "tmpQuery"
    End With
    dbs.Close
    qdf.Close
    
    End Sub

  9. #9
    Un ultimo problemino...sto combattendo contro la logica booleana per implementare un ultimo controllo e cioè una colonna di tipo esclusione vero o falso,che mi escluda dalla query principale tmpQuery i record che hanno la spunta "Esclusione"

    Ho provato a impostare

    strSQL = "select * from prova where (prova.Esclusione = False) AND 1<>1 "

    Ma non funziona

  10. #10
    Sintassi sbagliata ora funziona

    Discussione chiusa

    thanks

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.