Access modifica il formato delle date?

di il
6 risposte

Access modifica il formato delle date?

Salve
sto impazzendo per un problema sorto utilizzando ACCESS (nelle versioni 2003/2010 pensavo che potesse essere un bug di una versione ma si ripropone in tutte le versioni) ed una pagina ASP. Il problema è questo: In una pagina ASP creo dinamicamente una query da passare al db in formato ACCESS che mi dovrà filtrare i record in base ad uno o più campi in formato DATE. La query che passo ad access è tipo la seguente:

SELECT movimenti.*, fornitori.ragione_sociale, clienti.ragione_sociale,ecc. ecc. INNER JOIN trasportatori AS trasportatori_1 ON movimenti.trasportatore_da_deposito = trasportatori_1.id_trasportatore WHERE data_ddt_fornitura >= #01/10/2016#

Come potete vedere la data che passo ad access è il primo ottobre del 2016, e dai record che ho io non dovrebbe restituirmi nessun record, mentre me li restituisce tutti. Alchè mi son detto provo ad incollare la query direttamente in ACCESS per vedere se riesco a apire cosa sbaglio. Apro ACCESS ed incollo la SQL nella sezione QUERY e la lancio, e mi restituisce tutti i record. A questo punto avviene una cosa particolare (BUG?) appena clicco su VISUALIZZA STRUTTURA QUERY vedo che in automatico ACCESS ha cambiato la data dal 1/10/2016 (primo ottobre 2016) in 10/01/2016 ossia il primo gennaio 2016. Non riesco a capire perchè. Riepilogando io passo una SQL ad ACCESS con la data del 01/10/2016 e lui me la cerca come 10/01/2016.... dove sbaglio? devo controllare qualcosa? è già successo a qualcuno di voi? La mia versione di access è in Italiano.
Vi ringrazio in anticipo.

6 Risposte

  • Re: Access modifica il formato delle date?

    Il problema <data/stringa> e' un problema generalizzato e presente praticamente OVUNQUE si abbia a che fare con i computer e con il fatto che i programmi sono scritti da aziende che stanno dall'altra parte del mondo.


    Una stringa NON E' UNA DATA, anche se lo hai pensato fino a questo momento e PER MIRACOLO questa convizione ha funzionato fino ad oggi.

    Nazioni diverse esprimono la stessa data in formati diversi! Il 5 Ottobre 2015 potrebbe essere scritto come:
    5/10/2016
    05/10/2016
    10/05/2016
    2016/10/05
    2016/05/10
    5 ottobre 2016,
    october 5, 2016
    ...

    ed altre N-MILA varianti.

    Alloca come fare?

    1) devi DECIDERE il formato della STRINGA che rappresenta la TUA DATA
    2) devi trovare una funzione (dovrebbe essere cdate(), in alternativa la implementi) che CONVERTE la stringa NEL FORMATO CHE HAI DECISO nel corrispondente DateTime, e viceversa

    Perche' hai tutti questi pasticci?
    Ovvio, perche' Access, come quasi tutti i programmi, converte le stringe in date e viceversa basandosi su qualche configurazione.

    In generale la configurazione e' quella di Windows (le impostazioni Regionali), ma potrebbe essere che il programma abbia sue impostazioni.

    Da questo punto di vista devi andare un po' a caccia di informazioni.
  • Re: Access modifica il formato delle date?

    Prima di tutto ti ringrazio dell'interessamento nel mio problema.
    Ho provato anche la funzione cdate, ma senza risolvere il problema. Se ad esempio stampo a video la SQL che passerò ad ACCESS e la incollo nella SQL di access e quindi la eseguo, noterò che se la data è ad esempio 01/12/2016, che mi dovrebbe restituire dei record, non mi restituisce nulla, e quando torno in visualizzazione struttura della query vedo che nel campo criterio viene riportata la data del 12/01/2016. Questo cambiamento avviene all'interno di access in quanto fino al passaggio della SQL la stringa riporta la data esatta. Ho idea che sia un parametro da cambiare all'interno di ACCESS più che un comando di ASP.
    Rimango in attesa.
    Grazie
  • Re: Access modifica il formato delle date?

    Distinguiamo il motore del database jet dall'interfaccia client Access.
    Il motore del database lavoro in accezione anglosassone mmddyyyy mentre l'interfaccia di Access essendo in lingua italiana utilizza il formato italiano ggmmaaaa.
    A seconda di come passi parametri dall'interfaccia al motore del database devi tener conto della conversione di formato.
    Se nelle query inserisci il riferimento agli oggetti delle maschere jet esegue la risoluzione e conversione implicita del dato.
    Se Inserisci la data così come l'hai inserita devi applicare la conversione in formato anglosassone.

    Se vuoi qui puoi leggere come manipolare in modo corretto l'uso delle date per far interagire il codice SQL con l'origine dei dati.
  • Re: Access modifica il formato delle date?

    SELECT movimenti.*, fornitori.ragione_sociale, clienti.ragione_sociale,ecc. ecc. INNER JOIN trasportatori AS trasportatori_1 ON movimenti.trasportatore_da_deposito = trasportatori_1.id_trasportatore WHERE data_ddt_fornitura >= #01/10/2016#
    Per Access la data che stai passando corrisponde a 10/01/2016 !!!
    Access si aspetta le date in formato MM/DD/YYYY (se preferisci : mese/giorno/anno) quindi non ti resta che utilizzare la funzione format (con "mm/dd/yyyy" come stringa di formattazione)

    NB. - Questo problema si presenta quando la data può essere ambigua (ovvero fino al 12 giorno), quando invece la data è certa, Access la converte correttamente (i.e 13/01/2016 rimane 13 gennaio 2016 mentre 12/01/2016 diventa 1 dicembre 2016). Per questo motivo devi formattare la data nel formato americano.

    EDIT : Alex ti hai già risposto ....
  • Re: Access modifica il formato delle date?

    Grazie mille ad entrambi
    siete molto gentili e competente.
    Ho provato tutte le soluzioni delle pagine che mi avete proposto, ed ho implementato una funzione cosi fatta:

    Function ItDate(data)
    ItDate = Month(data)&"/"&Day(data)&"/"&Year(data)
    End Function

    poi passo la data in questo modo:

    data_ddt_fornitura >= #"& ItDate(Request("data_fornitura_da")) &"#

    e il tutto funziona benissimo. Solo che non ricordavo di aver mai avuto problemi del genere riguardanti le date.
    Grazie mille ancora
    Pietro
  • Re: Access modifica il formato delle date?

    Hai riflettuto che pur funzionando chiami 4 funzioni(la tua peraltro esterna che ne contiene 3) per fare una cosa che con tutti i suggerimenti che hai ricevuto veniva fatta con solo 1 nativa...?
    Se pensi di aver fatto una cosa buona ci penserei ancora un poco.
Devi accedere o registrarti per scrivere nel forum
6 risposte