Avatar billede alsvik Nybegynder
06. april 2008 - 23:33 Der er 22 kommentarer og
1 løsning

Time fra ASP til mySql

Jeg har følgende ASP-side (med tak til soerenlyn og w13):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<%

Dim my_conn, rs, strSQL

Set my_conn = createobject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")


my_conn.open = "DRIVER={MySQL ODBC 3.51 Driver};"_
& "SERVER=localhost;"_
& "DATABASE=alsvik_dk;"_
& "UID=bruger; PWD=password; OPTION=35;"

strSQL = "SELECT * FROM blog ORDER BY [time] DESC"


my_conn.Execute("INSERT INTO blog (id, name, email, comments, time) values('(id)','"& Request.Form("name") & "', '"& Request.Form("email") &"', '"& Request.Form ("comments") &"', '(time)')")





%>

<form name="write" method="post" action="">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="11%">name:</td>
    <td width="89%"><input name="name" type="text" id="name" size="100"></td>
  </tr>
  <tr>
    <td valign="top">comments:</td>
    <td><textarea name="comments" cols="100" rows="20" id="comments"></textarea></td>
  </tr>
  <tr>
    <td valign="top">email:</td>
    <td><input name="email" type="text" id="email" value="" size="100"></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>
     
        <div align="center">
          <input type="submit" name="submit" value="Send">
      </div></td>
  </tr>
</table>
</form>

Og det virker fint - pånær TIME.
Der er ikke angivet nogen tid ud for denne "entry" i databasen. Den står til:

0000-00-00 00:00:00

Hvordan kalder jeg aktuel tid og definerer format yyyy-mm-dd hh:mm:ss
Avatar billede thesurfer Nybegynder
06. april 2008 - 23:54 #1
Der skulle nok have stået:

&"', '" & time & "')")

eller

&"', #" & time & "#)")

Tegnet "#" bruges normalt til dato-tid felter..
Avatar billede thesurfer Nybegynder
07. april 2008 - 00:01 #2
Nu kan jeg ikke huske, om man har samme dato-problem i MySQL, som man har med Access, når det kommer til hvilket sprog der bruges på serveren..

Eksempel med datoen 3. januar 2008:
dansk server bruger: 03-01-2008
engelsk server bruger: 01-03-2008

Læg mærke til at den engelske server bytter om på dag og måned.

Hvis man har dette problem, løser man det med en slags Unixtime konversion.

Unixtime-tid er baseret på antallet af sekunder der er gået, siden 1. januar 1970 kl 00:00.

Da det "at lægge sammen" (f.eks. 2+2 = 4) altid giver det rigtige resultat, kan man bruge denne metode for at gemme/aflæse korrekt dato.

Hvis resultatet ikke er vigtigt nok, til at man vil kigge på sekunder, kan man naturligvis tæller timer, dage, måneder, år, osv..

Eksempel med antallet af år siden 1. januar 1970 kl 00:00:
dansk server: 38
engelsk server: 38

Antallet af måndeder (afhængigt om man tæller nuværende måned med eller ej):
dansk server: 459
engelsk server: 459

osv..
Avatar billede alsvik Nybegynder
07. april 2008 - 09:40 #3
Time-feltet står stadig tomt i rækken! Jeg har prøvet med begge muligheder som du angiver... øv! Nogle andre forslag?
Avatar billede w13 Novice
07. april 2008 - 09:45 #4
Hvad hvis du et sted prøver at udskrive din SQL med:

Response.Write "INSERT INTO blog (id, name, email, comments, time) values('(id)','"& Request.Form("name") & "', '"& Request.Form("email") &"', '"& Request.Form ("comments") &"', '"&time&"')"
Avatar billede alsvik Nybegynder
07. april 2008 - 09:57 #5
Så udskriver den:

INSERT INTO blog (id, name, email, comments, time) values('(id)','', '', '', '9:56:35 AM')
Avatar billede w13 Novice
07. april 2008 - 10:00 #6
Har du angivet dansk dato- og tidsformat øverst i din kode med:

Session.LCID = 1030

?
Avatar billede alsvik Nybegynder
07. april 2008 - 10:01 #7
I mit flash/php setup som virker finder jeg følgende streng:

$submitted_on = date ("Y-m-d H:i:s",time());
$sql = 'INSERT INTO ' . $table .
' (`ID`,
`name`,
`email`,
`comments`,
`time`
)

??
Avatar billede alsvik Nybegynder
07. april 2008 - 10:05 #8
uanset hvor jeg indsætter Session.LCID = 1030 så melder siden om fejl i den linje...?
Avatar billede w13 Novice
07. april 2008 - 10:07 #9
Hvilken fejl siger den så?
Avatar billede alsvik Nybegynder
07. april 2008 - 10:09 #10
Fandt lige en kode som viser default LCID: 1036
Avatar billede alsvik Nybegynder
07. april 2008 - 10:10 #11
Error Type:
Session object, ASP 0219 (0x80004005)
The specified LCID is not available.
/n95.asp, line 21
Avatar billede alsvik Nybegynder
07. april 2008 - 10:12 #12
Så kom jeg lidt tættere på:
LCID is now: 1036
Date format is: 07/04/2008
Time format is: 10:11:20
Currency format is: 350,00 €

INSERT INTO blog (id, name, email, comments, time) values('(id)','', '', '', '07/04/2008 10:11:20')

Skal jo egentlig blot have byttet om på rækkefølgen i dato-strengen...
Avatar billede w13 Novice
07. april 2008 - 10:14 #13
Kan du ikke bare sætte TimeValue(datoen her)
Avatar billede alsvik Nybegynder
07. april 2008 - 10:23 #14
TimeValue(time)

Hvordan gør jeg det, uden at skulle angive det hver gang jeg skriver til databasen?
Og så skal jeg vel også have Datevalue(date) med?
Avatar billede w13 Novice
07. april 2008 - 10:25 #15
Vil du have det til at stå sådan: "10:11:20 07/04/2008"?

Så kan du gøre sådan her:

TimeValue(now)&" "&DateValue(now)
Avatar billede w13 Novice
07. april 2008 - 10:27 #16
Og du kunne også lave det til en funktion, så du ikke skal skrive det hver gang:

Function TimeDate(d)
  TimeDate=TimeValue(d)&" "&DateValue(d)
End Function

Og så kalde:

TimeDate(now)
Avatar billede alsvik Nybegynder
07. april 2008 - 10:30 #17
Jeg tror du misforstod det med rækkefølgen.
Datoformatet er forkert. Jeg skal bruge "2008-04-07 10:30:21"
Så år, måned og dag er i forkert rækkefølge...
Avatar billede alsvik Nybegynder
07. april 2008 - 10:54 #18
kan jeg bruge sådan noget her:


Function FormatMediumDate(DateValue)
    Dim strYYYY
    Dim strMM
    Dim strDD

        strYYYY = CStr(DatePart("yyyy", DateValue))

        strMM = CStr(DatePart("m", DateValue))
        If Len(strMM) = 1 Then strMM = "0" & strMM

        strDD = CStr(DatePart("d", DateValue))
        If Len(strDD) = 1 Then strDD = "0" & strDD

        FormatMediumDate = strYYYY & "-" & strMM & "-" & strDD

End Function

Så er spørgsmålet bare hvilken værdi jeg skal kalde i min INSERT INTO?
Avatar billede w13 Novice
07. april 2008 - 11:25 #19
Det skulle du kunne ja, bare kald den med FormatMediumDate(date)
Avatar billede alsvik Nybegynder
07. april 2008 - 11:44 #20
Ny skriver den rigtigt nok datoen ind i databasen, men uden time:
2008-04-07 00:00:00

Jeg bruger følgende:

my_conn.Execute("INSERT INTO blog (id, name, email, comments, time) values('(id)','"& Request.Form("name") & "', '"& Request.Form("email") &"', '"& Request.Form ("comments") &"', '"&FormatMediumDate(date+time)&"')")
Avatar billede w13 Novice
07. april 2008 - 11:46 #21
Gør sådan her i stedet:

FormatMediumDate(date)&" "&time
Avatar billede alsvik Nybegynder
07. april 2008 - 11:52 #22
YES :oD

Så virker det sgu

w13, stik mig lige et svar...
Avatar billede w13 Novice
07. april 2008 - 11:53 #23
:)
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