Avatar billede nidyahou Praktikant
12. oktober 2003 - 18:37 Der er 56 kommentarer og
1 løsning

object closed

hvorfor får jeg fejl, at minutter er lukked i denne kode:

if minutter => cint(60) then
minutter = cint(minutter) / cint(60)
minutter = split(minutter, ",")
strtimer = clng(timer) - cint(1)
minutter = Left(minutter(1), 2)
elseif minutter(1) = 0 then
minutter(1) = "0"
end if

jeg får fejl ved strtimer
Avatar billede thesurfer Nybegynder
12. oktober 2003 - 18:46 #1
skulle det ikke have: været minutter, ".") (punktum i stedet for komma) ?

prøv at udskrive indholdet af minutter: response.write "minutter: *" & minutter & "*"

jeg bruger * for at se om der står noget i minutter.. hvis der ikke gør, kommer der til at står "**".. på den måde kan man også sikre sig at response.write bliver udført..
Avatar billede thesurfer Nybegynder
12. oktober 2003 - 18:46 #2
hov.. prøv med "timer" i stedet for minutter..
Avatar billede nmh Nybegynder
12. oktober 2003 - 18:55 #3
split(s,","). Så skal s være en streng.

Hos dig er minutter et af typen integer.
Konverter til streng med Cstr(minutter)
Avatar billede nmh Nybegynder
12. oktober 2003 - 19:02 #4
hvis minutter er lig 3.33
og man sætter A=split(minutter,".")
så vil A(0) være lig 3.33
Avatar billede nidyahou Praktikant
12. oktober 2003 - 20:45 #5
minutter er en streng
Avatar billede nidyahou Praktikant
12. oktober 2003 - 20:46 #6
nej, fordi funktionen:
minutter = cint(minutter) / cint(60)
kan give et , tal
Avatar billede nidyahou Praktikant
12. oktober 2003 - 20:47 #7
desuden er det TIMER jeg får fejl i
Avatar billede nmh Nybegynder
12. oktober 2003 - 20:59 #8
minutter = cint(minutter) / cint(60)
Her er minutter et tal.
minutter=Cstr(minutter)
nu er det en streng, og nu kan du benytte split-funktionen.
Decimalpunktummet vi være blevet til et komma nu.
så med minutter=minutter,",") vil minutter(1) være decimal-delen, og det vil være en tekststreng.
hvis f.eks du startede med at minutter var 5.12345
så vil Cstr(minutter) være "5,12345"
og split(minutter,",") vil bestå af to dele minutter80)="5" og minutter(1)="12345"

Du fik ikke en fejl ved minutter, men du opnår ikke det, du ønsker, med din split-ordre.

Men prøv lige at fortælle, hvad det egentlig er du vil lave.
Det, jeg tror du vil lave, kan laves fiksere.

Hvor får du timer ind i billedet? Det kan man ikke se af det, du skriver.
Avatar billede nidyahou Praktikant
12. oktober 2003 - 23:19 #9
det er en del af en udregning, der skal vise hvor lang tid en bruger har været på siden
Avatar billede nidyahou Praktikant
12. oktober 2003 - 23:30 #10
den fejl jeg får:
This array is fixed or temporarily locked: 'minutter'
altså uden jeg bruger det der Cstr ellers så siger den at det ikke er korrekt at benytte Cstr
Avatar billede nmh Nybegynder
13. oktober 2003 - 12:10 #11
OK, nu forstår jeg, hvad du mener med timer. Det er formentlig funktionen Timer(), som angiver en tid i sekunder.
Har jeg ret?
Ønsker du så at få det lavet om til hele timer, minutter og sekunder?
Avatar billede nidyahou Praktikant
14. oktober 2003 - 01:42 #12
en tid i minutter ja jeg bruger formatedate som jo giver x1:x2
hvor x1 er timer og x2 er minutter, og splitter også derefter
Avatar billede keysersoze Ekspert
14. oktober 2003 - 13:28 #13
så fortsætter jeg bare fra dit andet spm (http://www.eksperten.dk/spm/412498)...

i hvilket format har du gemt tiden - altså hvordan ser den tid ud du forsøger at arbejde med?
Avatar billede nidyahou Praktikant
14. oktober 2003 - 16:06 #14
dansk LCID 1330, tror jeg det er
Avatar billede nidyahou Praktikant
14. oktober 2003 - 16:07 #15
<%session.LCID=1030%>
Avatar billede nidyahou Praktikant
14. oktober 2003 - 16:07 #16
jeg poster lige hele lortet =)
det er som følger:
<%

Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("System.mdb")
Conn.Open DSN

strSQL = "Select * From Brugere Where Bruger = '" & session("bruger") & "'"
set rs = Conn.Execute (strSQL)

'Del timer og minutter op på hver side af :
tid = split(session("sidstlog"), ":")
regtid = split(rs("Onlinetid"), ":")
nu = split((FormatDateTime(Now, vbShortTime)), ":")
'træk den overflødige tid fra
tid(0) =  cint(nu(0)) - cint(tid(0))
tid(1) =  cint(nu(1)) - cint(tid(1))
'Beregn nytid oveni registreret tid
if minutter < 0 then
tid(1) = cint(tid(1)) + cint(60)
tid(0) = cint(tid(0)) - cint(1)
end if
strtimer = clng(tid(0)) + clng(regtid(0))
minutter = clng(tid(1)) + clng(regtid(1))
'hvis minutter (tid1) er en minus værdi omregn til timer

'Hvis minutter er mere end 60 læg 1 oveni timer
if minutter => cint(60) then
minutter = cint(minutter) / cint(60)
minutter = Cstr(minutter)
minutter = split(minutter, ",")
strtimer = clng(timer) - cint(1)
minutter = Left(minutter(1), 2)
elseif minutter(1) = 0 then
minutter(1) = "0"
end if

Response.Write "du var på i " & tid(0) & " timer, og " & tid(1) & " minutter."
strSQL = "Update Brugere set "
strSQL = strSQL & "Onlinetid= '" & strtimer & ":" & minutter & "' "
strSQL = strSQL & " Where Bruger = '" & session("bruger") & "'"
Conn.Execute strSQL

Session.Abandon

%>
Avatar billede keysersoze Ekspert
14. oktober 2003 - 16:20 #17
det var ikke session.lcid jeg spurgte om - såmen bare hvad du gemte af tid (men går ud fra at det er tt:mm:ss?

i stedet for alle de underlige underlige udregninger du laver - hvorfor bruger du så ikke bare (som jeg også foreslog i det sidste spm.) at benytte funktionen datadiff;

Days from today: " & DateDiff("d", Now, theDate)

så kan du bare tage minutter (n) i stedet for dage og benytte det - det lyder meget mere optimalt
Avatar billede nidyahou Praktikant
14. oktober 2003 - 16:27 #18
det prøvede jeg i starten men det var jo alt for besværligt, desuden hvis du kigger i databasen står der jo også 123 istedet for 2:03
Avatar billede nidyahou Praktikant
14. oktober 2003 - 16:34 #19
og desuden, hvorfor skulle det være lettere så skal det jo deles med 60 hver gang man skal vise det, og det laver rod i længden
Avatar billede nidyahou Praktikant
14. oktober 2003 - 16:37 #20
og jeg bruger formatedate shorttime
Avatar billede keysersoze Ekspert
14. oktober 2003 - 16:44 #21
det er netop ikke mere besværligt - hvis du gemmer antal sekunder kan du let tage modulus af det (= antal timer) og den resterende mængde er sekunder.

Det er betydeligt sværere at gemme 2:03 og lave regnestykker med det (fx 2:03 + 0:57) end det er at lave regnestykker med reelle tal (fx 123 + 57). Du slipper altså for en masse split (som måske alligevel ikke giver noget resultat), du slipper for at arbejde med landekodeting samt danne en masse variabler som du er i gang med...
Avatar billede nidyahou Praktikant
14. oktober 2003 - 16:57 #22
det er da netop split jeg IKKE slipper for... gider du kigge på en skærm hvor der står:
hej bruger, du har været på i 24,1238561233 timer og 221,12356 minutter
Avatar billede keysersoze Ekspert
14. oktober 2003 - 17:02 #23
men ovenstående vil du da heller aldrig komme ud for hvis du regner i sekunder og bruger modulus?
Avatar billede nidyahou Praktikant
14. oktober 2003 - 21:20 #24
aha modulos.. hvad er det =) ?
Avatar billede keysersoze Ekspert
15. oktober 2003 - 00:04 #25
faktisk behøver du ikke engang at bruge modulus - du kan nøjes med at dividere dine sekunder men X for timer uden beregning af decimaltal, og derefter dividere den resterende mængde med med Y for minutter også uden beregning af decimaler. fx;

465765 sekunder

465765 / 3600 = 129 timer
rest = 1365
1365 / 60 = 22 minutter
Avatar billede nmh Nybegynder
15. oktober 2003 - 00:45 #26
Brug heltalsdivision:
AntalSekundere=465765
Timer=AntalSekunder \ 3600=129
rest=AntalSekunder-3600*Timer=1365
minutter=rest \ 60=22
sekunder=rest-minutter*60=45
Avatar billede nidyahou Praktikant
15. oktober 2003 - 12:25 #27
jeg har nu ændret til:
strSQL = "Select * From Brugere Where Bruger = '" & session("bruger") & "'"
set rs = Conn.Execute (strSQL)

'Hent data uredigeret
regtid = split(rs("Onlinetid"), ":")
Sekunder = DateDiff("s",session("sidstlog"), Now)
'Udregninger
Timer = Sekunder \ 3600
rest = Sekunder-3600*Timer
Minutter = rest \ 60
sekunder = rest-minutter*60
'Beregn nytid oveni registreret tid
SamlTimer = Timer + regtid(0)
SamlMinutter = Minutter + regtid(1)
'Opdater de gamle oplysninger
Response.Write "du var på i " & Timer & " timer, og " & Minutter & " minutter."
strSQL = "Update Brugere set "
strSQL = strSQL & "Onlinetid= '" & SamlTimer & ":" & SamlMinutter & "' "
strSQL = strSQL & " Where Bruger = '" & session("bruger") & "'"
Conn.Execute strSQL

og får fejl i linje 25 (den med Datediff):
Microsoft VBScript runtime (0x800A0006)
Overflow: '[number: 3275337778]'
Avatar billede nidyahou Praktikant
15. oktober 2003 - 12:35 #28
nu hedder scriptet:
'Hent data uredigeret
regtid = split(rs("Onlinetid"), ":")
Min = DateDiff("n", Now, session("sidstlog"))
'Udregninger
strTimer = Min \ 60
rest = Min-60*strTimer
Minutter = rest
'Beregn nytid oveni registreret tid
SamlTimer = strTimer + regtid(0)
SamlMinutter = Minutter + regtid(1)
'Opdater de gamle oplysninger
Response.Write "du var på i " & strTimer & " timer, og " & Minutter & " minutter."
strSQL = "Update Brugere set "
strSQL = strSQL & "Onlinetid= '" & SamlTimer & ":" & SamlMinutter & "' "
strSQL = strSQL & " Where Bruger = '" & session("bruger") & "'"
Conn.Execute strSQL

men den laver usandsynlige høje tal
Avatar billede keysersoze Ekspert
15. oktober 2003 - 12:41 #29
prøv til at starte med at udskrive variablen "Min" og find ud af hvad den giver af resultat - så kan du se om det allerede er der eller det er før
Avatar billede nidyahou Praktikant
15. oktober 2003 - 13:34 #30
har jeg været på i 1 min returnerer Min/Datediff:
54588961
Avatar billede keysersoze Ekspert
15. oktober 2003 - 13:43 #31
allerede der er det jo så forkert...

så må du prøve at se hvad der står i Now og i din session
Avatar billede nidyahou Praktikant
15. oktober 2003 - 13:55 #32
det var fordi at min session kørte stadig på formatedate, men nu står der 60 min istedet for 1 time og 0 min
Avatar billede keysersoze Ekspert
15. oktober 2003 - 14:21 #33
så find ud af hvor i udregningen det går galt - udskrive din variabler hele tiden så du selv kan følge med
Avatar billede nidyahou Praktikant
15. oktober 2003 - 14:27 #34
jamen jeg ved hvor det går galt, jeg kan bare ikke finde en måde at rette det på se på det her:
'Hent data uredigeret
regtid = split(rs("Onlinetid"), ":")
Min = DateDiff("n", session("sidstlog"), Now)
'Udregninger
strTimer = Min \ 60
plusTimer = strTimer + regtid(0)
Minutter = Min-60*plusTimer
plusmin = Min + regtid(1)

'Færdige resultat
SamlTimer = plusTimer
SamlMinutter = plusmin-60*plusTimer

men det går jo galt fordi plusTimer = 0
Avatar billede keysersoze Ekspert
15. oktober 2003 - 14:43 #35
så er det fordi du er dårlig til regning ;)
Avatar billede nidyahou Praktikant
15. oktober 2003 - 14:47 #36
nej men hvad skal jeg gøre ??? kan du ikke se at det altid vil blive 0 medmindre du har været på 1 time
Avatar billede nidyahou Praktikant
15. oktober 2003 - 14:47 #37
1 time i TRÆK
Avatar billede keysersoze Ekspert
15. oktober 2003 - 14:48 #38
det er nok de hårdeste 10 point ever...

i dit eksempel - hvad er "regtid" og hvad er "min"?
Avatar billede nidyahou Praktikant
15. oktober 2003 - 14:51 #39
min er den nye tid, regtid er den gamle REGistrerede tid

jeg kanlder 20 point oveni
Avatar billede nidyahou Praktikant
15. oktober 2003 - 16:43 #40
'Hent data uredigeret
regtid = split(rs("Onlinetid"), ":")
Min = DateDiff("n", session("sidstlog"), Now)
'Udregninger
strTimer = Min \ 60
plusTimer = strTimer + regtid(0)
plusTimer1 = plusTimer
if plusTimer1 = "0" then
plusTimer1 = "1"
end if
plusmin = Min + regtid(1)
Minutter = plusmin-60*plusTimer1

'Færdige resultat
SamlTimer = plusTimer
SamlMinutter = plusmin-60*plusTimer

men det virker ikke
Avatar billede nidyahou Praktikant
15. oktober 2003 - 17:00 #41
findes der ikke en funktion som auto matisk kan omformatere oplysninger til tider hvis man bare giver det et tal som 2131636, som datediff jo f.x udgiver
Avatar billede keysersoze Ekspert
15. oktober 2003 - 17:00 #42
jaaa - men hvad INDEHOLDER de af værdier - det kan jeg jo ikke se
Avatar billede nidyahou Praktikant
15. oktober 2003 - 17:03 #43
i databasen står x1:x2 hvor x1 er timer og x2 er minutter
Avatar billede nidyahou Praktikant
15. oktober 2003 - 18:46 #44
i need your expertize guys
Avatar billede keysersoze Ekspert
15. oktober 2003 - 18:56 #45
du svarer ikke på det jeg spørger om... du har gang i et eksempel hvor du siger at du for et helt usandsynlige høje tal, og det er det eksempel jeg tager udgangspunkt i.

hvad har du af tal i de forskellige variabler undervejs i den udregning?
Avatar billede nidyahou Praktikant
16. oktober 2003 - 13:16 #46
jeg forstår ikek hvad det er du siger?
Avatar billede keysersoze Ekspert
16. oktober 2003 - 13:34 #47
du siger at du får nogle urimelig højre tal efter at du har været online i 1 minut... så må du da udskrive nogle variabler undervejs så du kan se hvor det går galt henne!

de variabel-værdier du får udskrevet kan du prøve at poste her så jeg kan se hvilke tal du regner med i stedet for at jeg kun har resultatet at gå ud fra
Avatar billede nidyahou Praktikant
16. oktober 2003 - 22:06 #48
det kommer jo an på hvor mange minutter brugeren har været online
Avatar billede nidyahou Praktikant
16. oktober 2003 - 22:12 #49
det hjælper keine den udskriver bare det den skal
Avatar billede nidyahou Praktikant
16. oktober 2003 - 22:13 #50
problemet er hvis 60 min skal laves om til 1 time
Avatar billede nidyahou Praktikant
16. oktober 2003 - 22:47 #51
jeg har fundet noget der måske virker det ser sådan her ud:

'Hent data uredigeret
regtid = split(rs("Onlinetid"), ":")
Min = DateDiff("n", session("sidstlog"), Now)
'Udregninger
plusmin = Min + regtid(1)
strTimer = Min \ 60
plusTimer = plusmin \ 60
plusTimer = plusTimer + regtid(0)
plusmin = plusmin-60*plusTimer *****
Minutter = Min-60*strTimer
'Færdige resultat
SamlTimer = plusTimer
SamlMinutter = plusmin


det eneste problem er ved linjen med ****, for det er klart at når plustimer er over 0 og plusmin er 3 så hedder det jo 3-60*1 og det gir -57 så hvordan laver jeg så den kan blive normal, håber i forstår hvad jeg mener
Avatar billede keysersoze Ekspert
18. oktober 2003 - 22:15 #52
så hvad bliver normal?
Avatar billede nidyahou Praktikant
19. oktober 2003 - 18:07 #53
så den udregning bliver normal, så jeg kan lave en udregning der duer
Avatar billede keysersoze Ekspert
20. oktober 2003 - 09:42 #54
jeg forstår ikke udregningen så jeg kan ikke være med til at gøre den normal... for mig at se virker den ret underlig
Avatar billede nidyahou Praktikant
20. oktober 2003 - 13:15 #55
regtid = split(rs("Onlinetid"), ":")
Min = DateDiff("n", session("sidstlog"), Now) < her får vi gjort forskellen op i minutter som gir f.x 67
'Udregninger
plusmin = Min + regtid(1) < her plusser vi 67 oveni den tid der i forvejen er
strTimer = Min \ 60 < her deler vi de nye minutter med 60
plusTimer = plusmin \ 60 < her deller vi sammenlagte minutter med 60
plusTimer = plusTimer + regtid(0) < resultatet ovenover + de registrerede timer
plusmin = plusmin-60*plusTimer < det færdige resultat af minutter
Minutter = Min-60*strTimer < det nye minuttal
'Færdige resultat
SamlTimer = plusTimer
SamlMinutter = plusmin
Avatar billede nidyahou Praktikant
22. oktober 2003 - 17:27 #56
lukker det her og prøver at oprette, med en anden forklaring
Avatar billede keysersoze Ekspert
22. oktober 2003 - 18:52 #57
god fornøjelse... forklaring behøves i hvert fald
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