Avatar billede maxmuldjord Nybegynder
04. marts 2006 - 15:27 Der er 26 kommentarer og
1 løsning

Varibelproblemer - format?

Hej exp.

jeg forsøger mig med et tidsregnestykke, jeg vil trække 2 tidspunkter fra hinanden, de indtastes i en form, jeg får en type mismatch, skal jeg på en eller anden måde angive at der er tale om tid? Af hensyn til min access database ser indtastning f.eks ud som 15:00.
Mine variabler ser ud sådan her:

Dim a,b
a = Request.Form("start")
b = Request.Form("slut")
Dim dtimer
dtimer = (b - a)

Og så forsøger jeg at indsætte i databasen sådan her :

objRS ("timer")= dtimer

Hvad gør jeg galt?
Avatar billede eagleeye Praktikant
04. marts 2006 - 15:37 #1
hvis du skal trække to tidspunkter fra hinanden skal du bruge datediff funktionen. Den kan så kan give timer/minutter/sekunder imellem to klokkeslæt så man må selv regne lidt på det.

Hvad skal du trække fra hinadnen er det klokkeslæt eller datoer?


Hvad skal du havde lagt i databasne og hvilken datatype er kolonnen timer?
Avatar billede maxmuldjord Nybegynder
04. marts 2006 - 15:40 #2
Jeg har lige forsøgt at ændre databasen til tal i stedet for dato og klokkeslet og så virker det. Det jeg gerne vil er at intaste et starttidspunt i "start" og et sluttidspunkt i "slut" Så skulle den gerne selv regne tidsforbruget ud. Jeg skal ikke bruge sekunder men timer og minutter. Jeg skal have på start og sluttidspunkt samt tidsforbruget med ind i databasen.
Avatar billede maxmuldjord Nybegynder
04. marts 2006 - 15:43 #3
skal jeg så dtimer =Datediff (b - a)
Avatar billede eagleeye Praktikant
04. marts 2006 - 15:45 #4
Ja men datediff giver enten timer eller minutter så du skal bruge dette som giver antal minutter imellem de to klokkesæt:

dtimer = datediff("n", a, b)
Avatar billede eagleeye Praktikant
04. marts 2006 - 15:45 #5
Vi du gemme forskellen dtimer som tt:mm  ?
Avatar billede eagleeye Praktikant
04. marts 2006 - 15:48 #6
Eks hvis du vil gemme forskellen i databasen i formet tt:mm :

Dim dtimer, tMin
tMin = datediff("n", a, b)
dtimer = right("0" & int(tMin/60), 2)
dtimer = dtimer & ":" & right("0" & int(tMin-dtimer*60), 2)
Avatar billede maxmuldjord Nybegynder
04. marts 2006 - 15:48 #7
ja tak - bliver det så mon datediff("h","n", a,b)?
Avatar billede maxmuldjord Nybegynder
04. marts 2006 - 15:49 #8
bump

Tak jeg prøver lige
Avatar billede eagleeye Praktikant
04. marts 2006 - 15:50 #9
datediff er lidt besværlig for den kan kan give en tidenhed tilbage. Så derfor må man finde den mindste tids enhed man ønsker, i dette tilfælde minutter "n", og så selv regne antal timer og minutter ud fra det totalt antal minutter.
Avatar billede maxmuldjord Nybegynder
04. marts 2006 - 15:53 #10
Tak endnu engang eagleeye. Jeg render så ind i et nyt problem, min SQL vil ikke vise det totale rigtigt når jeg anvender tidsformat, kan du hjælpe med denne også? Smid bare et svar !

Min SQL set objRS = objConn.Execute("SELECT SUM(timer) AS sumTimer FROM timer")
Avatar billede langthjem Nybegynder
04. marts 2006 - 16:00 #11
Hvis du vil lave en sum ud af det vil jeg foreslå at du generelt bare gemmer dine data som minutter, så kan du lave en sum på det, og så regne det om til TT:MM når du vil udskrive det.
Avatar billede eagleeye Praktikant
04. marts 2006 - 16:01 #12
Ja sum på eet klokkeslæt type giver noget rigttigt ud.

du kan gemme det som et tal 02:30 som 2.5 timer så summer tallet og regne summe om til tt:mm
Avatar billede maxmuldjord Nybegynder
04. marts 2006 - 16:05 #13
takker
Avatar billede eagleeye Praktikant
04. marts 2006 - 16:11 #14
Så det kode jeg har vist skal engenligt se sådan her ud og så gemme det tal i en reelt-tal type kolonne:

Dim dtimer, tMin
tMin = datediff("n", a, b)
dtimer = round(tMin/60,2)


Og når du udksirver det:

set objRS = objConn.Execute("SELECT SUM(timer) AS sumTimer FROM timer")
tal = objRS("sumTimer")
str = int(tal)
if len(str) = 1 then str = "0" & str
str = str & ":" & right("0" & (tal-int(str))*100*(60/100),2)

response.write str
Avatar billede maxmuldjord Nybegynder
04. marts 2006 - 16:21 #15
hmm .. jeg skal lige se om jeg kan hitte ud af hvad du gør men umiddelbart ser det ud til at virke, jeg kan ikke helt gennemskue hvad du gør men jeg ser lige på det igen
Avatar billede maxmuldjord Nybegynder
04. marts 2006 - 16:26 #16
når jeg lige tester så virker det med heltal men hvis jeg gemmer eks 10.00 - 17.50 (17.30) så regner det negativ?
Avatar billede eagleeye Praktikant
04. marts 2006 - 16:29 #17
indtaster du minutter i 100'dele eller som rigtige minutter?
Hvordan ser koden ud lige nu?
Avatar billede maxmuldjord Nybegynder
04. marts 2006 - 16:31 #18
når jeg indtaster kl 17.30 skriver jeg 17.50
Avatar billede maxmuldjord Nybegynder
04. marts 2006 - 16:32 #19
med puntkum og ikke komma. koden har jeg klippet herfra vil du se mere af den? databasen er rettet til tal for alle felter
Avatar billede eagleeye Praktikant
04. marts 2006 - 16:34 #20
Ok, men så skal du ikke bruge datediff da den regner med minutter så skulle du bare kunne trække de to tal fra hinanden som du gjorde først for at få forskellen:

Dim a,b
a = Request.Form("start")
b = Request.Form("slut")
Dim dtimer
dtimer = (b - a)


Så gemme dtimer i databasen i en tal kolonne som kan acceptere kommatal.
Avatar billede maxmuldjord Nybegynder
04. marts 2006 - 16:34 #21
takker - prøver lige igen
Avatar billede maxmuldjord Nybegynder
04. marts 2006 - 16:50 #22
den brokker sig over denne "str = int(tal)"
Avatar billede maxmuldjord Nybegynder
04. marts 2006 - 16:51 #23
jeg glemte; Microsoft VBScript runtime  error '800a01ca'

Variable uses an Automation type not supported in VBScript
Avatar billede eagleeye Praktikant
04. marts 2006 - 16:52 #24
Så prøv lige at rette linien til:

str = cint(tal)
Avatar billede maxmuldjord Nybegynder
04. marts 2006 - 17:01 #25
Det er det samme. jeg har forsøgt at indtaste lidt forskellige tal, jeg undre mig over at den vil regne 11.75 - 23.15 = 11.40?
Avatar billede eagleeye Praktikant
04. marts 2006 - 17:06 #26
Det giver også 11.4 med mindre det er fra 23.15 til 11.75 næste dag?
Avatar billede maxmuldjord Nybegynder
04. marts 2006 - 17:16 #27
du har ret det er mig der er et fjols, det skulle jo have været 11.75 - 23.25 når det er 1/100 dele .
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