Identificativo articolo: 210276 - Ultima modifica: venerdì 23 marzo 2007 - Revisione: 6.3 Archiviazione, calcolo e confronto di dati Data/ora in Microsoft Access Per la versione di questo articolo relativa a
Microsoft Access 97, vedere
130514
(http://support.microsoft.com/kb/130514/
)
. Difficoltà media: sono richieste conoscenze di base di creazione di
macro, gestione di codice e di interoperabilità.
In questa paginaSommario In questo articolo viene descritto come vengono archiviati
i dati di tipo Data/ora in Microsoft Access. In questo articolo viene inoltre
descritto perché può accadere di ottenere risultati imprevisti quando si
calcolano o si confrontano date e ore. Verranno illustrati i seguenti argomenti:
InformazioniArchiviazione di dati Data/oraIn Access il tipo di dati Data/ora viene archiviato come numero a precisione doppia e a virgola mobile fino a 15 posizioni decimali. La parte dell'intero del numero a precisione doppia rappresenta la data. La parte decimale rappresenta l'ora.I valori validi per la data vanno da -657,434 (1° gennaio 100 d.C.) a 2,958,465 (31 dicembre 9999 d.C.). Il valore di data 0 rappresenta il 30 dicembre 1899. Access memorizza le date precedenti al 30 dicembre 1899 come numeri negativi. I valori validi per l'ora vanno da .0 (00.00.00) a .99999 (23.59.59). Il valore numerico rappresenta una frazione di un giorno. È possibile convertire il valore numerico in ore, minuti e secondi moltiplicando il valore numerico per 24. Nella tabella seguente viene mostrato come Access memorizza i valori Data/ora:
Numero Porzione Data Porzione Ora
doppio di data effettiva di ora effettiva
--------------------------------------------------------------
1.0 1 31 dicembre 1899 .0 00.00.00
2.5 2 1° gennaio 1900 .5 00.00.00
27468.96875 27468 15 marzo 1975 .96875 23.15.00
36836.125 36836 6 novembre 2000 .125 03.00.00?CDbl(#5/18/1999 14:00:00#) Il risultato equivale a: 36298.5833333333 ?CDbl(#12/14/1849 17:32:00#) Il risultato equivale a: -18278.7305555556 Per visualizzare la data e l'ora dei valori numerici, digitare i seguenti comandi nella finestra Immediata, premere INVIO, quindi osservare i risultati: ?CVDate(1.375) Il risultato equivale a: 31/12/1899 09.00.00 ?CVDate(-304398.575) Il risultato equivale a: 1/8/1066 13.48.00 Formattazione di un campo Data/oraÈ possibile formattare un valore Data/ora per visualizzare una data, un'ora o entrambe. Quando si utilizza un formato solo data, viene archiviato il valore 0 per la porzione relativa all'ora. Quando si utilizza un formato solo ora, viene archiviato il valore 0 per la porzione relativa alla data.Nella tabella seguente viene mostrato in che modo i valori Data/ora vengono archiviati in Access. Viene inoltre mostrato come è possibile visualizzare tali valori utilizzando formati diversi:
Valore archiviato Formato predefinito Formato personalizzato
(numero doppio) (Data generica) (gg/mm/aaaa hh.mm.ss)
---------------------------------------------------------------------
36295.0 15/05/99 15/05/1999 00.00.00
0.546527777777778 13.07 30/12/1899 13.07.00
36232.9375 13/03/99 22.30 13/03/1999 22.30.00Calcolo di dati oraPoiché un valore orario è archiviato come frazione di un giorno di 24 ore, è possibile che si ottengano risultati di formattazione non corretti quando si calcolano intervalli di tempo maggiori di 24 ore. Per aggirare il problema, è possibile creare una funzione definita dall'utente con cui garantire che gli intervalli di tempo siano formattati correttamente.Microsoft fornisce esempi di programmazione a scopo puramente illustrativo, senza alcuna garanzia di qualsiasi tipo, sia espressa che implicita, ivi incluse, senza limitazioni, le garanzie implicite di commerciabilità o idoneità per uno scopo particolare. In questo articolo si presume che l'utente conosca il linguaggio di programmazione in questione e gli strumenti utilizzati per creare ed eseguire il debug delle routine. Gli esperti Microsoft sono autorizzati a fornire spiegazioni in merito alla funzionalità di una determinata routine, ma in nessun caso a modificare questi esempi per fornire funzionalità aggiuntive o a creare routine atte a soddisfare specifiche esigenze. Per calcolare e formattare correttamente gli intervalli di tempo, attenersi alla procedura seguente:
Confronto di dati dataPoiché le date e le ore vengono archiviate insieme come numeri a precisione doppia, è possibile ottenere risultati imprevisti quando si esegue il confronto di date e ore. Se ad esempio si digita la seguente espressione nella finestra Immediata, si ottiene un risultato errato anche se la data odierna è 31/03/1999:? Now()=DateValue("3/31/1999") La funzione Now() restituisce un numero a precisione doppia che rappresenta la data
e l'ora correnti. Tuttavia, la funzione DateValue() restituisce un numero intero che rappresenta la data ma non un
valore orario frazionario. Pertanto, Now() equivale a DateValue() solo quando Now() restituisce l'ora 00.00.00.Per ottenere risultati accurati quando si confrontano i valori di data, utilizzare una delle funzioni seguenti. Per provare ciascuna funzione, digitarla nella finestra Immediata, sostituire 3/31/1999 con la data corrente e premere INVIO:
Confronto di dati oraQuando si confrontano valori orari, è possibile che si ottengano risultati incoerenti perché un valore orario è archiviato come parte frazionaria di un numero a precisione doppia e con virgola mobile. Se ad esempio si digita la seguente espressione nella finestra Immediata, si ottiene un risultato errato (0) anche se i due valori orari sono gli stessi:var1 = #2:01:00 PM# Quando Access converte un valore orario in una frazione, il
risultato calcolato potrebbe non essere identico al valore orario. La lieve
differenza dovuta al calcolo è sufficiente a produrre un risultato errato (0)
quando si confronta un valore archiviato con una valore costante.var2 = DateAdd("n", 10, var1) ? var2 = #2:11:00 PM# Per ottenere risultati accurati quando si confrontano valori orari, utilizzare uno dei metodi seguenti. Per provare ciascun metodo, digitarlo nella finestra Immediata, quindi premere INVIO: Aggiunta di una data associata al confronto orario: var1 = #1/1/99 2:01:00 PM# Conversione dei valori orari in tipi di dati stringa prima di confrontarli:var2 = DateAdd("n", 10, var1) ? var2 = #1/1/99 2:11:00 PM# var1 = #2:01:00 PM# Uso della funzione DateDiff() per confrontare unità precise quali i secondi:var2 = DateAdd("n", 10, var1) ? CStr(var2) = CStr(#2:11:00 PM#) var1 = #2:01:00 PM# var2 = DateAdd("n", 10, var1) ? DateDiff("s", var2, #2:11:00 PM#) = 0 Riferimenti Per ulteriori
informazioni sul calcolo dei valori data e ora, fare clic sul numero
dell'articolo della Microsoft Knowledge Base riportato di seguito: 210604
(http://support.microsoft.com/kb/210604/
)
Funzioni per il calcolo e la visualizzazione di valori Data/ora in Access
Per ulteriori informazioni su come
formattare i tipi di dati Data/ora, scegliere Guida in linea Microsoft
Access dal menu ?, digitare proprietà
formattazione - tipo di dati Data/ora nell'Assistente di Office o
nella Ricerca libera e scegliere il pulsante Cerca per
visualizzare l'argomento.
Le informazioni in questo articolo si applicano a:
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO. | Traduzione articoli
|

Torna all'inizio
