Filtro on off

di il
12 risposte

Filtro on off

Buongiorno mi presento mi chiamo Fabrizio.
Ho un piccolo problema che non riesco a risolvere, premetto che son ocompletamente autodidatta e alle prime armi. Comunque.
Io sto utilizzando il seguente comando per poter mettere su di un report dei record filtrati:
Private Sub Comando1011_Click()
On Error Resume Next
DoCmd.OpenReport "Report Equipaggiamenti Terrestri", acViewPreview, , Me.Filter
DoCmd.OutputTo acOutputReport, "Report Equipaggiamenti Terrestri", "PDFFormat(*.pdf)", "", False, "", , acExportQualityPrint
End Sub

se però non metto nessun filtro mi compare la finestra di errore dicendomi ch ei campi sono vuoti.
Viceversa se uso quest'altro comando:
Private Sub Comando1011_Click()
On Error Resume Next
DoCmd.OpenReport "Report Equipaggiamenti Terrestri", acViewPreview, , Me.FilterOn = False
DoCmd.OutputTo acOutputReport, "Report Equipaggiamenti Terrestri", "PDFFormat(*.pdf)", "", False, "", , acExportQualityPrint
End Sub

mi da errore se inserisco filtri, in pratica vorrei unire le 2 stringhe di comando, ho fatto vari tentativi che di seguito non vi scrivo perchè sarebbero troppe pagine, potete darmi un consiglio e un aiuto ? Grazie a tutti.

12 Risposte

  • Re: Filtro on off

    Cosa vuoi filtrare? Da dove proviene il filtro: da un valore in una maschera?
  • Re: Filtro on off

    Allora, il filtro proviene da un'altra maschera nella quale ci sono 5 campi che in base alla selezione vengono filtrati in questa maschera nella quale ho un tasto al quale ho associato il comando che ho scritto sopra, spero di essere stato chiaro.
  • Re: Filtro on off

    Quando metti [Me.Filter] nel parametro WHERE della Funzione OpenReport, non è per attivare la proprietà FILTER, ma è per passare come stringa la proprietà FILTER di MASCHERA al parametro WHERE, che poi il REPORT in apertura applica alla proprietà FILTER dello stesso.

    Quindi, ricordando che è un dato STRINGA, quando utilizzi questa SINTASSI
    
    DoCmd.OpenReport "Report Equipaggiamenti Terrestri", acViewPreview, , Me.FilterOn = False
    stai scrivendo un'abominio... insensato.

    Ovvio che se non hai nessun FILTRO, è inopportuno passare il dato, quindi sarebbe più indicato fare una cosa simile:
    
    If Me.FilterOn=True then
       If Len(Me.Filter)>0 Then
           DoCmd.OpenReport "Report Equipaggiamenti Terrestri", acViewPreview, , Me.Filter
       Else
           DoCmd.OpenReport "Report Equipaggiamenti Terrestri", acViewPreview
       End If
    Else
        DoCmd.OpenReport "Report Equipaggiamenti Terrestri", acViewPreview
    End If
    oppure in ottica di scrittura più intelligente:
    
    Dim blFilter As Boolean
    
    blFilter=Len(Me.Filter)>0
    If Me.FilterOn AND blFilter Then
        DoCmd.OpenReport "Report Equipaggiamenti Terrestri", acViewPreview,,Me.Filter
    Else
    	DoCmd.OpenReport "Report Equipaggiamenti Terrestri", acViewPreview
    End if
    Sinceramente non ho capito cosa devi fare... vedi tu...
  • Re: Filtro on off

    Grazie Alex, ma non ho risolto il mio errore, cerco di spiegarmi meglio e in maniera piu dettagliata, il codice hce mi hai postato ha la stessa funzione del mio e non risolve il problema.
    io ho una Maschera A, con 316 record, immagina un database di macchine ogni record una macchina. dopodiche ho una maschera B dalla quale tramite filtri dico alla maschera A di mostrarmi solo determinate macchine in base ai filtri messi.
    Nella maschera A inoltre ho un tasto che mi consente di salvare in PDF un report con solo i mezzi filtrati. io su questo tasto ho messo il comando che ho scritto sopra e tutto funziona bene finche io nella maschera B seleziono almeno un filtro.
    Ma se io voglio salvare il PDF di tutti i mezzi quindi non mettere filtri mi esce una finestrella che mi dice così"Maschere!FiltroM!A" dove FiltroM sarebbe la maschera che io ho chiamato B e a sarebbe il campo che uso per filtrare.
    questa casellina esce 5 volte una volta per ogni campo che uso come filtro alla fine mi esce la pagina da salvare in PDF con tutti i mezzi .
    spero di essere stato chiaro scusami.
  • Re: Filtro on off

    Non puoi fare alcuna valutazione ne utilizzo di un campo vuoto (impostato a Null).
    Ti darebbe errore tanto che cerchi di misurarne la lunghezza (len) che lo usi con un metodo.
    Prova il codice postato sostituendo:
    if Len(Me.Filter)>0
    con
    if not isnull(me.filter)
  • Re: Filtro on off

    Sei sicuro di quello che dici..?
    Hai letto cosa dice la guida in merito alla proprietà Filter...?
    Ti pare dica che il dato restituito è di tipo Variant. ..?
    Nella mia guida dice String e, come sai il datatype string non supporta Null Value, ne consegue che Filter non può valere Null.

    Leggi qui:
    http://office.microsoft.com/en-us/access-help/filter-property-HA001232736.aspx
  • Re: Filtro on off

    Dove hai letto che string non supporta null?
  • Re: Filtro on off

    Buona Sera,
    ho appena fatto la registrazione e approfitto per salutare tutti.

    in merito alla questione in argomento io avrei optato per una soluzione del tipo:
    
        If (IsNull(A) = True Or Len(A) = 0) and (IsNull(B) = True Or Len(B) = 0) ... C ... D ... E Then 
            [Report_Report Equipaggiamenti Terrestri].RecordSource = "Tabella1"
        Else
            [Report_Report Equipaggiamenti Terrestri].RecordSource = "Query1"
        End If
    
    da mettere nell'evento onclick della maschera "A" (quella con il pulsante che apre il report) in questo caso la condizione è che la maschera "B" (quella dei filtri) deve essere aperta quando clicchi il pulsante che apre il Report.

    nel codice:
    tabella1 è la tabella contenente tutti i record delle macchine;
    query1 è una query dove nei criteri metterai [Maschere]![FiltroM]![A] e cosi via...
    ps:
    se deciderai di adottare questa soluzione dovresti andare su query1 in modalita struttura e poi tasto Destro del mouse e copiarti la visualizzazione SQL... poi avrai bisogno di manipolare la parte relativa alla clausola "WHERE"...
  • Re: Filtro on off

    Misterxxx ha scritto:


    dove hai letto che string non supporta null?
    Prova ad assegnare ad una Variabile Stringa il valore NULL, e leggi l'errore che ne consegue...

    Lo puoi facilmente rilevare dalla verifica della Variabile definita ma non inizializzata:
    
    Dim strIN As String
    If IsNull(strIN) Then MsgBox "Il Valore è NULL"
    
    Ovviamente non esce il MsgBox...!!!
    Ora prova questo
    
    Dim strIN As String
    strIN = Null
    All'assegnazione di Null otterrai un'errore 94 "Utilizzo non valido di NULL", e questo perchp il DataType String non lo supporta.

    Ne consegue che hai fatto un'osservazione ERRATA.

    Ora normalmente per discriminare invece se una VarType di tipo Variant sia Valorizzato o meno... si può usare questo
    
    If Len(NomeVariabileVariant & vbNullstring)>0 Then
    ...
    Questo metodo sfrutta il CASTING forzato del DataType da Variant a String, quindi il LEN funziona sempre anche se la VariabileVariant=Null

    Fare poi attenzione alla differenza tra "" e VbNullstring, cose MOLTO DIVERSE...
  • Re: Filtro on off

    Ringrazio tutti per le molteplici soluzioni, le ho provate e sto continuando a fare altre prove, la cosa concettualmente è banale ma continua a darmi lo stesso errore.
    comunque ho notatto un'altra cosa che vi dico per completeza di informazioni.
    se io nella maschera dove ho la selezione filtri, applico il filtro anche quando tutti i campi filtro sono vuoti il messaggio di "errore" non compare più quindi adesso sto provando a lavorare su questo di comando che posto di seguito:
    Private Sub Comando19_Click()
    DoCmd.OpenForm "MezziTerrestri", acNormal, "", "IIf([Forms]![FiltroM]![A] " _
    & "is not null,[terrestri query]![Categoria]= " _
    & "[Forms]![FiltroM]![A],[Forms]![FiltroM]![A]is null)" _
    & "And IIf([Forms]![FiltroM]![B] " _
    & "is not null,[terrestri query]![Rulli / Assi]= " _
    & "[Forms]![FiltroM]![B],[Forms]![FiltroM]![B]is null)" _
    & "And IIf([Forms]![FiltroM]![C] " _
    & "is not null,[terrestri query]![Trazione]= " _
    & "[Forms]![FiltroM]![C],[Forms]![FiltroM]![C]is null)" _
    & "And IIf([Forms]![FiltroM]![D] " _
    & "is not null,[terrestri query]![Supportato non supportato]= " _
    & "[Forms]![FiltroM]![D],[Forms]![FiltroM]![D]is null)" _
    & "And IIf([Forms]![FiltroM]![E] " _
    & "is not null,[terrestri query]![Posizione scarichi]= " _
    & "[Forms]![FiltroM]![E],[Forms]![FiltroM]![E]is null)", , acNormal
    End Sub
    con questi ordini io applico il filtro in base al campo di interesse, quindi sia che ne metto 1 o 5 mi filtra , ma se io lascio tutti i campi vuoti sono obbligato ad applicare ugualmente il filtro per far capire al bottone che mi stampa il report che deve stamparmi tutti i record.
  • Re: Filtro on off

    Leggi questo articolo:
    http://forum.masterdrive.it/access-79/access-query-selezionare-tutti-i-record-se-criterio-nullo-58039/
  • Re: Filtro on off

    @Alex ha scritto:


    Misterxxx ha scritto:


    dove hai letto che string non supporta null?
    Prova ad assegnare ad una Variabile Stringa il valore NULL, e leggi l'errore che ne consegue...

    Lo puoi facilmente rilevare dalla verifica della Variabile definita ma non inizializzata:
    
    Dim strIN As String
    If IsNull(strIN) Then MsgBox "Il Valore è NULL"
    
    Ovviamente non esce il MsgBox...!!!
    Ora prova questo
    
    Dim strIN As String
    strIN = Null
    All'assegnazione di Null otterrai un'errore 94 "Utilizzo non valido di NULL", e questo perchp il DataType String non lo supporta.

    Ne consegue che hai fatto un'osservazione ERRATA.

    Ora normalmente per discriminare invece se una VarType di tipo Variant sia Valorizzato o meno... si può usare questo
    
    If Len(NomeVariabileVariant & vbNullstring)>0 Then
    ...
    Questo metodo sfrutta il CASTING forzato del DataType da Variant a String, quindi il LEN funziona sempre anche se la VariabileVariant=Null

    Fare poi attenzione alla differenza tra "" e VbNullstring, cose MOLTO DIVERSE...
    Mi scuso se ho scritto un'inesattezza.
    Non lo faccio più
Devi accedere o registrarti per scrivere nel forum
12 risposte