[Risolto] Filtro data su maschera

di il
9 risposte

[Risolto] Filtro data su maschera

Buonasera a tutti, sto cercando da un bel po di risolvere questo problema ma nulla...
Per filtrare i dati in una maschera, ho creato una query ed inserito i vari campi per la visualizzazione. Impostato la query come origine dati.
Ho creato una sub che, vendendo richiamata dopo l'aggiornamento del campo "txtFiltroDocA" dovrebbe filtrare i dati visualizzati ma, continua a segnalarmi "Immettere valore parametro".
Sub SearchCriteria()
Dim strWH, task As String
Dim strOrderQry As String

If Len(Me!txtFiltroDocDa.Value & vbNullString) > 0 And Len(Me!txtFiltroDocA.Value & vbNullString) > 0 Then
    strWH = strWH & "(DataBoll)>= txtFiltroDocDa And (DataBoll)<= txtFiltroDocA " & " And "
End If
'.... ' aggiungi le altre 1000 condizioni...
If Len(strWH) > 0 Then strWH = Mid$(strWH, 1, Len(strWH) - 5)

    strOrderQry = "ORDER BY qry_Scad.DataBoll"
    task = "SELECT qry [tutti i campi della query] where " & strWH & strOrderQry
    Me.RecordSource = task
strWH prevede il valore filtrato. Tale valore si lega alla query di origine dichiarata nella variabile task.
strOrderQry prevede l'ordinamento per la visualizzazione.
Il campo DataBoll in origine è un campo data (DataBollo), poi ho utilizzato la funzione Format per dargli i parametri gg/mm/aaaa.
E' un ora che non ne riesco a venire a capo
Questo tipo di impostazione filtro l'ho sbirciata in questo forum stesso. Non ho utilizzato la funzione FilterOn poichè in futuro dovrò implementare altri parametri di filtraggio dati
Ma dov'è che sbaglio?

9 Risposte

  • Re: [Risolto] Filtro data su maschera

    Ti auguro che un utente più esperto di me comprenda quello che hai scritto. Ma almeno per me, se non racconti indicando i nomi propri di maschera, query, tutti i campi che hai, cosa vuoi ottenere, non si riesce a venire a capo di nulla.
    Se questo che hai scritto si riferisce a un post precedente, indica il link corrispondente.
  • Re: [Risolto] Filtro data su maschera

    Per impostare la data, nel filtro, devi applicare il formato anglosassone (con mese, giorno e anno):
    
    "[NomeCampoData]=#" & Format$(Me!txtControlloData.Value, "mm/dd/yyyy") & "#"
    
  • Re: [Risolto] Filtro data su maschera

    willy55 ha scritto:


    Per impostare la data, nel filtro, devi applicare il formato anglosassone (con mese, giorno e anno):
    
    "[NomeCampoData]=#" & Format$(Me!txtControlloData.Value, "mm/dd/yyyy") & "#"
    
    Vi ringrazio nuovamente per l'interessamento.
    Ciao Willy, relativamente al suggerimento, io utilizzavo il format come paramentro nella query utilizzata come origine della maschera, non è sufficiente?
    Poichè mi segnalava sempre errore, ho impostato il filtro così o non ci siamo?
        If Len(Me!txtFiltroDocDa.Value & vbNullString) > 0 And Len(Me!txtFiltroDocA.Value & vbNullString) > 0 Then
        
        varDataDa = Format(Me!txtFiltroDocDa.Value, "dd/mm/yyyy")
        varDataA = Format(Me!txtFiltroDocDa.Value, "dd/mm/yyyy")
        
        strWH = strWH & " [DataBollo]>= varDataDa And [DataBollo]<= varDataA " & " And "
        
        End If
    Nel codice incollato vi è la data dd/mm/yyyy come prova perchè anche se provo ad impostare come mi hai suggerito (data anglosassone) mi ripropone l'inserimento parametro.
    Ho fatto il debug e mi richiede di inserire i valori quando cerco di passare la quey come origine dati con il filtro...in cosa continuo ad errare?
    Debug.Print varDataDa
    Debug.Print varDataA
    
    '.... ' aggiungi le altre 1000 condizioni...
    If Len(strWH) > 0 Then strWH = Mid$(strWH, 1, Len(strWH) - 5)
    
        strOrderQry = "ORDER BY Format([DataBoll],'dd/mm/yyyy')"
        task = "serie di campi..., Format([DataBoll],'dd/mm/yyyy') AS DataBollo, where " & strWH & strOrderQry
        Me.RecordSource = task
  • Re: [Risolto] Filtro data su maschera

    Quando effettui, con del codice SQL, questa operazione:
     
    task = "serie di campi..., Format([DataBoll],'dd/mm/yyyy') AS DataBollo, where " & strWH & strOrderQry
    

    stai trasformando il campo [DataBoll] in un valore Variant (String) in quanto la funzione Format effettua tale conversione,
    https://www.techonthenet.com/access/functions/date/format.php
    https://support.office.com/it-it/article/funzione-format-6f29d87b-8761-408d-81d3-63b9cd842530

    quindi l'ordinamento deve essere dello stesso tipo:
     
    ORDER BY Format([DataBoll],'dd/mm/yyyy');
    
    così come la condizione WHERE del filtro.
    Da considerare che, in tal caso, avrai, i dati che saranno ordinati, proprio perché risultanti di tipo stringa, prioritariamente, in base allo specifico giorno, poi mese, poi anno e non sulla data.
    Viceversa, più semplicemente, lasci il campo di tipo data (nella SELECT e nella ORDER) e la condizione filtro (su cui agisce la WHERE) la applichi nella modalità anglosassone e avrai i dati ordinati sulla data.
  • Re: [Risolto] Filtro data su maschera

    Willy sei gentilissimo ma ora mi segnala tipo non corrispondente...
    Ho riformulato la cosa, lasciando quindi la data non formattandola ed utilizzando il controllo suggerito da te...
    Sub SearchCriteria()
    Dim strWH, task As String
    Dim strOrderQry As String
    
        If Len(Me!txtFiltroDocDa.Value & vbNullString) > 0 And Len(Me!txtFiltroDocA.Value & vbNullString) > 0 Then
     ===>       strWH = strWH & " [ProssimoBollino]=#" & Format$(Me!txtFiltroDocDa.Value, "mm/dd/yyyy") & "#" And "[ProssimoBollino]=#" & Format$(Me!txtFiltroDocA.Value, "mm/dd/yyyy") & "#" & " And "
        End If
        
        If Len(strWH) > 0 Then strWH = Mid$(strWH, 1, Len(strWH) - 5)
    
        strOrderQry = "ORDER BY qry_ScadBollBlu.ProssimoBollino"
        task = "SELECT qry_ScadBollBlu.*, qry_ScadBollBlu.ProssimoBollino FROM qry_ScadBollBlu where " & strWH & strOrderQry
        Me.RecordSource = task
        End Sub
    Utilizzando il BreakPoint mi da l'errore sulla stringa evidenziata con la freccia, premetto che è tutta su un unica riga, qui viene formattata andando accapo...a volte mi rendo conto che quando mi inalbero, non riesco più a proseguire
    Come potrei intervenire? Vi è qualcosa che lascio al caso senza pensarci?
  • Re: [Risolto] Filtro data su maschera

    Se le textbox sono associate ad un campo... puoi valutare di usare BuildCriteria passando il FieldName, che è rappresentato dal ControlSource, ed il FieldType che recuperi da:
    
    Me.Recordsetclone.fields(Me.NomeControllo.ControlSource).Type
    Pochi lo usano, è non capisco perché... dal momento che formatta tutto la funzione insensibile a InternationalSettings ecc...
  • Re: [Risolto] Filtro data su maschera

    zio Ken ha scritto:


    Utilizzando il BreakPoint mi da l'errore sulla stringa evidenziata con la freccia, ...
    In un riga di istruzioni hai effettuato errori di sintassi e di logica.
    Di sintassi, in quanto non hai concatenato correttamente la parte variabile e quella legata alla sintassi SQL.
    Nel particolare (suddividendo l'istruzione, in due, per facilitare la lettura) il "# And " al termine della prima riga:
    
     strWH = strWH & "[ProssimoBollino]=#" & Format$(Me!txtFiltroDocDa.Value, "mm/dd/yyyy") & "#" & " And " _
                   & "[ProssimoBollino]=#" & Format$(Me!txtFiltroDocA.Value,  "mm/dd/yyyy") & "#" & " And "
    
    Ti consiglio, quando devi costruire una concatenazione di stringa, di procedere per gradi e controllare le varie porzioni.

    Dal punto di vista logico (in base alla denominazione dei controlli: txtFiltroDocDa e txtFiltroDocA) quando si deve controllare un intervallo temporale (Da - A) è necessario impostare nei criteri l'operatore appropriato (come maggiore e minore) delle date su cui si basa la selezione: per cui magari dovrebbe essere:
    
     strWH = strWH & "[ProssimoBollino]>=#" & Format$(Me!txtFiltroDocDa.Value, "mm/dd/yyyy") & "#" & " And " _
                   & "[ProssimoBollino]<=#" & Format$(Me!txtFiltroDocA.Value,  "mm/dd/yyyy") & "#" & " And "
    
  • Re: [Risolto] Filtro data su maschera

    Grazie mille ad entrambi, per ora ho proceduto con il metodo suggeritomi da Willy.
    P.s. dal punto di vista logico avevo selezionato le date così in modo da fare delle verifiche mirate perchè mi richiedeva sempre di reinserire il parametro... però grazie mille dell'appunto, perchè nel caso in cui mi fosse scappata la cosa avrei fatto un macello

    Alex grazie mille del consiglio, ho dato un occhiata sul sito della microsoft ed effettivamente pare che è semplice da costruire...dico pare perchè per i novelli diventa tutta una scalata
  • Re: [Risolto] Filtro data su maschera

    zio Ken ha scritto:


    Grazie mille ad entrambi, per ora ho proceduto con il metodo suggeritomi da Willy.
    P.s. dal punto di vista logico avevo selezionato le date così in modo da fare delle verifiche mirate perchè mi richiedeva sempre di reinserire il parametro... però grazie mille dell'appunto, perchè nel caso in cui mi fosse scappata la cosa avrei fatto un macello

    Alex grazie mille del consiglio, ho dato un occhiata sul sito della microsoft ed effettivamente pare che è semplice da costruire...dico pare perchè per i novelli diventa tutta una scalata
    Solo così si impara... altrimenti si rimane sempre "novelli".
Devi accedere o registrarti per scrivere nel forum
9 risposte