Aprire Report con campi filtrati da maschera

di il
10 risposte

Aprire Report con campi filtrati da maschera

Salve a tutti e rieccomi, come da titpolo vi scrivo per cercare di risolvere questo nuovo problema..
Ho una maschera principale (formConsultazione) ed una sottomaschera (FormDettagli)
Nella maschera principale vi sono una serie di campi dove imposto i filtri per la visualizzazione dei record nella sottomaschera,tramite txtbox (per la ricerca di campi testo parziali) o tramite combobox per categorie di stato. Fin qui tutto bene.
Quando apro il report, tramite la formConsultazione, quest'ultimo mi restituisce tutti i valori visualizzati nella sottomaschera, come se nessun filtro avesse agito.
provavo a modificare il codice in base a questo riportato qui https://msdn.microsoft.com/en-us/library/office/ff192676.aspx mi segnala errore run time 13 "tipo non corrispondente"
Private Sub btnReport_Click()
Dim strFilter As String

    If Me.[FormDettagli].Form.FilterOn = True
        strFilter = Me.[FormDettagli].Form.Filter
    DoCmd.OpenReport "RptConsultazione", acViewPreview, "", strFilter, "", acNormal
    End If
    end sub
mentre, se la scrivo così, variando il comando di anteprima, mi chiede di reinserire la condizione dei filtri ma poi stampa il report filtrato..
DoCmd.OpenReport "RptConsultaCollaudi", acViewPreview, , strFilter, , acNormal
come potrei risolvere? Consigli?

10 Risposte

  • Re: Aprire Report con campi filtrati da maschera

    zio Ken ha scritto:


    ...
    provavo a modificare il codice in base a questo riportato qui https://msdn.microsoft.com/en-us/library/office/ff192676.aspx mi segnala errore run time 13 "tipo non corrispondente"
    Su quale riga?
    Qual è il contenuto di strFilter immediatamente di apire il report? aggiungi una riga
           strFilter = Me.[FormDettagli].Form.Filter
        Debug.Print strFilter '<===
    
    Credo poi che ci sia qualcosa che non va in questa riga (e si riallaccia alla prima domanda)
    DoCmd.OpenReport "RptConsultazione", acViewPreview, "", strFilter, "", acNormal
    La sintassi di quel comando è
    DoCmd.OpenReport(ReportName, View, FilterName, WhereCondition, WindowMode, OpenArgs)
    Mi sembra che ci sia un'inversione nell'uso di WindowMode e OpenArg.

    zio Ken ha scritto:


    ...mentre, se la scrivo così, variando il comando di anteprima, mi chiede di reinserire la condizione dei filtri ma poi stampa il report filtrato..
    DoCmd.OpenReport "RptConsultaCollaudi", acViewPreview, , strFilter, , acNormal
    Come prima: verifica l'ordine dei parametri e poi vediamo se ci sono ancora problemi.
  • Re: Aprire Report con campi filtrati da maschera

    Ciao Philcattivocarattere, ti ringrazio per la risposta. Purtroppo sono ancora neofita con vba, cercavo di adattare l'indicazione del comando al vba...cosa intendi con
    Su quale riga?
    Qual è il contenuto di strFilter immediatamente di apire il report? aggiungi una riga
    strFilter = Me.[FormDettagli].Form.Filter
        Debug.Print strFilter '<===
    modificando il codice così,
    DoCmd.OpenReport "RptConsultazione", acViewPreview, , strFilter, acNormal, ""
    
    mi da esattamente ciò che segnalavo nel primo messaggio, cioè non eredita il valore del filtro. Il filtro può essere ereditato da 1 dei 6 campi per i filtri record, di cui 5 textbox ed una combobox. Quando lancio l'apertura del report, mi segnala di reinserire il valore o la condizione per filtrare i record, in pratica non da come viene filtrata in primis la maschera. (non so se poteva essere utile come info)
  • Re: Aprire Report con campi filtrati da maschera

    zio Ken ha scritto:


    ...cosa intendi con
    Su quale riga?
    Quando c'è un errore VBA va in debug ed evidenzia la riga contenente l'errore.

    zio Ken ha scritto:


    ...cosa intendi con
    Qual è il contenuto di strFilter immediatamente di apire il report? aggiungi una riga
    Ecco cosa intendo:
    If Me.[FormDettagli].Form.FilterOn = True
        Debug.Print strFilter '<===
        strFilter = Me.[FormDettagli].Form.Filter
    DoCmd.OpenReport ...
    
    Vedrai nella finestra immediata il valore di strFilter e da lì puoi capire se è una sintassi corretta valida per una Where condition in apertura del report.

    zio Ken ha scritto:


    Quando lancio l'apertura del report, mi segnala di reinserire il valore o la condizione per filtrare i record, in pratica non da come viene filtrata in primis la maschera.
    Si tratta di un report associato ad una query? Se sì pubblica la sintassi della query (visualizzazione SQL). Solo dopo però essere riuscito a fare il punto precedente.
  • Re: Aprire Report con campi filtrati da maschera

    Ciao Phil, perdona il ritardo...
    cmq scrivendo il codice così non da più errore
        DoCmd.OpenReport "RptConsultaCollaudi", acViewPreview, , strFilter, acNormal, ""
    ma mi dice di reinserire i parametri, ecco la query
    SELECT tblColl.IdColl, tblColl.DataIns, tblColl.Tar, tblColl.Tel, tblColl.MarAuto, tblColl.Mod, tblColl.Propr, tblColl.RefCon, tblDateColl.DataColl, tblDateColl.DataR, tblDateColl.DataC, tblDateColl.Avv, tblDateColl.Ag, tblDateColl.St
    FROM tblColl INNER JOIN tblDateColl ON tblColl.IdColl = tblDateColl.IdColl
    ORDER BY tblColl.DataIns DESC , tblDateColl.DataColl DESC , tblDateColl.DataR DESC , tblDateColl.DataC DESC;
    
    Segnalo che il report, nella voce dati/filtra al caricamento sta su no, mentre se metto si, il risultato non cambia..
  • Re: Aprire Report con campi filtrati da maschera

    Se leggi la guida, cosa che per un Neofita dovrebbe essere la BIBBIA., scopriresti che il Filtro si compone di NomeCampo e Valore...!
    Se passi solo il Valore, come fa a sapere su quale Campo applicarlo...? UN minimo di ragionamento critico dovrebbe esserci a prescindere...
  • Re: Aprire Report con campi filtrati da maschera

    Ciao Alex, grazie per l'interessamento ma il mio limite è passare l'esatto campo contenente il valore e filtrare il report in base a quel valore ma, avendo 6 filtri nella maschera, non riesco a discriminare tramite vba quel determinato campo...i filtri li applico sulla machera, come posso ribaltarli anche sul report tramite vba?
    Perchè avevo già provato, nella query come origine dati report, a cercare di passargli il valore ma così facendo, all'apertura della maschera,
    giustamente quest'ultima mi esce già filtrata avevo tentato tramite vba di passargli il campo e valore nel caso in cui vi fossero filtri attimi ma nada
  • Re: Aprire Report con campi filtrati da maschera

    zio Ken ha scritto:


    cmq scrivendo il codice così non da più errore
        DoCmd.OpenReport "RptConsultaCollaudi", acViewPreview, , strFilter, acNormal, ""
    Non serve a nienet quello che c'è dopo acNormal, toglilo.

    zio Ken ha scritto:


    ma mi dice di reinserire i parametri, ecco la query
    SELECT ... FROM ... ORDER BY ...;
    La query è semplice, non ha nemmeno una WHERE clause quindi torno a quanto scritto più volte: sta tutto nel contenuto di strFilter. Se prima non riusciamo a vedere cosa contiene quello non si fa strada.
  • Re: Aprire Report con campi filtrati da maschera

    Ciao Phil, il contenuto di strFilter riporta il campo dove eseguo il filtro sulla maschera, in questo caso sulla cboFiltroStato...
    strFilter = "(tblDateColl.St = cboFiltroStato) "
  • Re: Aprire Report con campi filtrati da maschera

    zio Ken ha scritto:


    Ciao Phil, il contenuto di strFilter riporta il campo dove eseguo il filtro sulla maschera, in questo caso sulla cboFiltroStato...
    strFilter = "(tblDateColl.St = cboFiltroStato) "
    Oh, finalmente!
    Se passi quella stringa (perché è una stringa) come where condition in apertura del report, come fa il report a sapere cos'è cboFiltroStato?
    strFilter dovrebbe contenere qualcosa tipo
    "(tblDateColl.St = valorediCboFiltroStato)"
    Da verificare eventualmente anche il tipo di dato contenuto in tblDateColl, se numero o testo.
  • Re: Aprire Report con campi filtrati da maschera

    Philcattivocarattere ha scritto:


    Da verificare eventualmente anche il tipo di dato contenuto in tblDateColl, se numero o testo.
    Nella tblDateColl vi sono sono 2 campi ove effettuo il filtro, il campo "stato" che è di tipo testo (la cboFiltroStato utilizzata per l'esempio) e DataColl che è di tipo data. Invece nella tblColl vi sono 4 campi dove posso effettuare il filtro: DataIns di tipo data ed i campi Tar, Propr, RefCon che sono di tipo testo.
    Nel vba della maschera ho fatto in maniera tale che tali filtri agiscono sulla sottomaschera (non contemporaneamente, non ci sono riuscito) mentre non riesco a capire, come poter passare il codice per il report in base al campo filtrato..
Devi accedere o registrarti per scrivere nel forum
10 risposte