Avatar billede nanna31 Praktikant
13. februar 2006 - 14:29 Der er 16 kommentarer og
1 løsning

Mystik omkring datoer

Nogle af de datoer, som jeg har i min accessdatabase ændrer sig, når jeg skriver dem ud i mit ASP-dokument...

Min accessdatabase ser sådan ud:

Id    Fornavn    Efternavn    Telefon    Foedselsdato
1    Anders    And    33221100    20-01-1954
2    Fætter    Højben    44332211    14-11-1952
3    Joakim    von And    55443322    03-06-1935
5    Mickey    Mouse    77665544    14-03-1956
6    Andersine    And    88776655    28-04-1959
43    Fætter    Guf    99887766    20-04-1964
93    eks0    ffff    66666666    01-02-2000
99    eks1    fff    66666666    01-02-1900
103    eks2    fff    66666666    01-02-1800
110    eks3    fff    66666666    01-02-1700
111    eks4    fff    66666666    01-02-1600
112    eks5    fff    66666666    01-02-1500

Mit resultat ser sådan ud:

Fornavn Efternavn Telefon Fødselsdato
Anders And 33221100 20-01-1954
Fætter Højben 44332211 14-11-1952
Joakim von And 55443322 03-06-1935
Mickey Mouse 77665544 14-03-1956
Andersine And 88776655 28-04-1959
Fætter Guf 99887766 20-04-1964
eks0 ffff 66666666 01-02-2000
eks1 fff 66666666 01-02-1900
eks2 fff 66666666 01-02-1800
eks3 fff 66666666 19-01-1700
eks4 fff 66666666 25-12-1599
eks5 fff 66666666 01-12-1499

Mit ASP-dokument ser sådan ud:


<% @ Language="VBScript" LCID=1030     %>
<% Option Explicit         %>
<% response.buffer=true     %>

<% Response.CacheControl = "no-cache"         %>
<% Response.AddHeader "Pragma", "no-cache"     %>
<% Response.Expires = -1             %>

<%
Dim CONN, DSN, SQL, RS
Set CONN = Server.CreateObject("ADODB.CONNection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("database.mdb")
CONN.Open DSN

SQL = "Select * from personer"
Set RS = CONN.Execute(SQL)
%>

<html>
<title>Vis database</title>
<head><link REL="stylesheet" TYPE="text/css" href="generel.css"></head>
<body>

    <table tr class="list" cellspacing="0" cellpadding="0">                 

                  <% 
                response.write"<tr class='listhead'>"           &_
                "<td>" & "Fornavn"           & "</td>"           &_
                "<td>" & "Efternavn"       & "</td>"           &_
                "<td>" & "Telefon"           & "</td>"           &_
                "<td>" & "Fødselsdato"       & "</td>"           &_
                "</tr>"   

                do while not RS.eof
                    response.write "<tr>"
                    response.write "<td>" & RS("Fornavn")       & "</td>"
                    response.write "<td>" & RS("Efternavn")      & "</td>"
                    response.write "<td>" & RS("Telefon")       & "</td>"
                    response.write "<td>" & RS("Foedselsdato") & "</td>"
                    response.write"</tr>"
                      RS.MoveNext
                loop
                %>             
       
    </table>

  <%
  CONN.Close
  Set CONN = Nothing
  %>

</body>
</html>
Avatar billede nanna31 Praktikant
13. februar 2006 - 14:31 #1
Dette er lige til at kopiere og afprøve for hvem der ønsker en følelse af, at der er mere mellem himmel og jord :)
Avatar billede fennec Nybegynder
13. februar 2006 - 15:49 #2
Prøv med:
response.write "<td>" & cDate(RS("Foedselsdato")) & "</td>"
Avatar billede nanna31 Praktikant
14. februar 2006 - 14:06 #3
ingen effekt
Avatar billede fennec Nybegynder
14. februar 2006 - 14:15 #4
Er datatypen "dato & klokkeslet" i Access??
Avatar billede roenving Novice
14. februar 2006 - 14:20 #5
-- og det lader til at Access og VBScript er uenige om, at den Gregorianske kalender blev indført en gang i 1700-tallet !-)
Avatar billede nanna31 Praktikant
14. februar 2006 - 14:49 #6
datotype er date/time - med datoformat shortdate
Avatar billede fennec Nybegynder
14. februar 2006 - 14:57 #7
Ja, så tror jeg også det har noget med den gregorianske kalender at gøre.
Prøv at konvertere datoen til tekst når du trækker den ud, også udskrive den istedet:

"select *, cStr(Foedselsdato) as fDate from personer"

response.write "<td>" & RS("fDate ") & "</td>"
Avatar billede nanna31 Praktikant
14. februar 2006 - 16:34 #8
Error Type:
ADODB.Recordset (0x800A0CC1)
Item cannot be found in the collection corresponding to the requested name or ordinal.
/lesson/showall.asp, line 40



line 40:  response.write "<td>" & RS("fDate ")       & "</td>"
Avatar billede fennec Nybegynder
14. februar 2006 - 16:40 #9
response.write "<td>" & RS("fDate ")      & "</td>"

Fjern mellemrummet:
response.write "<td>" & RS("fDate")      & "</td>"
Avatar billede nanna31 Praktikant
14. februar 2006 - 17:34 #10
Det ser ud til at virke, nu ryger formateringen godt nok en smule.
Hvad sker der i denne sætning? : "select *, cStr(Foedselsdato) as fDate from personer"
Avatar billede fennec Nybegynder
15. februar 2006 - 08:25 #11
I stedet for at overføre datoen som datotype, konvertere vi datoen til tekst med cStr() funktionen. Nu ved ASP ikke at det er en dato, og derfor bliver datoen ikke behandlet som datotype (f.eks formateret efter LCID koden)

Du kan nu lave din egen formaterings metode vad at klip og klistre i teksten med left(), right() og mid().
Avatar billede nanna31 Praktikant
15. februar 2006 - 10:03 #12
Hvis ASP ikke ved, det er en dato, hvor kommer så "/" fra mellem tallene? - hvorfor bibeholdes "-" ikke som det står i databasen?

Når datoer er så problemfyldte som vi ser her, er det så ikke nemmere bare at gemme dem som strenge in the first place og glemme alt om dato-objektet?
Avatar billede fennec Nybegynder
15. februar 2006 - 10:28 #13
"/" kommer fra Access. Når du fortæller Access at den skal lave datoen om til en tekst, har den en rutine til det, og det er her det er bestemt hvordan resultatet skal se ud.

Access gemmer næppe datoer i dd-mm-yyyy formattet nå vi kikker helt nede i filen. De er nærmere gemt som et tal af en slags. F.eks sek fra 1970 (timestamp) eller som yyyymmddhhmmss. Det er denne værdi, som den konvertere til en tekst.

Og det er ikke smartere at gemme som tekst i stedet for dato. Så har du nemlig ikke mulighed for at lave sortering eller where betingelser på datoen. f.eks er "20-01-1700" større end "01-01-3000" når du laver tekst sammenligning, men det er den ikke ved dato.

En anden løsning kunne være at gemme datoerne både som dato og tekst, så når du trækker data ud bruger du teksten og når du sortere osv. bruger du datoen.
Avatar billede nanna31 Praktikant
15. februar 2006 - 11:11 #14
interessante ideer! Men kunne man ikke også bare gemme som tre separate talværdier - dd mm yyyy?
Avatar billede fennec Nybegynder
15. februar 2006 - 11:35 #15
Så ville jeg hellere bare gemme dem i EN værdi hvor det er yyyymmdd. På den måde bibeholder man nemlig sorterings muligheden. For at bruge eks fra tidligere:
17000120 er mindre end 30000101, hvilket jo er rigtigt set datomæssig :o)

Men igen kræver det så en konverteringsrutine i ASP (hvilket ikke er noget problem at lave), når datoerne skal vises/indsættes.
Avatar billede roenving Novice
15. februar 2006 - 12:42 #16
Såvidt jeg husker bruger (brugte ?-) Access en dato-værdi af samme type som VBA, nemlig et heltal for antal dage siden en bestemt dato i 1904/1900, og med andelen af dagen som decimalbrøk ...
Avatar billede nanna31 Praktikant
15. februar 2006 - 18:26 #17
Ok, tak for assistancen under alle omstændigheder.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester