Avatar billede cogito Nybegynder
24. marts 2003 - 21:32 Der er 7 kommentarer og
1 løsning

Konverter tekst til tid - Access 2002

Hej.

Jeg har i en access 2002 tabel en tekst værdi der f.eks. indeholder:
00:01:03.124
Formen er: hh:mm:ss:000 (tusindedele)

Mit problem er nu, at jeg i min VB applikation skal til og regne på disse værdier - dvs. trække to fra hinanden, og så få en difference. Det har jeg rimelig store problemer med.

Kan jeg konvertere tekst-indholder til en tids-værdi? Hvordan?
Kan jeg, når jeg hiver dem ud af access, give dem en anden type?
Kan jeg sætte en anden type på i Access? (Har forsøgt med dato/klokkeslæt uden held)

/Peder
Avatar billede cogito Nybegynder
24. marts 2003 - 21:33 #1
Ups. Formen er:
hh:mm:ss.000 (altså punktum til sidst)

/Peder
Avatar billede terry Ekspert
24. marts 2003 - 21:44 #2
CalcDiff = DateDiff("n", Cdate(fld1), Cdate(fld2))
Avatar billede terry Ekspert
24. marts 2003 - 21:46 #3
wwhat is the 000 for?

CalcDiff = DateDiff("n", Cdate(left(fld1,8)), Cdate(left(fld2,8))
Avatar billede terry Ekspert
24. marts 2003 - 21:47 #4
oops, now I see (tusindedele)!
Avatar billede cogito Nybegynder
24. marts 2003 - 22:11 #5
>>Terry

Fungerer ikke helt. Går ud fra at fld er den varibel der indeholder tiden. Det eneste jeg kan få frem er 0 eller -1.

Og, det giver problemer, hvis jeg tager 12 karakter (altså tusindedelene med) i stedet for bare 8.

/Peder
Avatar billede tjacob Juniormester
25. marts 2003 - 12:41 #6
Jeg tror ikke at du kan gemme en tid på 1000dele i Acccess.
Du kunne gemme tiden uden 1000dele, og så gemme 1000delene i et andet felt.

MHT dit aktuelle problem:
Hvis formatet altid er ens (2 karakter til t,m,s og 3 karakterer til 1000dele),
så kunne du jo omregne tiderne til kun 1000dele:

Function To1000(byval strTime As String) As Single

  To1000 = (CSng(Left(strTime, 2)) * 3600000) + (CSng(Mid(strTime, 4, 2)) * 60000) + _
          (CSng(Mid(strTime, 7, 2)) * 1000) + (CSng(Mid(strTime, 10, 3)))

End Function

-og tilbage:
Function ToTimeStr(Byval sTime as Single) As String
    Dim sHour, sMin, sSec, s1000Sec

    sHour = Int(lTime / 3600000)
    lTime = lTime - (sHour * 3600000)
    sMin = Int(lTime / 60000)
    lTime = lTime - (sMin * 60000)
    sSec = Int(lTime / 1000)
    s1000Sec = lTime - (sSec * 1000)

    ToTimeStr = CStr(Format(sHour, "00")) & ":" & CStr(Format(sMin, "00")) & _
                ":" & CStr(Format(sSec, "00")) & "." & CStr(Format(s1000Sec, "000"))

End Function

Nu kan du i din kode bruge funktionerne således:

Du har to tider (i strenge): strTime1 og strTime2

    sNewTime = ToTimeStr(To1000(strTime2) - To1000(strTime1))


Men det ville nok være nemmere at gemme tiderne i Access som 1000dele.
Så skal du kun konvertere den ene vej:  sNewTime = ToTimeStr(Time2 - Time1)

/tjacob
Avatar billede tjacob Juniormester
25. marts 2003 - 12:50 #7
Jeg har ikke adgang til VB lige nu, så der kan godt være syntaks-fejl i ovenstående
Avatar billede tjacob Juniormester
25. marts 2003 - 12:53 #8
Ups, det er der: i Function ToTimeStr skal variablen hedde sTime (s for Single)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester