Converteren van string naar datum

Status
Niet open voor verdere reacties.

jefke88

Gebruiker
Lid geworden
24 mrt 2009
Berichten
9
Hallo iedereen,

Ik ondervind een probleem bij een omzetten van een string naar een datum.

Ik heb een tabel 'Productie' met een Datum/tijdvak erin en 00-00-0000;0;_ als invoermasker. DD-MM-YYYY wordt aangehouden.

In een formulier heb ik nu een string (datum) opgebouwd, bvb 24032009.

Nu wil ik deze string graag omzetten naar een datumnotatie, om deze te kunnen wegschrijven in de tabel 'Productie'. Ik heb al met de DateSerial() gewerkt, maar dat wil niet lukken. Ik kom steeds aan een datum uit in het jaar 1894.

Wie kan mij helpen?
 
je moet even je statement wat je geprobeerd hebt posten want met dateserial moet het lukken.
Code:
str="24032009"
dtm=dateserial(right$(str,4), mid$(str,3,2),left$(str,2))
Enjoy!
 
Bedankt, maar vreemd genoeg, als ik de datum in een messagebox laat verschijnen, lijkt deze juist omgezet (24-3-2009), ga ik in de tabel kijken staat er als datum 21-7-1894.

Code:
Dim Datum As String '24032009
Dim Data As Date

Data = DateSerial(Right$(Datum, 4), Mid$(Datum, 3, 2), Left$(Datum, 2))
MsgBox (Data) 'geeft 24-3-2009
    
DoCmd.RunSQL "UPDATE Productie SET Productie.Datum=" & Data & " WHERE Productie.Datum Is Null" 'geeft 21-7-1894 in tabel Productie
 
Datums in Queries zijn berucht, omdat je nooit precies weet wat er uiteindelijk als datum geïnterpreteerd wordt. In jouw geval lijkt het erop, alsof alle getallen netjes van elkaar afgetrokken worden. Zelf gebruik ik altijd bijgaande constructie:

Code:
Dim BeginDatum As Date, Einddatum As Date, dBegin As Double, dEind As Double
BeginDatum = CDate(InputBox("Typ de begindatum:"))
Einddatum = CDate(InputBox("Typ de einddatum:"))

dBegin = CDbl(BeginDatum)
dEind = CDbl(Einddatum)

strSQL = "SELECT qMerge.* FROM qMerge WHERE CONTACTDATUM Between Cdate(" & dBegin & ") And CDate(" & dEind & ")"

Dit is een voorbeeldje waarbij twee tekstdatums worden omgezet naar een datum met CDate, waarna de datum met CDbl wordt omgezet naar een getal. Dit levert altijd een correcte waarde op voor de datum. Als laatste moet de datumwaarde uiteraard weer teruggezet worden naar een datum, en dat doe je m.b.v. Cdate in de querytekts.

Met een beetje stoeien, moet je hier wel uit kunnen komen voor jouw voorbeeld!

Michel
 
Na lang zoeken gelukt.SQL-commando moest er zo uitzien:

Code:
DoCmd.RunSQL "UPDATE Productie SET Productie.Datum= # " & Format(Data, "mm\/dd\/yyyy") & " # WHERE Productie.Datum Is Null"
 
Deze code heeft als nadeel, dat je nooit zeker weet of de maand en dag niet worden verwisseld. SQL statements hebben soms de onhebbelijkheid om in Amerikaanse waarden te rekenen, waardoor je dus 4-7 terug kan krijgen als 7-4.

Omdat ik zelf tegen dit probleem ben aangelopen bij queries op een SQL server, heb ik de omwisseltruc naar getallen standaard in al mijn formulieren hangen, onder het motto: voorkomen is beter dan genezen!

Wil uiteraard niet zeggen, dat jij tegen hetzelfde probleem aanloopt, maar hou het in de gaten, als je queries uitvoert via Docmd.RunSQL en consorten! Een query vanuit het queryvenster heeft hier overigens geen last van.

Michel
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan