|
| Dato - US format (endnu et problem) Fra : Lars Grove Mortensen |
Dato : 18-09-02 21:10 |
|
Hej alle
Jeg har tidligere spurgt om hjælp i forbindelse med dato i
US-format (og har også fået værdsatte brugbare svar!)... Men nu
står jeg overfor en ny problemstilling, som jeg håber I vil være
behjælpelige med at løse...
Det drejer sig om indsættelse af en post i en tabel i en Access
2000 database på en IIS 5.1 via en ASP-side (selvfølgelig).
Mit problem er følgende:
Jeg skriver; dato = date - og indrykker så værdien af dato til
det felt i tabellen, der hedder Dato.
Men det sjove (og irriterende) er at når man så kigger i
databasen, har den ikke skrevet den rigtige dato, men derimod
00:00:22 (hvilket vel sikkert er et klokkeslet?)...
Hvordan får jeg den til rent faktisk at indrykke dato'en?
På forhånd mange tak for hjælpen!
MVH
Lars G Mortensen
--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Lars Grove Mortensen (18-09-2002)
| Kommentar Fra : Lars Grove Mortensen |
Dato : 18-09-02 21:18 |
|
...For lige at forebygge en evt. forvirring mht., hvorfor jeg
skriver "US-format" osv i topic...
Jeg går ud fra, at problemet opstår som følger af, at der er et
skisme mellem serveren (der konstant returnerer US-format
tid/dato) og databasen (der er dansk).
Er det mon rigtigt antaget?
MVH
Lars G. Mortensen
--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Jørn Andersen (18-09-2002)
| Kommentar Fra : Jørn Andersen |
Dato : 18-09-02 21:37 |
|
On Wed, 18 Sep 2002 20:18:26 +0000 (UTC), Lars Grove Mortensen
<lars@grove-mortensen.dk> wrote:
>Jeg går ud fra, at problemet opstår som følger af, at der er et
>skisme mellem serveren (der konstant returnerer US-format
>tid/dato) og databasen (der er dansk).
>
>Er det mon rigtigt antaget?
Det er meget muligt - og i hvert fald meget udbredt :)
Prøv at sætte:
Session.LCID = 1030
i toppen af dine ASP-sider, hvis du vil arbejde med danske standarder.
En anden tommelfingerregel:
Når man arbejder med dato/tid, så undgå at fokusere på *formatet*, men
i stedet på *værdien*.
Dvs. alle beregninger bør (så vidt muligt) foretages på uformatterede
værdier. Først når der skal udskrives eller på anden måde leveres et
output til et andet interface, kan man levere det i et passende
format.
--
Jørn Andersen,
Brønshøj
| |
Lars Grove Mortensen (18-09-2002)
| Kommentar Fra : Lars Grove Mortensen |
Dato : 18-09-02 21:55 |
|
"Jørn Andersen" <jorn@jorna.dk> wrote in message
news:olohouk1k60v25gle9h9e42sahoopku48r@4ax.com...
>
> Prøv at sætte:
> Session.LCID = 1030
> i toppen af dine ASP-sider, hvis du vil arbejde med danske standarder.
>
Det har jeg gjort - og jeg har også prøvet med SetLocale(1030), men den
viser desværre stadig dato i US-format på trods af dette... Hvorfor??
> En anden tommelfingerregel:
> Når man arbejder med dato/tid, så undgå at fokusere på *formatet*, men
> i stedet på *værdien*.
> Dvs. alle beregninger bør (så vidt muligt) foretages på uformatterede
> værdier. Først når der skal udskrives eller på anden måde leveres et
> output til et andet interface, kan man levere det i et passende
> format.
>
Det har jeg tænkt over, men nu virker det jo, så vi lader det være, som det
er... Men jeg skal nok huske det til en anden gang.
Med venlig hilsen
Lars Grove Mortensen
| |
Jørn Andersen (18-09-2002)
| Kommentar Fra : Jørn Andersen |
Dato : 18-09-02 21:29 |
|
On Wed, 18 Sep 2002 20:09:41 +0000 (UTC), Lars Grove Mortensen
<lars@grove-mortensen.dk> wrote:
>Det drejer sig om indsættelse af en post i en tabel i en Access
>2000 database på en IIS 5.1 via en ASP-side (selvfølgelig).
>
>Mit problem er følgende:
>
>Jeg skriver; dato = date - og indrykker så værdien af dato til
>det felt i tabellen, der hedder Dato.
Det kunne være interessant at se (den relevante del af) din kode + din
SQL.
>Men det sjove (og irriterende) er at når man så kigger i
>databasen, har den ikke skrevet den rigtige dato, men derimod
>00:00:22 (hvilket vel sikkert er et klokkeslet?)...
Og feltet er sat til at vise både dato og tid?
>Hvordan får jeg den til rent faktisk at indrykke dato'en?
Jeg plejer at bruge funktionen på denne side:
<URL:
http://groups.google.com/groups?hl=da&selm=1879jt0nj8ng3066tpe91bs1frm82c7u2p%404ax.com>
Good luck!
--
Jørn Andersen,
Brønshøj
| |
Lars Grove Mortensen (18-09-2002)
| Kommentar Fra : Lars Grove Mortensen |
Dato : 18-09-02 21:42 |
|
Jørn Andersen wrote in dk.edb.internet.webdesign.serverside.asp:
>
> Det kunne være interessant at se (den relevante del af) din kode + din
> SQL.
>
> Good luck!
>
> --
> Jørn Andersen,
> Brønshøj
Hej Jørn
Jeg kom selv op med en løsning på problemet... Jeg satte ' omkring værdien i
SQL-indryk-koden... Altså:
strSQL = "Insert into annoncer ("
strSQL = strSQL & "Dato, "
<ZAP>
strSQL = strSQL & "values("
strSQL = strSQL & "'" & dato & "',"
Samtidig lavede jeg om på angivelsen af "dato", så den blev til:
dato = day(Date) & "-" & month(Date) & "-" & year(Date)
Og det hjalp - nu skriver den 18-09-2002 i Dato feltet i databasen...
Men ellers mange tak for din respons!
Med venlig hilsen
Lars Grove Mortensen
--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Jørn Andersen (18-09-2002)
| Kommentar Fra : Jørn Andersen |
Dato : 18-09-02 21:59 |
|
On Wed, 18 Sep 2002 20:41:53 +0000 (UTC), Lars Grove Mortensen
<lars@grove-mortensen.dk> wrote:
>Jeg kom selv op med en løsning på problemet... Jeg satte ' omkring værdien i
<snip>
>strSQL = strSQL & "'" & dato & "',"
Det vil sige, hvis man skal være lidt pedantisk, at du indsætter en
tekststreng i et datofelt.
>Samtidig lavede jeg om på angivelsen af "dato", så den blev til:
>
>dato = day(Date) & "-" & month(Date) & "-" & year(Date)
Hermed har du gjort dig uafhængigt af dato-*formatet* mellem VB Script
og SQL, men ikke mellem SQL og database.
>Og det hjalp - nu skriver den 18-09-2002 i Dato feltet i databasen...
Så længe du er sikker på, at databasen fortolker det som dansk
datoformat, så går det vel, men jeg vil stadig betragte det som
"usikker kode".
Fordelen ved den funktion, jeg linkede til, er at den er uafhængig af
dato-*formatet*, fordi den bruger dato-*værdien* til direkte at
generere SQL's dato-funktioner.
--
Jørn Andersen,
Brønshøj
| |
Tobias Hinnerup (19-09-2002)
| Kommentar Fra : Tobias Hinnerup |
Dato : 19-09-02 06:57 |
|
"Jørn Andersen" <jorn@jorna.dk> wrote in message >
> Fordelen ved den funktion, jeg linkede til, er at den er uafhængig af
> dato-*formatet*, fordi den bruger dato-*værdien* til direkte at
> generere SQL's dato-funktioner.
Huh? DateSerial returnerer jf. VBScript dokumentionen noget i retning af "May 31, 1980" -
hvorfor dét er mere "sikret" end det andet kan jeg ikke umiddelbart gennemskue?
Så vidt jeg kan se bliver der ikke i det du linker til brugt nogen dato-funktioner fra
SQL - men det kan selvfølgelig være at jeg i anledning af morgenstunden stadig har
søvnklatter i øjnene?
/Tobias
| |
Jørn Andersen (19-09-2002)
| Kommentar Fra : Jørn Andersen |
Dato : 19-09-02 10:35 |
|
On Thu, 19 Sep 2002 07:56:34 +0200, "Tobias Hinnerup"
<hinnerup@nospamhinnerup.net> wrote:
>"Jørn Andersen" <jorn@jorna.dk> wrote in message >
>> Fordelen ved den funktion, jeg linkede til, er at den er uafhængig af
>> dato-*formatet*, fordi den bruger dato-*værdien* til direkte at
>> generere SQL's dato-funktioner.
>
>Huh? DateSerial returnerer jf. VBScript dokumentionen noget i retning af "May 31, 1980" -
>hvorfor dét er mere "sikret" end det andet kan jeg ikke umiddelbart gennemskue?
Prøv at udskrive SQL-strengen :)
Humlen er, at funktionen ikke leverer *resultatet* af DateSerial, men
DateSerial selv - som det så er op til databasen at eksekvere.
Altså ikke:
strSQL = "... May 31, 1980 14:55:00 ..."
Men:
strSQL = "... DateSerial(1980, 5, 31) + TimeSerial(14, 55, 0) ..."
Argumenterne til DateSerial/TimeSerial tages direkte fra
dato-*værdien* og er dermed format-uafhængige.
--
Jørn Andersen,
Brønshøj
| |
Tobias Hinnerup (19-09-2002)
| Kommentar Fra : Tobias Hinnerup |
Dato : 19-09-02 11:10 |
|
"Jørn Andersen" <jorn@jorna.dk> wrote in message
news:b36jouc89vu0tr4f2vqgo4cqfmqha7jblt@4ax.com...
>
> Altså ikke:
> strSQL = "... May 31, 1980 14:55:00 ..."
>
> Men:
> strSQL = "... DateSerial(1980, 5, 31) + TimeSerial(14, 55, 0) ..."
Aha - my mistake, jeg overså et citationstegn, da jeg kiggede efter en "SQL-funktion"!
Ikke helt tilfældigt dog, for DateSerial står ikke som en del af ANSI SQL men er en
proprietær MS-udvidelse, nuppet fra VB. That's the price you pay
/Tobias
| |
Jørn Andersen (19-09-2002)
| Kommentar Fra : Jørn Andersen |
Dato : 19-09-02 12:32 |
|
On Thu, 19 Sep 2002 12:09:38 +0200, "Tobias Hinnerup"
<hinnerup@nospamhinnerup.net> wrote:
>Ikke helt tilfældigt dog, for DateSerial står ikke som en del af ANSI SQL men er en
>proprietær MS-udvidelse, nuppet fra VB. That's the price you pay
Aha, det var jeg ikke klar over. Jeg har kun selv brugt den til MS
Access - virker den også i MS SQL?
--
Jørn Andersen,
Brønshøj
| |
Peter Lykkegaard (19-09-2002)
| Kommentar Fra : Peter Lykkegaard |
Dato : 19-09-02 14:28 |
|
Som svar på skriblerier nedfældet af Jørn Andersen :
> On Thu, 19 Sep 2002 12:09:38 +0200, "Tobias Hinnerup"
> <hinnerup@nospamhinnerup.net> wrote:
>
>> Ikke helt tilfældigt dog, for DateSerial står ikke som en del af
>> ANSI SQL men er en proprietær MS-udvidelse, nuppet fra VB. That's
>> the price you pay
>
> Aha, det var jeg ikke klar over. Jeg har kun selv brugt den til MS
> Access - virker den også i MS SQL?
Nope - Peter Lykkegaard
| |
Jørn Andersen (19-09-2002)
| Kommentar Fra : Jørn Andersen |
Dato : 19-09-02 17:52 |
|
On Thu, 19 Sep 2002 15:27:36 +0200, "Peter Lykkegaard"
<polonline@hot.mail.com> wrote:
>> Aha, det var jeg ikke klar over. Jeg har kun selv brugt den til MS
>> Access - virker den også i MS SQL?
>
>Nope - Peter Lykkegaard
Tak - så vil jeg huske at sætte advarsel på, næste gang jeg anbefaler
Er der en lignnede løsning til MS SQL? (Altså ikke lige præcis til
Date, men til hvilken som helst dato)
Vil nogen kommentere på om det bare er mig, der synes at det må være
den mest optimale løsning (altså til MS Access) - eller om jeg bare
har stirret mig blind og overset en fatal ulempe ved metoden?
--
Jørn Andersen,
Brønshøj
| |
Tobias Hinnerup (19-09-2002)
| Kommentar Fra : Tobias Hinnerup |
Dato : 19-09-02 19:07 |
|
"Jørn Andersen" <jorn@jorna.dk> wrote in message
news:7tvjougt6k47crvf7e9acuub10ntgfsus5@4ax.com...
> Vil nogen kommentere på om det bare er mig, der synes at det må være
> den mest optimale løsning (altså til MS Access) - eller om jeg bare
> har stirret mig blind og overset en fatal ulempe ved metoden?
Udover performace-udgiften ved at have funktionskald i begge ender, ville det give klarere
kode at benytte "military-style"/ISO 8601 internationale dato-angivelser (yyyy-mm-dd). Jeg
har ikke testet hvordan Access håndterer det, men dét datoformat burde det ikke være
muligt at misforstå.
/Tobias
| |
Jens Gyldenkærne Cla~ (19-09-2002)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 19-09-02 21:19 |
|
Jørn Andersen skrev:
> Er der en lignnede løsning til MS SQL? (Altså ikke lige præcis
> til Date, men til hvilken som helst dato)
convert(datetime, 'dd-mm-yy', 5)
convert(datetime, 'dd-mm-yyyy', 105)
....eller et andet af de små 30 forskellige datoformater convert
forstår.
--
Jens Gyldenkærne Clausen
MF (medlem af FIDUSO - www.fiduso.dk)
I ovenstående tekst benyttes nyt komma.
| |
Christian Svenstrup (19-09-2002)
| Kommentar Fra : Christian Svenstrup |
Dato : 19-09-02 07:04 |
|
"Lars Grove Mortensen" <lars@grove-mortensen.dk> skrev i en meddelelse
news:amami5$8mb$1@sunsite.dk...
> Det drejer sig om indsættelse af en post i en tabel i en Access
> 2000 database på en IIS 5.1 via en ASP-side (selvfølgelig).
>
> Hvordan får jeg den til rent faktisk at indrykke dato'en?
>
Hej Lars Grove Mortensen.
Jeg har "bøvlet" meget med datoer og Access. Jeg har ladet mig fortælle, at
Access skal bruge dato-formatet "mm-dd-yy", når man indsætter en dato. I
Access sætter man # omkring datoer. Du skal selvfølgelig sørge for, at
feltet i databasen er sat til en dato. Her er hvordan jeg indsætter den
aktuelle dato i en Access-database:
dato=month(date) & "-" & day(date) & "-" & year(date)
set RS=objConn.execute("INSERT INTO tabel VALUES (#" & dato & "#)")
Jeg håber du kan bruge det. Det virker i alt fald for mig!
Med venlig hilsen
Christian Svenstrup
| |
Peter Lykkegaard (19-09-2002)
| Kommentar Fra : Peter Lykkegaard |
Dato : 19-09-02 10:36 |
|
Som svar på skriblerier nedfældet af Lars Grove Mortensen :
>
> Jeg skriver; dato = date - og indrykker så værdien af dato til
> det felt i tabellen, der hedder Dato.
Hvis feltet i tabellen er af typen Date, så lade din SQL klare den side af
sagen
I access hedder funktionen Date() og i mssql hedden den GetDate()
Under forudsætnig at det er dags dato der skal gemmes
mvh/Peter Lykkegaard
| |
|
|