asp - asp.net - aspcode.it

COMMUNITY - Login
 Username:
 
 Password:
 
Voglio registrarmi!
Password dimenticata?
 Utenti on-line: 0
 Ospiti on-line: 6023
ASPCode.it - Store

  > > Articoli

Date: formattazione e inserimento in database

Data di pubblicazione: 05/09/2002        Voto della community: 4,36 (Votanti: 32)


Durante la realizzazione di applicazioni ASP, quando trattavo dati di tipo data (passatemi il gioco di parole), mi sono spesso "scontrato" con problemi di formattazione delle date stesse, sia a livello di visualizzazione nel browser che, soprattutto, a livello di inserimento corretto all'interno di un database. In questo articolo vedremo come "scavalcare" queste problematiche.

Visualizzazione data

Nel primo caso, il problema, Ŕ spesso dovuto al fatto che il server su cui risiede il nostro sito, ha impostazioni americane, per cui le date, se prelevate dal database e inviate al browser, vengono visualizzate nel formato americano mm/gg/aaaa.
In questa situazione, se si desidera invece una formattazione "italiana", basta aggiungere all'inizio di ogni pagina ASP, la seguente riga di codice:

<%
Session.LCID = 1040
%>

o, ancora meglio, inserire tale riga nella Sub Session_OnStart del global.asa.
Per esperienza, per˛, ho riscontrato che alcuni server non permettono di definire la proprietÓ LCID dell'oggetto Session, per cui, in questo caso, Ŕ necessario realizzare una funzione di formattazione ad hod. Vediamola:

<%
'restituisce la data nel formato italiano standard gg/mm/aaaa
Function ItDate(data)
  ItDate = Day(data)&"/"&Month(data)&"/"&Year(data)
End Function
%>

Questa funzione accetta come paramentro una data in qualsiasi formato, e restituisce la stessa data in formato italiano standard.
Ed ecco un esempio del suo utilizzo:

<%
Dim data
data = "2002/08/20"

Dim itData
itData = ItDate(data)

Response.Write("Data iniziale: "&data")

Response.Write("...la stessa data in formato italiano standard: "&itData")
%>

Inserimento data in un database

Veniamo ora al problema dell'inserimento date all'interno di un database che, a quanto sembra dai numerosi post sul forum, sembra tediare un gran numero di programmatori, me compreso. ;-)
Come database di riferimento, consideriamo MS Access. Supponiamo di avere una sql del tipo:

<%
Dim cn
'apriamo la connessione al database
'Set cn = ....

Dim data
data = Date()

Dim sql
sql = "INSERT INTO iscrizioni(ISCRIZIONE) VALUES(#"&data&"#)"
cn.Execute(sql)

cn.Close()
Set cn = Nothing
%>

In questo frammento di codice, inseriamo la data odierna nel campo ISCRIZIONE della tabella "iscrizioni".
Dopo l'inserimento, se andiamo a controllare cosa effettivamente contiene il database, con molta probabilitÓ, vedremo una data in cui il giorno Ŕ stato invertito con il mese (se il giorno Ŕ maggiore di 12 la data potrebbe invece essere inserita correttamente).
Per ovviare a questo problema, ed essere sicuri che la data venga sempre inserita nel database nel formato definito durante la creazione del campo della tabella, Ŕ sufficiente effettuare gli inserimenti dopo aver convertito la data nel formato aaaa/mm/gg o aaaa-mm-gg.
Ecco la "funzioncina" di conversione, e un suo possibile utilizzo, considerando l'esempio appena visto:

<%
'restituisce la data nel formato aaaa/mm/gg per l'inserimento in database
Function FormatDateForDB(data)
  FormatDateForDB = Year(data)&"/"&Month(data)&"/"&Day(data)
End Function
%>

<%
Dim cn
'apriamo la connessione al database
'Set cn = ....

Dim data
data = Date()
data = FormatDateForDB(data)

Dim sql
sql = "INSERT INTO iscrizioni(ISCRIZIONE) VALUES(#"&data&"#)"
cn.Execute(sql)

cn.Close()
Set cn = Nothing
%>

Dato che gli inserimenti di date in database, spesso coinvolgono la data relativa al momento stesso dell'inserimento, potrebbe essere comodo generalizzare la funzione appena vista in modo tale che, se il parametro data dovesse essere vuoto, la data restituita sia quella odierna.

Una nota merita anche l'inserimento di date nel caso si utilizzi MS SQL Server come database. Questo RDBMS accetta le date solo nei formati: aaaammgg oppure aaaa-mm-gg.




Utenti connessi: 6023