[ASP/Access]Datum conversie

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

Acties:
  • 0 Henk 'm!

Anoniem: 45255

Topicstarter
Ok, beetje vreemde titel, maar ik zit met het volgend probleem:

Ik heb een asp website gemaakt, die draait op een webserver WAAR IK GEEN CONTROLE OVER HEB. Dit is erg belangrijk/vervelend.

Mijn asp pagina's genereren overzichten gebaseerd op data (datums) uit een Access database. Mijn probleem is dat de datuminstellingen op die webserver af en toe lijken te veranderen. Als iemand inlogt op dat ding veranderd ie bijvoorbeeld naar 'dd/mm/jjjj', terwijl als er niemand ingelogd is, zijn de instellingen standaard (engels: mm/dd/jjjj).

Iedere keer als deze datuminstellingen veranderen, klopt er natuurlijk geen moer meer van mijn datumoverzichten. Dit kan ik ondervangen door in de Access tabel een datumnotatie te forceren (standaard datum notatie). Dit gaat goed.

Een ander probleem is echter het invoeren van data. Staat de datumintelling op die webserver op dd/mm/jjjj en ik voer 01/09/2002 in zal deze als 1 september 2002 worden opgeslagen. Staat de datuminstelling op mm/dd/jjjj dan zal er 9 januari 2002 worden opgeslagen... Hier heb ik nog niets voor kunnen vinden.

Is er misschien een ALTIJD GELDENDE datum notatie? Ik weet dat dit er 1 is: jjjj/mm/dd , maar deze wordt niet herkend in een Access SQL Query :(

Alle mogelijke suggesties zijn zeer welkom! ;)

Acties:
  • 0 Henk 'm!

  • Gert
  • Registratie: Juni 1999
  • Laatst online: 07-11-2024
mm/dd/jjjj en dd-mm-jjjj zullen 't zelfde resultaat geven. Andere combinaties zijn niet officieel, behalve jjjj-mm-dd dan maar die wordt niet ondersteund.

Acties:
  • 0 Henk 'm!

  • TweakersOnly
  • Registratie: September 2000
  • Laatst online: 01:36
Voordat ik een formulier aan de gebruiker laat zien, controleer ik eerst welk datumformaat op de server wordt gehanteerd.

ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<%
FUNCTION getDatumformaat ()
    dim datum, maand, dag, posmaand, posdag
    datum = Date
    maand = Month(datum) & ""
    dag = Day(datum) & ""
    
    IF (maand = dag) THEN
        datum = date-1
        maand = Month(datum) & ""
        dag = Day(datum) & ""
    END IF

    posmaand = instr(1,datum,maand)
    posdag = instr(1,datum,dag)
    IF (posdag > posmaand) THEN
        getDatumformaat = "MM/DD/YYYY"
    ELSE
        getDatumformaat = "DD/MM/YYYY"
    END IF  
END FUNCTION


Als je de output van de functie op het formulier laat zien, weet de gebruiker altijd in welk formaat hij de gegevens moet invoeren.

Het datumformaat in Access kan je het beste op Engels laten staan. Bij de Engelse datumnotatie zal de webserver de ingelezen datums altijd omzetten naar de op de server geldende datumnotatie.

Voordeel van bovenstaande wijze is dat de datuminput gelijk is aan de output, onafhankelijk welk datumnotatie op de webserver wordt gehanteerd.

Acties:
  • 0 Henk 'm!

Anoniem: 45255

Topicstarter
TweakersOnly, bedankt. Maar ik denk dat niet mijn probleem oplost. Ik ben er net achter gekomen dat Access naar de UserSettings kijkt voor de datumnotatie, en ASP (dus IIS) naar de SystemSettings. Deze verschillen dus op die webserver, en ik kan daar niets aan veranderen (ik heb er geen controle over).

Jouw functie haalt de datuminstelling uit de SystemSettings, maar als er iemand op de server is ingelogd, is datuminstelling van Access dus anders, omdat deze hem uit de UserSettings haalt. :( Erg vervelend dat ik die server niet kan/mag beheren.

Jij zei ook dat ik de datumnotatie in Access het beste op Engels kan laten staan (het gaat om Access 97). Hoe stel ik dat in dan? Ik kan alleen kiezen uit: Standaard, Korte- en Lange datum notatie enz.... Maar niet uit een Engels of Nederlands...

Evenzogoed bedankt voor de moeite :)

Acties:
  • 0 Henk 'm!

  • Gert
  • Registratie: Juni 1999
  • Laatst online: 07-11-2024
Een / in de datum betekent altijd een us notatie.

Het gaat soms goed als je bijvoorbeeld 31/5/2002 hebt omdat access zelf snapt dat er geen 31e maand is.

[ Voor 53% gewijzigd door Gert op 28-01-2003 13:40 ]


Acties:
  • 0 Henk 'm!

Anoniem: 45255

Topicstarter
Gert schreef op 28 januari 2003 @ 13:39:
Een / in de datum betekent altijd een us notatie.
Ja!? Ga ik gelijk uit proberen!

Acties:
  • 0 Henk 'm!

  • TweakersOnly
  • Registratie: September 2000
  • Laatst online: 01:36
Klopt niet helemaal wat je zegt. Ik maak op mijn website een DSN-less verbinding met de Access-mdb op de webserver via de volgende code:

ASP:
1
2
3
4
dim ConnStr, DBConn                  
ConnStr = "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.Mappath("/fpdb/database.mdb")
SET DBConn = Server.CreateObject("ADODB.Connection")                                
DBConn.Open ConnStr


Op dat moment heb ik niets meer met de usersettings van de gebruiker te maken, maar worden de datumnotatie bepaald aan de hand van de datumnotatie op de webserver !!

In Access kan je in het veld "Input Mask" (nederlands weet ik ff niet) de datumnotatie ingeven. Voor de Engelstalige access wordt dit: "mm-dd-yyyy", de Nederlandstalige versie van Access vereist "mm-dd-jjjj". :)

Als je bovenstaande stappen uitvoert en gebruik maakt van de eerder genoemde functie getDatumformaat() wordt jouw Engelse datumnotatie in Access vertaald naar de datumnotatie op de webserver en de door users ingevoerde datums automatisch omgezet naar de Engelse datumnotatie en weggeschreven naar de database.

Bij mij werkt bovenstaande oplossing al maanden zonder problemen.

[ Voor 5% gewijzigd door TweakersOnly op 28-01-2003 13:48 ]


Acties:
  • 0 Henk 'm!

Anoniem: 45255

Topicstarter
Die Input Mask had ik nog niet aangedacht, laat ik dat eens proberen. Want want GERT zei klopt niet... Als ik Day("01/09/02") doe komt er 1 uit ipv 9 (hij zei alles met '/' is engels)...

Ik bedoelde de usersettings op de webserver trouwens. Als iemand inlogd op die webserver, voor onderhoud ofzo - de administrator, dan worden de usersettingsgeladen. Deze kunnen verschillen van de systemsettings... Access kijkt op dat moment naar die usersettings en iis nog steeds naar de systemsettings.. rot Microsoft...

Acties:
  • 0 Henk 'm!

Anoniem: 45255

Topicstarter
Nee, Input mask werkt ook niet... Wellicht wel bij het invoeren, maar niet bij het ophalen van de data... Waarbij ik dus een query heb (in asp): "where taakbegin >= DateValue('01/09/" & jaar & "')"

Maar dit werkt alleen met nederlandse datuminstelling... :(

In de Access database hep ik bij taakbegin ingesteld:
DatumNotatie: StandaardDatumnotatie
InvoerMasker: "dd-mm-jjjj"

Maar dat maakt dus niets uit.

[ Voor 30% gewijzigd door Anoniem: 45255 op 28-01-2003 14:26 ]


Acties:
  • 0 Henk 'm!

  • TweakersOnly
  • Registratie: September 2000
  • Laatst online: 01:36
Anoniem: 45255 schreef op 28 januari 2003 @ 14:24:
Nee, Input mask werkt ook niet... Wellicht wel bij het invoeren, maar niet bij het ophalen van de data... Waarbij ik dus een query heb (in asp): "where taakbegin >= DateValue('01/09/" & jaar & "')"
Je haalt nu een aantal dingen door elkaar. Een SQL-query om een datumformaat uit een Access-database te halen, gebeurt altijd in de volgende vorm:

SQL:
1
SELECT DATUM FROM TABEL WHERE DATUM = #MM/DD/YYYY#


Bij SQL-queries is de datumnotatie altijd in het Engels. Bij een Access-database komen worden daar hekjes (#) aan toegevoegd, bij een SQL database worden er kootjes (') aan toegevoegd.

Acties:
  • 0 Henk 'm!

Anoniem: 68702

Anoniem: 45255 schreef op 28 januari 2003 @ 12:35:


Is er misschien een ALTIJD GELDENDE datum notatie? Ik weet dat dit er 1 is: jjjj/mm/dd , maar deze wordt niet herkend in een Access SQL Query :(
Je moet de datum invoeren als dd/mmm/jjjj. Deze werkt altijd.

Voorbeeld
ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<%

Function MediumDate( ByVal stringToCheck, ByVal defaultOut )

Dim dayPart
Dim monthPart
Dim yearPart

If IsDate( stringToCheck ) Then

dayPart = Day( stringToCheck )
monthPart = Monthname( Month( stringToCheck ), True )
yearPart = Year( stringToCheck )

MediumDate = dayPart & "-" & monthPart & "-" & yearPart

Else

MediumDate = defaultOut

End If

End Function

' Nu een voorbeeld om de functie aan te roepen:
SQL = "UPDATE tblKlanten SET bestelDatum = # " & MediumDate( Date(), "Null" ) "# WHERE klant_id = 34;"

%>

Acties:
  • 0 Henk 'm!

  • Gert
  • Registratie: Juni 1999
  • Laatst online: 07-11-2024
Bovenstaande gaat fout als je een US instelling hebt op je server.
Zoals TweakerOnly ook al zei, in sql queries gebruik je of US notatie of de jjjj-mm-dd notatie, als het een niet access db betreft.

Acties:
  • 0 Henk 'm!

Anoniem: 53573

Gebruik Session.LCID om de webserver op een andere taal in te stellen

Dateserial is trouwens ook een handige functie om je datumvelden te manipuleren.

http://www.4guysfromrolla.com/webtech/110398-1.shtml

[ Voor 53% gewijzigd door Anoniem: 53573 op 29-01-2003 11:33 . Reden: Dateserial toegevoegd ]


Acties:
  • 0 Henk 'm!

  • Gert
  • Registratie: Juni 1999
  • Laatst online: 07-11-2024
Session.LCID werkt niet voor sql queries. Access wordt er niet door veranderd, allleen de output op de pagina zelf.

Acties:
  • 0 Henk 'm!

Anoniem: 45255

Topicstarter
Bedankt allen voor de reacties... Ik denk dat ik het op kan lossen met de functie DateSerial() (tip van Sybesma)... Nooit van gehoord, maar echt handig :) Bedankt

  • DJ-B
  • Registratie: September 2001
  • Laatst online: 18:20
Anoniem: 45255 schreef op dinsdag 28 januari 2003 @ 14:07:
Die Input Mask had ik nog niet aangedacht, laat ik dat eens proberen. Want want GERT zei klopt niet... Als ik Day("01/09/02") doe komt er 1 uit ipv 9 (hij zei alles met '/' is engels)...

Ik bedoelde de usersettings op de webserver trouwens. Als iemand inlogd op die webserver, voor onderhoud ofzo - de administrator, dan worden de usersettingsgeladen. Deze kunnen verschillen van de systemsettings... Access kijkt op dat moment naar die usersettings en iis nog steeds naar de systemsettings.. rot Microsoft...
Ik heb wel volledige toegang tot de server (en heb exacte hetzelfde probleem). Hoe kan ik die SYSTEM settings aanpassen i.p.v. de User Settings?

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
@TS:

gebruik session.lcid icm parameterized queries en je hebt geen problemen meer met datumformaten... (voor verdere voordelen van het gebruik van parameterized queries en eventuele vragen daarover kun je de search van dit forum gebruiken)

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


  • JWolters
  • Registratie: Maart 2001
  • Laatst online: 26-05 17:03

JWolters

Killing Me Killing You

als je het format #yyyy-mm-dd# gebruikt vindt Access het in iedere taal goed, voor SQL-server kun je 'yyyy/mm/dd' gebruiker.

Ik geloof dat de goede code is voor Access
Visual Basic:
1
SQLDate = Format("\#yyyy-mm-dd\#", DateVariable)

Time is my only fear, an enemy of Sand


  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
JWolters schreef op donderdag 16 december 2004 @ 14:50:
als je het format #yyyy-mm-dd# gebruikt vindt Access het in iedere taal goed, voor SQL-server kun je 'yyyy/mm/dd' gebruiker.

Ik geloof dat de goede code is voor Access
Visual Basic:
1
SQLDate = Format("\#yyyy-mm-dd\#", DateVariable)
euhmmm, en dat is in ASP???

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:29

Creepy

Tactical Espionage Splatterer

En dit helpt hem met ASP.NET hoe? de C voorbeelden gaan daar niet echt in werken lijkt me ;)

DJ-B: Je kickt voor je vraag een topic van bijna 2 jaar oud. Open volgende keer maar gewoon een nieuw topic? ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • JWolters
  • Registratie: Maart 2001
  • Laatst online: 26-05 17:03

JWolters

Killing Me Killing You

dit kan je inderdaad helpen binnen ASP. Je kunt via setlocale tijdelijk een 'geschikt' datumformaat kiezen, bv. in dit geval Zweeds; en dan de separators vervangen door je eigen gewenst formaat. Dit is nodig omdat bv. Windows Scripting niet de format-functie kent

Time is my only fear, an enemy of Sand


Acties:
  • 0 Henk 'm!

Anoniem: 30225

Creepy schreef op donderdag 16 december 2004 @ 21:04:
[...]

En dit helpt hem met ASP.NET hoe? de C voorbeelden gaan daar niet echt in werken lijkt me ;)
Maar dit is wel het antwoord van de vraag van de OP.
Anoniem: 45255 schreef op dinsdag 28 januari 2003 @ 12:35:
Is er misschien een ALTIJD GELDENDE datum notatie?
code:
1
2
3
4
5
6
7
The international standard date notation is
 
    YYYY-MM-DD
 
where YYYY is the year in the usual Gregorian calendar, 
MM is the month of the year between 01 (January) and 12 (December), 
and DD is the day of the month between 01 and 31.

Edit: voorbeeldje ...
code:
1
2
  dim mydate as string
  mydate = format(year(now),"0000") & "-" & format(month(now),"00") & "-" & format(day(now),"00")

[ Voor 17% gewijzigd door Anoniem: 30225 op 15-03-2005 00:00 ]


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:29

Creepy

Tactical Espionage Splatterer

Als jij denkt dat dat gaat helpen tegen z'n steeds veranderende datum, en tegen gebruikers die gaan roepen waarom het niet gewoon in de NL datum notatie kan ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 23:56
Creepy schreef op vrijdag 17 december 2004 @ 09:16:
Als jij denkt dat dat gaat helpen tegen z'n steeds veranderende datum, en tegen gebruikers die gaan roepen waarom het niet gewoon in de NL datum notatie kan ;)
Ja dat doet het. Als je na de invoer ( die gebruik maakt van de Access system settings ) het format met een FormatDate omzet naar de internationale notatie, komt het altijd goed in de db.

De terugweg kan met een format in de query die weer naar je systemsettings vertaald.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

Anoniem: 100445

Hier zijn erg veel topics over. truc is dat je in access de datum opslaat als:
code:
1
MM/DD/YYYY


je kan de invoer van een form gewoon omzetten:
code:
1
2
OldDate = CDate(request.form("datum"))
NewDate = Month(OldDate) & "/" & Day(OldDate) & "/" & Year(OldDate)

je slaat nu de datum goed op voor access, en leest deze ook gewoon weer terug. om nu de datum in nederlands formaat weer te geven op de pagina:
code:
1
session.LCID = 1043   'nederland

Acties:
  • 0 Henk 'm!

Anoniem: 30225

farlane schreef op vrijdag 17 december 2004 @ 10:01:
[...]
Ja dat doet het. Als je na de invoer ( die gebruik maakt van de Access system settings ) het format met een FormatDate omzet naar de internationale notatie, komt het altijd goed in de db.
Correct me if i'm wrong..
Volgens mij maakt de functie FormatDate ook gebruik van de regionale settings.
Ik zou de datum opsplitsen in een jaar, maand en dag-deel en deze handmatig aan elkaar 'plakken'.
De terugweg kan met een format in de query die weer naar je systemsettings vertaald.
Je moet juist niet formatteren in de query. Als je dat wel doet dan krijg je een string-type terug en geen date-type. Pas bij de weergave moet je formatteren.
Pagina: 1