IMPOSTAZIONE DATA

di il
21 risposte

IMPOSTAZIONE DATA

Ciao a tutti

Ho una maschera che, tramite due textbox non associate, mi permette di filtrare le "Validazioni" effettuate nel periodo impostato nelle due textbox(dadata,adata - questi i nomi dei due campi)

Fino a qui, tutto bene, o perlomeno credevo.

Il problema sorge quandp hp creato il report. L'origine dati è la suegente:

SELECT tblAnagrafiche.CUAA, tblAnagrafiche.Denominazione, tblValidazioniFascicolo.[Utente Validazione], tblValidazioniFascicolo.[Data Validazione]
FROM tblOperazioni INNER JOIN (tblAnagrafiche INNER JOIN tblValidazioniFascicolo ON tblAnagrafiche.CUAA = tblValidazioniFascicolo.CUAA) ON tblOperazioni.ID = tblAnagrafiche.OPERAZIONE_ID
WHERE (((tblValidazioniFascicolo.[Data Validazione]) Between [maschere]![frmRicValidazioni]![da_data] And [maschere]![frmRicValidazioni]![a_data]))
ORDER BY tblAnagrafiche.Denominazione, tblValidazioniFascicolo.[Data Validazione];

Nella maschera, devo cercare mettendo le date in formato anglosassone (mm,dd,yyyy) e me le trova ovviamente filtrate, quando però apro il report non tiene conto del formato anglosassone e prende tutto in lingua italiana

Faccio un esempio:
dadata: 23/03/2020 (e qui me lo converte in automatico in quanto non esiste un ventitreesimo mese )
adata: 04/03/2020 (per cercare fino al 03 aprile)

Risultato:
in maschera: 37 ed è giusto
nel report e quindi nella query: 86 (mi considera tutte le validazioni dal 04 marzo al 23 marzo ... e non mi serve)

Come posso fare per far capire al report e quindi alla query che le date che digito sono da intendersi entrambe anglossassoni.

Inoltre, ho verificato anche un'altra cosa: se metto le date pensandole in italiano, ovviamente non mi trova niente in quanto (03/04 - messo nel campo adata è inferiore al campo dadata) ma se apro subito il report, me lo ritrovo correttamente filtrato! Come può essere?

21 Risposte

  • Re: IMPOSTAZIONE DATA

    
    format(data,"MM/DD/YYYY")
    
  • Re: IMPOSTAZIONE DATA

    max.riservo ha scritto:


    
    format(data,"MM/DD/YYYY")
    
    Grazie Max, ma dove?

    Ho provato a metterlo nella query come :
    format([maschere]![frmRicValidazioni]![da_data]; "mm/dd/yyyy") 'l'ho fatto anche per l'altro campo
    ma mi da errore. espressione troppo complessa, allora ho provato a mettere il format nell'evento open del report, ma ovviamente non funziona neanche li
  • Re: IMPOSTAZIONE DATA

    La data in JET va gestita secondo queste casistiche di Sintassi:
    "forum.masterdrive.it/microsoft-office-access-vba-23/vba-jet-tutorial-uso-campi-data-56461/"
  • Re: IMPOSTAZIONE DATA

    @Alex ha scritto:


    La data in JET va gestita secondo queste casistiche di Sintassi:
    masterdrive.it/microsoft-office-access-vba-23/vba-jet-tutorial-uso-campi-data-56461/
    Ciao Alex,

    grazie per l'articolo, il secondo esempio è quello che fa per me, ma ancora non funziona.

    Cioè mi riporta l'errore: L'espressione è troppo complessa per essere valutata.

    Grazie lo stesso ad entrambi
  • Re: IMPOSTAZIONE DATA

    In realtà tutte fanno la stessa cosa... quindi TUTTE fanno per te... ma in realtà dalla 2° in avanti richiede la risoluzione esplicita dei valori quindi vorrei vedere come l'hai applicata.

    La soluzione indicata da MAX, che è la 2 appunto, tuttavia non serve se si usa la risoluzione implicita ovvero delegando Jet a risolvere il valore... quindi in quel caso si rientra nel 1° caso.

    Quindi a.seconda di come hai scritto... cambiano le considerazioni.
  • Re: IMPOSTAZIONE DATA

    @Alex ha scritto:


    In realtà tutte fanno la stessa cosa... quindi TUTTE fanno per te... ma in realtà dalla 2° in avanti richiede la risoluzione esplicita dei valori quindi vorrei vedere come l'hai applicata.

    La soluzione indicata da MAX, che è la 2 appunto, tuttavia non serve se si usa la risoluzione implicita ovvero delegando Jet a risolvere il valore... quindi in quel caso si rientra nel 1° caso.

    Quindi a.seconda di come hai scritto... cambiano le considerazioni.
    Io ho messo così e sicuramente è sbagliato
    
    SELECT tblAnagrafiche.CUAA, tblAnagrafiche.Denominazione, tblValidazioniFascicolo.[Utente Validazione], tblValidazioniFascicolo.[Data Validazione]
    FROM tblAnagrafiche INNER JOIN tblValidazioniFascicolo ON tblAnagrafiche.CUAA = tblValidazioniFascicolo.CUAA
    WHERE ([Data Validazione] >=#" & Format$([MASCHERE]![frmRicValidazioni]![da_data];"mm/dd/yyyy") & "# And [Data Validazione] <=#" & Format$([MASCHERE]![frmRicValidazioni]![a_data];"mm/dd/yyyy") & "#)
    ORDER BY tblValidazioniFascicolo.[Data Validazione];
    
    un codice simile lo applico proprio nella maschera al click del tasto cerca e mi funziona
    
    Private Sub cercaxdata_Click()
    Call search
    End Sub
    
    Sub search()
    Dim strcriteria, task As String
    
    Me.Refresh
    If IsNull(Me.da_data) Or IsNull(Me.a_data) Then
        MsgBox "Inserire l'intervallo di data", vbInformation, "Periodo di ricerca richiesto!"
        Me.da_data.SetFocus
    Else
        strcriteria = "([Data Validazione] >=#" & Format(Me.da_data, "dd/mm/yyyy") & "# And [Data Validazione] <=#" & Format(Me.a_data, "dd/mm/yyyy") & "#)"
        task = "SELECT * FROM [Q_RicValidazioni] WHERE (" & strcriteria & ") ORDER BY [Data Validazione]"
        DoCmd.ApplyFilter task
        
    End If
    End Sub
    Saluti
  • Re: IMPOSTAZIONE DATA

    La query scritta così dove la passi...?
    Se la passi a QBE non andrà mai... se la passi ad una stringa consentendo così la risoluzione dei valori recuperati dalla form è altra cosa...

    Quello.che scrivi nel.codice sotto infatti come puoi vedere risolve il valore dei riferimenti... e quindi se tu applicasse i metodi dal 2÷4 funzionerebbero tutti...

    Nella sostanza la query sopra come la usi...?
  • Re: IMPOSTAZIONE DATA

    @Alex ha scritto:


    La query scritta così dove la passi...?
    Se la passi a QBE non andrà mai... se la passi ad una stringa consentendo così la risoluzione dei valori recuperati dalla form è altra cosa...

    Quello.che scrivi nel.codice sotto infatti come puoi vedere risolve il valore dei riferimenti... e quindi se tu applicasse i metodi dal 2÷4 funzionerebbero tutti...

    Nella sostanza la query sopra come la usi...?
    Ciao Alex, perdona la mia ignoranza non sapevo cosa fosse il QBE (o, meglio, ignoravo che la visualizzazione della griglia si chiamasse QBE) e me lo sono andato a cercare

    Ho provato ad impostare il criterio sia tramite SQL sia tramite QBE (ed ecco perché non mi funzionava!)
    Cioè all'inizio ho impostato direttamente il criterio al controllo [data validazione] e poi ho provato tramite un espressione a parte (proprio prendendo spunto dal secondo predicato) sempre in QBE poi ho provato a farlo direttamente tramite SQL ma niente da fare ... quindi, non so più dove sbattere la testa

    saluti
  • Re: IMPOSTAZIONE DATA

    Siccome mi pare tu abbia confusione tra le 2 opzioni... fai un passo alla volta... prova da QBE in modalità SQL ad inserire una banale query con parametro DATA
    SELECT * FROM T1 WHERE [Data]=Forms!NomeForm!ControlloData
    
    Ti accorgerai che questa versione non richiede alcuna conversione... questo solo perché JET nel risolvere il dato recuperato dalla maschera già lo fa in modo trasparente.
    Provala metti un Button che apre la query e verifica che indati siano coerenti... cosi da capire come funziona questa strada.

    Poi guarda la query in modalità struttura da QBE...

    Poi passi a complicare le cose.
  • Re: IMPOSTAZIONE DATA

    Ho provato ma mi restituisce solo un record o nessuno:

    1 record se la textbox è associata al controllo origine
    0 records se la textbox non è associata
  • Re: IMPOSTAZIONE DATA

    Ma la prova la devi fare con una form NON ASSOCIATA e textbox non associata...poi su click del Button apri la query con Docs.openquery...
    Poi la chiudi, cambi la data, premi il Button e verifchi che il/i records che espone la query siano coerenti senza l'inversione mese/giorno...

    Attenzione che il confronto è con UGUALE quindi se il campo data
    Lo hai valorizzato.con NOW() non troverai mai nulla... in quanto now() contiene hh:mm:ss...
    Non capisco fretta che hai se non hai padronanza di quello che fai.
    La prima cosa da imparare è fare prove che abbiano senso per farti capire... poi quando hai capito le prove non servono più...
  • Re: IMPOSTAZIONE DATA

    @Alex ha scritto:


    Ma la prova la devi fare con una form NON ASSOCIATA e textbox non associata...poi su click del Button apri la query con Docs.openquery...
    Poi la chiudi, cambi la data, premi il Button e verifchi che il/i records che espone la query siano coerenti senza l'inversione mese/giorno...

    Attenzione che il confronto è con UGUALE quindi se il campo data
    Lo hai valorizzato.con NOW() non troverai mai nulla... in quanto now() contiene hh:mm:ss...
    Non capisco fretta che hai se non hai padronanza di quello che fai.
    La prima cosa da imparare è fare prove che abbiano senso per farti capire... poi quando hai capito le prove non servono più...
    I campi li valorizzo esattamente con Now ed, infatti, anche nella maschera di ricerca "quella iniziale non quella creata ad hoc" per poter cercare ad esempio le validazioni fatte oggi devo mettere: DATAINIZIO: oggi -> DATAFINE: domani e me le filtra perfettamente
    Quello che desidero è stampare ciò che vedo nella maschera.
    Il problema non è che non mi filtra i dati, ma che me li filtra in maniera sbagliata:
    Faccio un esempio:
    dadata: 23/03/2020 (e qui me lo converte in automatico in quanto non esiste un ventitreesimo mese )
    adata: 04/03/2020 (per cercare fino al 03 aprile)

    Risultato:
    in maschera: 37 records ed è giusto
    nel report e quindi nella query: 86 records (mi considera tutte le validazioni dal 04 marzo al 23 marzo ... e non mi serve)
    Non capisco fretta che hai se non hai padronanza di quello che fai.
    Ho fretta perché lo sto facendo per lavoro, ma non essendo un programmatore tante cose non le capisco.

    Saluti
  • Re: IMPOSTAZIONE DATA

    Ho trovato la soluzione!!

    Dove semplicemente cambiare la formattazione delle date NON in "dd/mm/yyyy" (come è scritto qui sotto), ma in "mm/dd/yyyy"

    Adesso, sia il report che la maschera vedono gli stessi records.

    In ogni caso, grazie Alex per le lezioni e la pazienza.
    Private Sub cercaxdata_Click()
    Call search
    End Sub
    
    Sub search()
    Dim strcriteria, task As String
    
    Me.Refresh
    If IsNull(Me.da_data) Or IsNull(Me.a_data) Then
        MsgBox "Inserire l'intervallo di data", vbInformation, "Periodo di ricerca richiesto!"
        Me.da_data.SetFocus
    Else
        strcriteria = "([Data Validazione] >=#" & Format(Me.da_data, "dd/mm/yyyy") & "# And [Data Validazione] <=#" & Format(Me.a_data, "dd/mm/yyyy") & "#)" 'qui doveva essere "mm/dd/yyyy"
        task = "SELECT * FROM [Q_RicValidazioni] WHERE (" & strcriteria & ") ORDER BY [Data Validazione]"
        DoCmd.ApplyFilter task
        
    End If
    End Sub
  • Re: IMPOSTAZIONE DATA

    Secondo me non presti molta attenzione a quello che ti viene suggerito...
    Attento che per le date hai detto una cosa errata... e te ne accorgi se CERCHI UNA DATA CORRETTA, finchè metti [Magiore o Minore] è meno evidente.

    Quando valorizzi una Data con New() come ti ho detto il numero è un DOUBLE e contiene i decimali che sono la frazione in hh:mm.ss
    Ne coonsegue che se alle 8 del mattino valorizzi New il numero vale XXXX,yyy dove [XXXX=gg/mm/yyyy], mentre yyy=hh:mm:ss

    Ora è ovvio che se lo cerchi con MAGGIORE di XXXX funziona, ma se cerchi un GIORNO Specifico ovvero se la condizione fosse WHERE [CampoData]=XXX non troveresti Nulla, perchè la Data reale non è Uguale a XXXX ma XXXX,yyy

    P.S. Questi sono tutti sbagliati
    
    strcriteria = "([Data Validazione] >=#" & Format(Me.da_data, "dd/mm/yyyy") 
    Format(Me.da_data, "mm/dd/yyyy")

    Saluti
Devi accedere o registrarti per scrivere nel forum
21 risposte