[ASP/ACCESS] Datum conversie problemen bij insert/update

Pagina: 1
Acties:
  • 372 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • NiMu83
  • Registratie: Januari 2001
  • Laatst online: 18-08 21:46
Wanneer ik middels een asp pagina een datum wil invoeren in de access database is de SQL query als volgt:
ASP:
1
2
3
strDatum = now()

sSQL = "INSERT INTO tblCommentaarNieuws(intNieuwsID, strNaam, strCommentaar, strDatum,intIPadres) VALUES(" & intNieuwsID & ", '" & strNaam & "', '" & strCommentaarTekst & "', '"& strDatum & "','" & intIpAdres & "')"

Wanneer de datum nu 29-4-2007 is gaat het goed. Maar wanneer de maand en datum ook omgedraait geldig is gaat het mis. Namelijk wordt 2-5-2007 in de database gezet als 5-2-2007.

De functie now() geeft wel 2-5-2007 en ook in de SQL query is de datum nog correct. Pas wanneer ik de datum ophaal uit de DB of gewoon zelf in de DB kijk is de datum daar omgedraait en dus 5-2-2007.

Ik gebruik Session.LCID = 1043.

Ik heb al verschillende topics gezien maar nog steeds geen passende oplossing.

Wat wel het geval is, dat op mijn eigen server de datum wel goed in de DB wordt gezet. Engels IIS en XP en Nederlandse Access en Regionale Settings op Dutch. Enkel op de server van de hosting gaat het dus mis.

Hoop dat iemand een passende oplossing heeft.

Voetbal is de belangrijkste bijzaak in het leven.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Gebruik gewoon de ISO notatie YYYYMMDD of YYYYMMDD HH:NN:SS, werkt altijd en overal.

Oude post van me :X

offtopic:
En pas op voor SQL injection blabla

[ Voor 70% gewijzigd door RobIII op 02-05-2007 17:24 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • NiMu83
  • Registratie: Januari 2001
  • Laatst online: 18-08 21:46
Maar in de database staan alweer duizenden records met een ingevuld datum veld erbij. Hoe moet ik dat dan oplossen?

En wat bedoel je met SQL Injection?

Voetbal is de belangrijkste bijzaak in het leven.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Brainpower schreef op woensdag 02 mei 2007 @ 17:20:
Maar in de database staan alweer duizenden records met een ingevuld datum veld erbij. Hoe moet ik dat dan oplossen?
Dat boeit niet. De weergave van Access/ASP is enkel en alleen een representatie van de onderliggende data die a.d.h.v. je windows-settings wordt opgemaakt. Onderliggende data (of de representatie nu dd-mm-yyyy of mm-dd-yyyy is) blijft hetzelfde. Als je een datum insert als yyyymmdd zul je 'm dus gewoon net al alle andere data gerepresenteerd zien.
Brainpower schreef op woensdag 02 mei 2007 @ 17:20:
En wat bedoel je met SQL Injection?
Daar is zat over te vinden. Ook hier.

[ Voor 16% gewijzigd door RobIII op 02-05-2007 17:25 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • NiMu83
  • Registratie: Januari 2001
  • Laatst online: 18-08 21:46
RobIII schreef op woensdag 02 mei 2007 @ 17:21:
[...]

Dat boeit niet. De weergave van Access/ASP is enkel en alleen een representatie van de onderliggende data die a.d.h.v. je windows-settings wordt opgemaakt. Onderliggende data (of de representatie nu dd-mm-yyyy of mm-dd-yyyy is) blijft hetzelfde.
Maar wanneer de Regionale Setting op de server van de hosting ook op Dutch staat, en het gaat nog steeds niet goed. Waar kan dit dan aan liggen. Oftewel, wat is de reden dat de data op de Engelse manier wordt opgeslagen in de DB? De database is gecreeerd met een Nederlandse Access.

Voetbal is de belangrijkste bijzaak in het leven.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Brainpower schreef op woensdag 02 mei 2007 @ 17:25:
Maar wanneer de Regionale Setting op de server van de hosting ook op Dutch staat
Dan...?
Brainpower schreef op woensdag 02 mei 2007 @ 17:25:
en het gaat nog steeds niet goed. Waar kan dit dan aan liggen.
Geen idee, je doet écht iets verkeerd. Zoals gezegd is de weergave van datums totaal onafhankelijk van hoe een datum wordt opgeslagen. Als je de datum-instelling voor de weergave wijzigt zul je zien dat Access doodleuk de nieuwe representatie gebruikt. Ofwel: het is enkel een weergave van hoe de data 'onderhuids' opgeslagen is.
Brainpower schreef op woensdag 02 mei 2007 @ 17:25:
Oftewel, wat is de reden dat de data op de Engelse manier wordt opgeslagen in de DB?
Het wordt niet op de "Engelse manier" opgeslagen. Het wordt gewoon als een bult bytes opgeslagen (hoe boeit niet) en weergegeven zoals jij het wil hebben (lees: regional settings).

Ik ga er overigens wel van uit dat je veld ook daadwerkelijk van het juiste type (datum) is en geen "tekst" ofzo.

[ Voor 6% gewijzigd door RobIII op 02-05-2007 17:32 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • NiMu83
  • Registratie: Januari 2001
  • Laatst online: 18-08 21:46
RobIII schreef op woensdag 02 mei 2007 @ 17:28:
[...]

Dan...?


[...]

Geen idee, je doet écht iets verkeerd. Zoals gezegd is de weergave van datums totaal onafhankelijk van hoe een datum wordt opgeslagen. Als je de datum-instelling voor de weergave wijzigt zul je zien dat Access doodleuk de nieuwe representatie gebruikt. Ofwel: het is enkel een weergave van hoe de data 'onderhuids' opgeslagen is.


[...]

Het wordt niet op de "Engelse manier" opgeslagen. Het wordt gewoon als een bult bytes opgeslagen (hoe boeit niet) en weergegeven zoals jij het wil hebben (lees: regional settings).

Ik ga er overigens wel van uit dat je veld ook daadwerkelijk van het juiste type (datum) is en geen "tekst" ofzo.
Uiteraard zijn alle datum velden van het type Datum/Tijd. Maar wanneer ik iets verkeerd zou doen, waarom werkt het op mijn eigen server dan wel goed? Terwijl het op de server dan de hosting niet goed werkt, met precies dezelfde asp pagina's en database.

Voetbal is de belangrijkste bijzaak in het leven.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Brainpower schreef op woensdag 02 mei 2007 @ 17:36:
[...]

Uiteraard zijn alle datum velden van het type Datum/Tijd. Maar wanneer ik iets verkeerd zou doen, waarom werkt het op mijn eigen server dan wel goed? Terwijl het op de server dan de hosting niet goed werkt, met precies dezelfde asp pagina's en database.
Omdat er verschillen zijn in de regionale settings. En dan word 01-02-1999 op de een geïnterpreteerd als dd-mm-yyyy (1 feb) en op de ander als mm-dd-yyyy (2 jan). Daarom is die ISO notatie zo mooi, die laat geen twijfel bestaan: het is altijd yyyymmdd. Klaar.

Je moet van het idee af dat wat je ziet ook is wat opgeslagen is. Wat opgeslagen is/wordt is een datum, geen 'string' met een bepaalde 'opmaak' zoals 'dd-mm-yyyy' of 'mm-dd-yyyy'. Hoe je het weergeeft is dus aan jezelf (afhandelen in je ASP door LCID* te setten of gewoon keihard de opmaak te forceren met "format" ofzo). Bij het inserten laat je geen twijfel bestaan voor je DB layer door het ISO formaat te gebruiken. Doe je dat niet dan gaat je DB layer zelf aan het 'raden' (aan de hand van je regional settings) wat je nou bedoelt met 01-02-1999.

* Je kunt wel een LCID zetten, maar als je hoster die alsnog niet heeft ingesteld zoals jij het wil hebben heb je er nog geen moer aan.

[ Voor 36% gewijzigd door RobIII op 02-05-2007 17:46 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • NiMu83
  • Registratie: Januari 2001
  • Laatst online: 18-08 21:46
Ok, dat is dan in ieder geval duidelijk.

Maar nu probeer ik het middels (let niet op de *):
ASP:
1
2
3
4
5
6
7
Function Date2SQL(dtWhen)
     Date2SQL = Year(dtWhen) & Right("0" & Month(dtWhen),2) & Right("0" & Day(dtWhen),2)
End Function

sSQL2 = "INSERT INTO bla (*,*,*,strDate) values('" & * & "','" & * & "','" & * & "','" & Date2SQL(date()) & "')"

set oRS2 = oConn.Execute(sSQL2)


Maar dan krijg ik de foutmelding:

Microsoft JET Database Engine error '80040e07'

Data type mismatch in criteria expression.

Ook met # ipv ' of helemaal geen ' of # eromheen krijg ik een Syntax error in date in query expression '#20070503#' of Overflow bij niks eromheen.

En datumveld is Datum/Tijd.

Daarnaast geprobeerd:
cDate(Date2SQL) maar dan komt de melding:

Variable uses an Automation type not supported in VBScript: 'cDate'

[ Voor 8% gewijzigd door NiMu83 op 03-05-2007 10:45 ]

Voetbal is de belangrijkste bijzaak in het leven.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Toon de uiteindelijke query eens? Volgens mij moet het zo:
code:
1
Insert into bla (...,...,...,mydatefield) values (...,...,..., #20070503#)

Dus zonder quotes om de datum; enkel # om de datum.

Ik heb hier niet voldoende spul bij de hand om 't te testen helaas.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • NiMu83
  • Registratie: Januari 2001
  • Laatst online: 18-08 21:46
RobIII schreef op donderdag 03 mei 2007 @ 10:47:
Toon de uiteindelijke query eens? Volgens mij moet het zo:
code:
1
Insert into bla (...,...,...,mydatefield) values (...,...,..., #20070503#)

Dus zonder quotes om de datum; enkel # om de datum.

Ik heb hier niet voldoende spul bij de hand om 't te testen helaas.
ASP:
1
2
3
4
INSERT INTO * (*,*,*,strDate) values('...','...','...',#20070504#) 
Microsoft JET Database Engine error '80040e07' 

Syntax error in date in query expression '#20070504#'. 

[ Voor 5% gewijzigd door NiMu83 op 03-05-2007 10:53 ]

Voetbal is de belangrijkste bijzaak in het leven.


Acties:
  • 0 Henk 'm!

  • NiMu83
  • Registratie: Januari 2001
  • Laatst online: 18-08 21:46
Ik heb even gekeken en er moesten nog streepjes tussen. Dus Date2SQL = Year(dtWhen) & "-" & Right("0" & Month(dtWhen),2) & "-" & Right("0" & Day(dtWhen),2)

Ik denk dat het eindelijk werkt zo! *O*

Voetbal is de belangrijkste bijzaak in het leven.

Pagina: 1