07. februar 2005 - 22:30Der er
7 kommentarer og 1 løsning
Gemme dato i db med dansk datoformat
Jeg har en insertform hvor man kan skrive et indlæg til en database. I insertformen er der yderligere et hidden field med <%=date()%> og her er mit problem. Datoerne bliver gemt f.eks. 02-07-2005 (selvom datoen er d.2 feb. 2005) i databasen. Det er altså ikke selve udtrækket der er problemet for når indlæggene vises, bliver de vist nøjagtig som i databasen selvom jeg bruger <%Session.LCID = 1030%> øverst på siden. Har prøvet flere forskellige datoformater i access, 02-07-2005 bliver i "langt datoformat" vist som 02 juli 2005. Har prøvet at fjerne alle datoformater og LCID, men det er siderne ligeglade med og viser bare mm-dd-yyyy.
Kan man ikke på een eller anden måde fortælle mit hidden field <%=date()%> i insertformen at den skal gemme i dansk format? dd-mm-yyyy
Når man bruger danske datoer og Access kan man opleve Access bytter rundt på måned og dag. Problemet opstår fordi Access bruger US eller UK dato format via SQL, som enten er yyyy-mm-dd eller mm-dd-yyyy.
Når man så indsætter en dato i dansk dato format som er dd-mm-yyyy, vil Access bytte rundt på dag og måned i datoen.
Der er en løsning og det er at bruge dato funktionerne Year, Month og Day til at formatere din dato.
Eks:
<% dato = "02-07-2005" strDato = Year(dato) & "-" & Month(dato) & "-" & Day(dato) SQL = "SELECT * FROM tabelnavn WHERE dato = #" & strDato & "#" %>
Hej Eagleeye På hvilken side skal jeg skrive smørren ind, skal det være på siden der indsætter i tabellen, eller skal det stå på siden der udtrækker dataerne. og skal jeg stadig bruge <%Session.LCID = 1030%> Mangler der et anførelsestegn i SQL'en? får en fejl i DW når jeg indsætter WHERE udtrykket. Har prøvet lidt af hvert på de forskellige sider, men hvis jeg ikke lige får fejl, så viser den stadigvæk datoen forkert.
Det skal være på den side som indsætter datoen. Hvis du køre med dansk datoformat på siden så kan du sætte <%Session.LCID = 1030%> ind den sikre datoerne vises som danske. Hvis ens server står til engelsk dato format må man indsætte <%Session.LCID = 1030%> på de sider der har noget med behandling af datoer.
Når man skal genne en dato i Access og kolonnen er af typen date/time så skal man bruge # omkring i SQL sætnigen. Access forventer datoen kommer i formetet yyyy-mm-dd eller mm-dd-yyyy så man skal lave det format. du kan prøve sådan her når du indsætter:
Ok du bruger DV. Ja det er så MM_dbValues du skal havde fat i. Men variablen MM_dbValues indeholder nok også # før og efter datoen. Så et eller andet sted skal du finde hvor MM_dbValues bliver tilskrevet datoen og så formatere den med dato funktionerne.
Hvis jeg i access sætter mit datofelt til at skulle indeholde "tekst" i stedet for "dato og klokkeslæt". Så får jeg de rigtige udtræk. Men er det ikke en fuskerløsning???
Dette er den insert-kode som DW har genereret. Kan dog ikke finde ud af, hvor de forskellige felter bliver indsat...
' create the MM_fields and MM_columns arrays MM_fields = Split(MM_fieldsStr, "|") MM_columns = Split(MM_columnsStr, "|")
' set the form values For MM_i = LBound(MM_fields) To UBound(MM_fields) Step 2 MM_fields(MM_i+1) = CStr(Request.Form(MM_fields(MM_i))) Next
' append the query string to the redirect URL If (MM_editRedirectUrl <> "" And Request.QueryString <> "") Then If (InStr(1, MM_editRedirectUrl, "?", vbTextCompare) = 0 And Request.QueryString <> "") Then MM_editRedirectUrl = MM_editRedirectUrl & "?" & Request.QueryString Else MM_editRedirectUrl = MM_editRedirectUrl & "&" & Request.QueryString End If End If
End If %> <% ' *** Insert Record: construct a sql insert statement and execute it
Dim MM_tableValues Dim MM_dbValues
If (CStr(Request("MM_insert")) <> "") Then
' create the sql insert statement MM_tableValues = "" MM_dbValues = "" For MM_i = LBound(MM_fields) To UBound(MM_fields) Step 2 MM_formVal = MM_fields(MM_i+1) MM_typeArray = Split(MM_columns(MM_i+1),",") MM_delim = MM_typeArray(0) If (MM_delim = "none") Then MM_delim = "" MM_altVal = MM_typeArray(1) If (MM_altVal = "none") Then MM_altVal = "" MM_emptyVal = MM_typeArray(2) If (MM_emptyVal = "none") Then MM_emptyVal = "" If (MM_formVal = "") Then MM_formVal = MM_emptyVal Else If (MM_altVal <> "") Then MM_formVal = MM_altVal ElseIf (MM_delim = "'") Then ' escape quotes MM_formVal = "'" & Replace(MM_formVal,"'","''") & "'" Else MM_formVal = MM_delim + MM_formVal + MM_delim End If End If If (MM_i <> LBound(MM_fields)) Then MM_tableValues = MM_tableValues & "," MM_dbValues = MM_dbValues & "," End If MM_tableValues = MM_tableValues & MM_columns(MM_i) MM_dbValues = MM_dbValues & MM_formVal Next MM_editQuery = "insert into " & MM_editTable & " (" & MM_tableValues & ") values (" & MM_dbValues & ")"
If (Not MM_abortEdit) Then ' execute the insert Set MM_editCmd = Server.CreateObject("ADODB.Command") MM_editCmd.ActiveConnection = MM_editConnection MM_editCmd.CommandText = MM_editQuery MM_editCmd.Execute MM_editCmd.ActiveConnection.Close
If (MM_editRedirectUrl <> "") Then Response.Redirect(MM_editRedirectUrl) End If End If
Det kan da gå at bruge tekst og når man indsætter er der ikke noget problem i det. Det som giver problemer er når man har kolonnen i en WHERE eller ORDER BY så vil den ikke hente eller sortere efter datoen men efter alfabeted. Det kan så løses for Access ved at konvertere dato kolonne i SQL sætningen med CDate: sql = "select * from tabl where CDate(dato)>=#2005-02-01# ORDER BY CDate(dato)"
Det kan lade sig gøre men jeg syntes det er lidt en fusker løsning og der er nogle fordele med dato/klokkeslæt typen. Kan man ikke få DW til at formatere data for en kolonne inden de indsættes?
I DW koden gemmer den indholdet af form felterne her: For MM_i = LBound(MM_fields) To UBound(MM_fields) Step 2 MM_fields(MM_i+1) = CStr(Request.Form(MM_fields(MM_i))) Next
Det kan evt laves om så hvis det er dato kolonnen formaters den: For MM_i = LBound(MM_fields) To UBound(MM_fields) Step 2 tmp = CStr(Request.Form(MM_fields(MM_i))) if MM_fields(MM_i)="dato" then tmp = Year(tmp) & "-" & Month(tmp) & "-" & Day(tmp)" MM_fields(MM_i+1) = tmp Next
Men for dato/klokkeslæt typer skal MM_delim være "#"
Når jeg bruger din kode så bliver der ikke smidt nogen data ind i nogen af felterne. Posten oprettes men felterne er tomme.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.