Toon posts:

[cf / sql] nederlandse datum in db

Pagina: 1
Acties:

Verwijderd

Topicstarter
[van search word ik niet wijzer]

in mjin CFML pagina schrijf ik naar de database in het Datum/Tijd veld datum:

(formpagina: input type = text, name = datum, value = 11-03-2003 ) (dus 11 maart)

datum = #form.datum#

dan maakt hij er 3 november van

ook als ik doe:

datum = #dateformat(form.datum,'dd-mm-yyyy')#

ik ben bijna zo diep gezonken dat ik overweeg er een tekstveld van te maken. kan iemand me de goede richting in helpen?

[ Voor 2% gewijzigd door Verwijderd op 19-03-2003 11:58 . Reden: tyepftou ]


Verwijderd

Waarom sla je het gewoon niet op zoals hij wil. Dus "datum - dag - jaar".
Dan kan je in je script de waardes gewoon weel omdraaien....

Verwijderd

Topicstarter
you've GoT a point. ik ga het proberen

  • jochemd
  • Registratie: November 2000
  • Laatst online: 08-08 15:51
cfqueryparam

Verwijderd

Topicstarter
Verwijderd schreef op 19 maart 2003 @ 12:36:
Waarom sla je het gewoon niet op zoals hij wil. Dus "datum - dag - jaar".
Dan kan je in je script de waardes gewoon weel omdraaien....
nee dat werkt niet. ik laat nu het veld begindatum opdelen in 3 vars (dag, maand, jaar) en maak daar vervolgens een datumstring mee:

begindatum ingevuld = 03-05-2003 (dus 3 mei 2003)

code:
1
2
3
4
5
6
<CFSET bd_dag = mid(begindatum, 1, 2)>
<CFSET bd_maand = mid(begindatum, 4, 2)>
<CFSET bd_jaar = mid(begindatum, 7, 4)>
<CFSET begindatum = CREATEDATE(bd_jaar, bd_maand, bd_dag)>

<CFINSERT DATASOURCE="yfckan" TABLENAME="project">


Dus hij zou het nu goed moeten invoeren maar dat doet hij niet. ik heb ook nog onder de CFSET begindatum = CREATE... de volgende gezet

code:
1
 <CFSET einddatum = dateformat(einddatum,'mm-dd-yyyy')>


en andersom ook, maar niets werkt. (Misschien heeft het gewoon met de taalinstelling o.i.d. te maken van de server / acces??)
oke, me investigate :)

  • jochemd
  • Registratie: November 2000
  • Laatst online: 08-08 15:51
Verwijderd schreef op 20 March 2003 @ 12:28:
code:
1
<CFINSERT DATASOURCE="yfckan" TABLENAME="project">
Gebruik van cfinsert is een gewoonte die je maar beter meteen kan afleren.
en andersom ook, maar niets werkt. (Misschien heeft het gewoon met de taalinstelling o.i.d. te maken van de server / acces??)
Het heeft inderdaad met de locale te maken. En aangezien je die toch niet kan voorspellen voor alle systemen waar jouw applicatie in de toekomst op zou kunnen gaan draaien is cfqueryparam de verstandige oplossing.

Verwijderd

Topicstarter
jochemd schreef op 21 March 2003 @ 00:54:

[...]
Het heeft inderdaad met de locale te maken. En aangezien je die toch niet kan voorspellen voor alle systemen waar jouw applicatie in de toekomst op zou kunnen gaan draaien is cfqueryparam de verstandige oplossing.
Ik heb gezocht in de coldfusion manual hoe cfqueryparam werkt, maar ik snap geen hout van hoe je dat toe kunt passen op het in de database inserten van de datum in correct formaat... kun je dat uitleggen?

  • jochemd
  • Registratie: November 2000
  • Laatst online: 08-08 15:51
Het formaat doet er niet meer toe. Gewoon een datumobject in de value zetten en laat het systeem maar uitzoeken hoe het formaat er uit moet zien.

Verwijderd

Je kan even opzoeken welke datum/tijd formaten hij accepteert. Je kan misschien een timestamp ofzo erin stoppen, die je vast wel kan maken met CFML.

  • MoBi
  • Registratie: Oktober 1999
  • Laatst online: 12-08 14:19
<cfset locale("dutch")> Zo uit me hoofd, controleer ff de manual. Dan kan je het normaal in de db stoppen.

Volgens mij zit je te lullen, want ik voel nattigheid....


  • jochemd
  • Registratie: November 2000
  • Laatst online: 08-08 15:51
MoBi schreef op 21 March 2003 @ 15:16:
<cfset locale("dutch")> Zo uit me hoofd, controleer ff de manual. Dan kan je het normaal in de db stoppen.
<cfset setLocale("Dutch (Standard)")> zal beter gaan :)

Maar doe nou maar die cfqueryparam, het is echt de aanbevolen methode. Code zonder cfqueryparam komt bij mij de server niet op.
code:
1
2
3
4
5
6
7
8
9
<CFSET bd_dag = mid(begindatum, 1, 2)>
<CFSET bd_maand = mid(begindatum, 4, 2)>
<CFSET bd_jaar = mid(begindatum, 7, 4)>
<CFSET begindatum = CREATEDATE(bd_jaar, bd_maand, bd_dag)>

<cfquery datasource="yfckan">
INSERT INTO project (begindatum)
VALUES (<cfqueryparam cfsqltype="cf_sql_date" value="#begindatum#">)
</cfquery>

  • MoBi
  • Registratie: Oktober 1999
  • Laatst online: 12-08 14:19
jochemd schreef op 21 maart 2003 @ 15:23:
[...]

<cfset setLocale("Dutch (Standard)")> zal beter gaan :)

[/code]
Ach ja, twas gisteren laat, en ik ben vandaag al een beetje uit vorm. Maar wat jochemd voorsteld is inderdaad de beste methode idd.

Volgens mij zit je te lullen, want ik voel nattigheid....


Verwijderd

Topicstarter
ik gebruik de nu de cfqueryparam, maar ik krijg nu een foutmelding:

CFQUERYPARAM data conversion error

There is a data conversion error for CFQUERYPARAM #1.

Mijn code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<CFSET bd_dag = mid(begindatum, 1, 2)>
<CFSET bd_maand = mid(begindatum, 4, 2)>
<CFSET bd_jaar = mid(begindatum, 7, 4)>
<CFSET begindatum = CREATEDATE(bd_jaar, bd_maand, bd_dag)>

<CFSET ed_dag = mid(einddatum, 1, 2)>
<CFSET ed_maand = mid(einddatum, 4, 2)>
<CFSET ed_jaar = mid(einddatum, 7, 4)>
<CFSET einddatum = CREATEDATE(ed_jaar, ed_maand, ed_dag)>

<cfquery datasource="yfckan">
INSERT INTO project (begindatum, einddatum)
VALUES (<cfqueryparam cfsqltype="cf_sql_date" value="#begindatum#">, 
<cfqueryparam cfsqltype="cf_sql_date" value="#einddatum#">)
</cfquery>


BTW: De velden in de (mdb) database zijn Datum/tijd velden, zonder invoermasker ofzo.

[ Voor 11% gewijzigd door Verwijderd op 02-04-2003 10:37 . Reden: opschonen ]


  • jochemd
  • Registratie: November 2000
  • Laatst online: 08-08 15:51
Voor datum/tijd velden moet je ook een timestamp gebruiken als sqltype, niet een date.

Verwijderd

Topicstarter
jochemd schreef op 02 April 2003 @ 13:30:
Voor datum/tijd velden moet je ook een timestamp gebruiken als sqltype, niet een date.
dus dan moet het iets worden in de richting van

insert into tabel
values (<cfqueryparam cfsqltype="cf_sql_date" value="#begindatum#"> <cfqueryparam cfsqltype="cf_sql_time" value="00:00">, etc.

Verwijderd

Het is zowiezo niet verstandig om data op te slaan in een gelocaliseerd formaat. Zou je later een export willen doen met een andere database, of bepaalde bewerkingen willen uitvoeren, dan heb je kans dat je in de problemen komt met het formaat.

Wat altijd verstandig is, is om er een genormaliseerd formaat van te maken mbv CreateODBCDateTime() icm CreateDateTime().
Pagina: 1