Newsgroup: it.comp.appl.access
Titolo: Filtro composto

Salve a tutti.
Il mio problema è quello di creare una maschera per la ricerca di
informazioni all'interno di un database. La ricerca deve avvenire mediante
l'immissione di più condizioni all'interno di altrettante caselle combinate.
Un pulsante poi, tramite l'evento click, deve filtrare i records tenendo
conto delle informazioni immesse nelle caselle combinate tramite l'operatore
AND.
Ma come fare a dire ad Access 2000 di non considerare le caselle
eventualmente restate vuote? Altrimenti mi cercherebbe solo i records che
avessere quel campo vuoto e cioè nessuno.
Scusate la probabile ingenuità della mia domanda ma sono alle primissime
armi.
Sarei molto grato a chi mi volesse aiutare a muovere i primi passi.
Rosario Palumbo

 wrote in message
news:UoKL6.20161$RX4.1...@news.infostrada.it...

Beh, devi costruire dinamicamente il RecordSource della maschera:
Function CreaFiltro()
    Dim Res As String
    Res = ""
    If Len([Forms]![Maschera1]![Controllo1]) > 0 Then
        Res = Res & " Campo1 = """ & [Forms]![Maschera1]![Controllo1] & """""
    End If
    If Len([Forms]![Maschera1]![Controllo2]) > 0 Then
        If Len(Res) > 0 Then
            Res = Res & " AND "
        End If
        Res = Res & " Campo2 = """ & [Forms]![Maschera1]![Controllo2] & """""
    End If
    If Len([Forms]![Maschera1]![Controllo3]) > 0 Then
        If Len(Res) > 0 Then
            Res = Res & " AND "
        End If
        Res = Res & " Campo3 = """ & [Forms]![Maschera1]![Controllo3] & """""
    End If
    If Len(Res) > 0 Then
        Res = " Where " & Res
    End If
    CreaFiltro = "Select * from Tabella1 " & Res
End Function
Beh, questa più o meno il codice che dovresti scrivere. Se hai dubbi riposta!
Ciao!
Esteban
Hosted by 
www.seber.it

 Beh, devi costruire dinamicamente il RecordSource della maschera:
A parte il test via codice di esteban, puoi anche preparare una volta per
tutte la tua query scrivendo sotto i campi da filtrare un'espressione simile
a questa
like nz([forms]![tuaform]![tuocontrollo];"*")
Antonio

 wrote in message
news:JxLL6.20276$RX4.1...@news.infostrada.it...

Wow! Da quando esiste questa funzione????
In ogni caso la scriverei così: like
nz([forms]![tuaform]![tuocontrollo];"""*""")
Comunque funziona bene se i campi sono campi di testo, mentre se sono numeri?
A questo punto si potrebbe fare la query bell'e finita come suggerisce Antonio,
ma scritta in questo modo:
Campo1 like nz([forms]![tuaform]![tuocontrollo1];Campo1) ' nel caso di una
stringa
Campo2 = nz([forms]![tuaform]![tuocontrollo2];Campo2) ' nel caso di un numero,
una data, un boolean, ecc.
In questo caso, se per esempio [forms]![tuaform]![tuocontrollo1] è null, allora
la query diventa Campo1 Like Campo1 che è sempre vero e quindi ritorna tutti i
record.


 ha scritto nel messaggio
news:giLL6.20243$RX4.1...@news.infostrada.it...


 una data, un boolean, ecc.
Stai facendo un po' di confusione(anche se l'esempio che hai fatto funziona
lo stesso). Il like funziona anche con i numeri, ci pensa a convertirli in
stringhe.
Tu ripeto ti confondi con i criteri tipo quello della dlookup
dlookup("campo","tab",[ID] = 5)
dlookup("campo","tab",[ID] = '5a')
E comunque io avevo proposto una soluzione che prevedeva la preparazione di
una query, non piů la preparazione di una stringa sql dinamica via codice
Antonio

 wrote in message
news:t75M6.27151$RX4.1...@news.infostrada.it...

Ok, ok un po' di confusione l'ho fatta sicuramente: lavoro troppo con SQL!
Grazie per le info, ora ne so di piů anch'io!
