Newsgroup: it.comp.appl.access
Titolo: filtro al volo su report

all'apertura di un report, vorrei che mi apparisse una richiesta di
filtraggio su un campo,
non sono stato capace di farlo, ma si puo'?   e come?
il report si basa su una tabella e non su una query

 ha scritto nel messaggio
news:GW_Y7.1150$q%1.3...@news2.tin.it...

Prova con:
Es.
'---------------
DoCmd.OpenReport , , , "[nomeCampoAlfanumericoDaFiltrare] = " & chr(34) &
InputBox("inserisci il testo", "Input dati", "valore di default") & chr(34)
'---------------
Ciao.
--
Sergio MAZZA

 ha scritto nel messaggio
news:a11v2p$j7$1...@canarie.caspur.it...



Ma armeno ho risposto...
Per favore scrivi la tua risposta dopo il messaggio precedente, come faccio
io; grazie.
Spiegarmi meglio? Basta che selezioni le istruzioni utilizzate e premi F1
per avere una spiegazione; il vero problema è sapere se l'esempio che ho
riportato è la soluzione per entrambi o no.
Cosa dice l'help per il metodo OpenReport:
'--- tratto dall'help
il metodo OpenReport esegue l'azione ApriReport in Visual Basic. Per
ulteriori informazioni sul funzionamento dell'azione e dei relativi
argomenti, vedere nella Guida l'argomento relativo all'azione.
Sintassi
DoCmd.OpenReport nomereport[, visualizzazione][, nomefiltro][,
condizioneWHERE]
'---
Ed è proprio l'ultima opzione ([, condizioneWHERE]) che ho preso in
considerazione; significa che posso aprire un report (basato su una query o
tabella) impostandogli una condizione WHERE con sintassi SQL (vedi help).
Es.
ho un report che mi visualizza tutti i nominativi della mia agenda, ma ne
voglio visualizzare solo uno:
'---------
DoCmd.OpenReport "Agenda", , , "[nominativo] = 'Sergio MAZZA'"
'---------
ora questa istruzione mi aprirà sempre il report Agenda e troverà il dato
'Sergio MAZZA' contenuto nel campo [nominativo], se c'è.
Ma se io voglio che sia l'utente a scegliere il nominativo, come faccio?
Devo trovare una istruzione che mi permetta di richiedere il dato in input e
passarlo alla condizione WHERE del report. Per semplicità ho scelto la
funzione InputBox (vedi help) che, una volta invocata, presenta una maschera
con una casella di testo dove inserire dei dati.
'--- tratto dall'help
Visualizza un messaggio in una finestra di dialogo, attendendo che l'utente
immetta del testo o scelga un pulsante, quindi restituisce un valore String
 che include il contenuto della casella di testo.
Sintassi
InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile,
context])
'---
Quindi l'esempio diventa:
'---------
DoCmd.OpenReport "Agenda", , , "[nominativo] = " & Chr(34) &
InputBox("Inserisci il nominativo (Nome e Cognome).", "Input
dati","Nominativo da stampare") & Chr(34)
'---------
L'ultima nota riguarda la funzione Chr (vedi help), con il numero Ascii 34,
ovvero le virgolette ("); se il dato è alfanumerico deve essere racchiuso
tra virgolette ("Sergio MAZZA") e se questo dato deve essere incluso in una
stringa SQL (per esempio) diventerebbe: "[nominativo] = "Sergio MAZZA""; ma
la sintassi è errata e può essere sostituita con l'uso dell'apostrofo:
"[nominativo] = 'Sergio MAZZA'"; ma anche con questa soluzione potresti
incontrare problemi se il nominativo contiene un apostrofo: "[nominativo] =
'Sergio D'AMICO'"; un bel casino! Puoi risolvere con l'utilizzo del Chr che
restituisce il carattere in base al valore Ascii passato; alla fine:
"[nominativo] = " & Chr(34) & "Sergio D'AMICO" & Chr(34).
Adesso l'esempio:
 '---------------
DoCmd.OpenReport , , , "[nomeCampoAlfanumericoDaFiltrare] = " & chr(34) &
InputBox("inserisci il testo", "Input dati", "valore di default") & chr(34)
'---------------
è ancora armeno o meno, meno meno o più o meno?
Ciao.
--
Sergio MAZZA

 ha scritto nel messaggio
news:a13m54$dbi$1...@canarie.caspur.it...



Non capisco che significa "layout di report"; se vuoi filtrare un report
tramite dei valori inseriti su una maschera (con qualsiasi layout) devi
costruirti una condizione Where con sintassi SQL (vedi help).
Riprendiamo la tabella con l'Anagrafica dei clienti, ora voglio filtrare il
report con i dati presenti sulla maschera ma sono quelli dove ho fleggato i
checkbox (posizionati a fianco delle caselle testo).
Quindi il codice diventa:
'--------------
Dim strCondizioneWhere as String
strCondizioneWhere = ""
'verifico se il checkbox è fleggato e se la casella di testo è vuota
If Me!chkNome = -1 Then
    if Not IsNull(Me!nome) Then
        strCondizioneWhere = "[nome] = " & Chr(34) & Me!nome & Chr(34)
    Else
        Msgbox "Sì ma, come se chiama sto' cristiano?"
        Me!nome.SetFocus
        Exit Sub
    End If
End If
'idem con patate
If Me!chkCognome = -1 Then
    if Not IsNull(Me!cognome) Then
'verifico se la stringa con la condizione è piena
        If strCondizioneWhere="" Then
            strCondizioneWhere = "[cognome] = " & Chr(34) & Me!cognome &
Chr(34)
        Else
            strCondizioneWhere = strCondizioneWhere & " And [cognome] = " &
Chr(34) & Me!cognome & Chr(34)
        End If
    Else
        Msgbox "Sì ma, come se chiama sto' cristiano?"
        Me!cognome.SetFocus
        Exit Sub
    End If
End If
'vai col tango
DoCmd.OpenReport "Agenda", , , strCondizioneWhere
'--------------
Ciao.
--
Sergio MAZZA