Tijd-veld bevat datum

Status
Niet open voor verdere reacties.

linkav

Gebruiker
Lid geworden
13 jun 2007
Berichten
465
Beste forum-leden,

Ik heb een tabel gemigreerd van een Access-backend naar MySQL. In MySQL heb ik het formaat van de een tijd-veld veranderd van VARCHAR naar TIME. Als ik deze tabel koppel in mijn Access-frontend en ik ga in het veld staat op een formulier, bevat dit veld naast de tijd ook een datum (datum waarop de tabel gemigreerd is) .

Hoe kan ik dit verhelpen?

Graag hoor ik van jullie!
 
Als je veld werkelijk een tijdveld is, dan bevat het een getal tussen 0 en 1. Dat kan dan nooit de migratiedatum zijn, tenzij je in het jaar 0 al met een computer werkte. En in dat jaar vonden ze het al heel wat als je over het water kon lopen (zonder ski's ;)). Het idee om in Access al een 'datumveld' in een tekstveld te zetten rammelt natuurlijk al aan alle kanten. Dat zou je op zijn minst in MySQL ook als een datumveld moeten hebben geconverteerd, en niet naar tijd. Kortom: ik snap niet helemaal de bedoeling van dat veld. Maar wil je alleen de tijd zien, dan is het uiteraard al voldoende om de notatie om te zetten naar Tijd. Zeker als je er verder toch niks mee doet. En wil je de datum er uit filteren, trek dan het gehele getal er vanaf. Dan hou je sowieso alleen de tijd over. Van het jaar 0 dus :).
 
Goede morgen Octafish,

Bedankt voor je reactie.

In de Access-backend is het een 'datetime'-veld, het gaat om de starttijd van een sessie. Als je in de Access-backend een tabel selecteert met de rechtermuis-knop dan heb je de mogelijkheid om een tabel te exporteren via een ODBC-koppeling naar MySQL. Bij deze export wordt de tabel aangemaakt in MySQL en wordt het automatisch een VARCHAR-veld. En de waarde uit de Access-backend is voorafgegaan van de migratiedatum. In MySQL kan het formaat dan gewijzigd worden naar DATETIME, DATE of TIME. Wordt voor TIME gekozen, wordt enkel zichtbaar de datum weggehaald en niet daadwerkelijk verwijderd. Als ik de data bekijk van deze tabel in de Access frontend, nakoppeling van deze tabel, staat er nog een datum voor de tijd...

Ik heb het opgelost door 2 niet afhankelijke velden op mijn formulier te plaatsen (begin- en eindtijd van een sessie) en bij het event 'Form_current' en 'Form_beforeupdate' de waarden van de tekstvelden weg te schrijven naar de tabel-velden en dit werkt ook..
 
Wonderlijke constructie :). Ik ging er, op basis van jouw verhaal, van uit dat je datumveld in Access al een tekstveld was, dat dan bij de migratie naar MySQL ook een tekstveld wordt. Maar dat MySQL een datumveld hierbij automatisch converteert naar een tekstveld, vind ik wel bizar. En dan óók nog eens vult met een eigen datum! Want ik vermoed dat je in je Access tabel het DateTime veld vult met Now, zodat je automatisch Datum + Tijd in dat veld krijgt. En die datum wordt dan verbouwd door MySQL? Ik zou gelijk stoppen met MySQL :).
 
Als je naar een TIME veld kijkt in MySQL dan zie je dat dit uit 4 delen kan bestaan: van -838 tot + 838 uren, 59 minuten, 59 seconden en het fractionele deel (tot 6 decimalen dacht ik) die de fracties van seconden kunnen bevatten.
Office producten gebruiken een getal met het integere deel als datum, het fractionele deel als tijd. Ze gaan dus anders om met gegevens dan database programma's. Tekstvelden zoals varchar en nvarchar kunnen ook veel meer tekst bevatten dan Access tekstvelden en een bit veld is ook verschillend van het yes/no veld in Access. Als je met gegevens wil omgaan vind ik het een heel goed idee om over te schakelen van een office omgeving naar een database. Maar dan moet je wel even de tijd nemen om te kijken hoe de veldtypes in de database die je gebruikt werken.
bv. veldtype MySQL TIME: https://www.mysqltutorial.org/mysql-time/

Je zal veel efficiënter kunnen werken met een echte database back-end, maar zoals elke verbetering vraagt dit ook een kleine investering: je nieuwe tool leren kennen.

Vriendelijke groeten
ng
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan