Avatar billede maxmuldjord Nybegynder
04. marts 2006 - 19:46 Der er 21 kommentarer og
1 løsning

Formattering - sådan af ren lyst til at lære!

Har lige fået kanon hjælp af eagleeye, se evt. http://www.eksperten.dk/spm/692589

Det virker fint nok men jeg vil gerne lære noget mere. Jeg sidder med en lærebog; den siger noget om at man kan anvende eks. FormatDateTime (vbShortTime) til at formattere sin tid. Hvis man tager udgangspunkt i at alle tider er indtastet 1/100 (altså 17.30 = 17.50)og den SQL sætning der udskriver tiden ser således ud; SELECT SUM(timer) AS sumTimer FROM timer" har bogen så ret i at man kan sådan? Jeg har for sjov skyld prøvet man kan ike få det til at virke. det skulle også være muligt at "caste" et numerisk udtryk men man er meget nærig med eksempler. Så derfor; er bogen fuld af p*s eller kan det lade sig gøre?
Avatar billede erikjacobsen Ekspert
04. marts 2006 - 20:18 #1
Hvad siger din bog at feltet timer har som type?  Hvis det er et "tids-komma-tal", hvor 17.50 svarer til en halv time før "Fjernsyn for dig", så burde det virke.
Avatar billede maxmuldjord Nybegynder
04. marts 2006 - 20:50 #2
Ja det siger den ingenting om, en skøjter sådan bare hen over emnet og påstår at sådan er det. Mit felt er sat til tal og ikke dato / tid netop af hensyn til de beregninger jeg ville lave. Som du kan se i den tråd jeg referere til så forsøgte vi med datediff men så kan jeg ikke få en sum ud af det. Som det er nu kan jeg få en sum som jeg så godt kunne tænke mig at formattere. Den kode eagleeye viser er ok, det kan godt bruges men som sagt kunne jeg tænke mig at lære lidt mere. Og det ville jo også se elegant ud med det rigtige format eks 67:30 i sum altså.
Avatar billede erikjacobsen Ekspert
04. marts 2006 - 21:25 #3
Ja, ok, jeg må trække mig tilbage. For microsoft har besluttet at deres dokumentation kun kan ses med IE - i hvert fald ikke den browser jeg bruger nu. Og jeg kan ikke køre IE på denne maskine. Læs selv
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/adaabd2b-250e-4040-9eaa-127f5a41f8b9.asp
Avatar billede eagleeye Praktikant
04. marts 2006 - 21:27 #4
hvis du har et tal me summen i kan du formatere det selv med et par funktioner:


timetal = 67.5  'kan komme fra en sum i et recordset

stime = int(timetal)  'Antal timer
smin = (timetal-stime) * 60  'Antal minutter ganger med 60 for at fjerne kommaet smat konverter 1/100 dele til minutter (100*60/100) 
if len(""&stime) = 1 then stime = "0" & stime 'Sætter 0 foran enkelt tals time
str = stime & ":" & right("0" & smin,2)

response.write str
Avatar billede maxmuldjord Nybegynder
05. marts 2006 - 11:33 #5
Hvis jeg forsøger sådan så kommer  der en fejl for denne kode: stime = int(timetal)  'Antal timer - fejl = Microsoft VBScript runtime  error '800a01ca'

Variable uses an Automation type not supported in VBScrip

Skal jeg forstå det på den måde at vbShortTime ikke kan anvendes i dette tilfælde eller der er grunde til at undgå det?
Avatar billede eagleeye Praktikant
05. marts 2006 - 18:34 #6
Nej det betyder at man ikke kan bruge int omkring prøv at rette int til cint. Det er en MS vbscript fejl som gør Int fejler når man får en bestemt type fra et recordset. Løsninngen er at bruge Cdbl omkring i stedet for:
http://support.microsoft.com/default.aspx/kb/195180


Hvis det er er det kode jeg har vist er det nok i denne linie:

stime = int(timetal)  'Antal timer

Der skal rettes til dette:

stime = cint(timetal)  'Antal timer
Avatar billede eagleeye Praktikant
05. marts 2006 - 18:38 #7
Når man får en fejl kode + beskrivelse er det en god ide at prøve at kopier begge dele og søge på google. Men lidt øvelse kan man rimeligt hurtigt finde svaret eller hjælp til svaret.
Avatar billede maxmuldjord Nybegynder
05. marts 2006 - 19:06 #8
Jeg skal nok se efter på google - eller i alt fald prøve. Jeg har rettet det til cint og så smider den en fejl i næste linie - Type mismatch. Min kode omkring det ser sådan ud:
set objRS = objConn.Execute("SELECT SUM(timer) AS sumTimer FROM timer")
timetal = objRS("sumTimer")
stime = cint(timetal)  'Antal timer
smin = (timetal-stime) * 60  'Antal minutter ganger med 60 for at fjerne kommaet smat konverter 1/100 dele til minutter (100*60/100) 
if len(""&stime) = 1 then stime = "0" & stime 'Sætter 0 foran enkelt tals time
str = stime & ":" & right("0" & smin,2)

og det er denne line smin = (timetal-stime) der laver ballade nu. Men jeg ser da efter om jeg kan hitte rede på det.
Avatar billede erikjacobsen Ekspert
05. marts 2006 - 19:10 #9
Men eagleeye skriver "Løsninngen er at bruge Cdbl omkring i stedet for: "
Avatar billede eagleeye Praktikant
05. marts 2006 - 19:13 #10
Ja man skal havde hel tallet så dur cint som jeg skrev 05/03-2006 18:34:15 ikke da cint runder op hvis komma tals delen er større end 0,5. Så der skal bruges cdbl og så man der sætte int omkring det:

stime = int(cdbl(timetal))  'Antal timer
Avatar billede maxmuldjord Nybegynder
05. marts 2006 - 19:21 #11
ja nu er jeg ikke så god til at gennemskue dette men jeg håber det kommer hen af vejen. Skal jeg også bruge cdbl her? smin = (timetal-stime)? Den brokker sig nemlig stadigvæk over denne linie
Avatar billede eagleeye Praktikant
05. marts 2006 - 19:23 #12
Ja prøv at sætte cdbl omkrig timetal (som kommer fra databasen):
smin = (cdbl(timetal)-stime)...
Avatar billede maxmuldjord Nybegynder
05. marts 2006 - 19:33 #13
Bingo - men nå jeg så udskriver min sum f.eks. 2 timer 15 min som jo rigtigt nok i sumTimer er 2,25 skriver den : 225:00. Det kunne jeg godt have tænkt mig at det var 2:25? Jeg vil lige prøve at se på din kode igen og se om jeg helt forstår hvad det er du gør
Avatar billede maxmuldjord Nybegynder
05. marts 2006 - 19:55 #14
Jeg er ikke helt sikker men jeg formoder at hunden ligger begravet her:
if len(""&stime) = 1 then stime = "0" & stime

Det skulle jo sætte "0" foran enkelttalstimerne og det gør det ikke. Jeg får ingen fejl men som sagt er formatet ikke helt som jeg kunne tænke mig
Avatar billede maxmuldjord Nybegynder
05. marts 2006 - 21:02 #15
hov - kom lige med et svar
Avatar billede eagleeye Praktikant
05. marts 2006 - 21:59 #16
Jeg var lige væk nogle timer :)

Her er et svar.
Avatar billede maxmuldjord Nybegynder
06. marts 2006 - 17:23 #17
Har også været væk 8>) jeg blev kaldt ud. Jeg kører kurer og hastetransporter og det er faktisk det jeg skal bruge det system til jeg er ved at forsøge mig med. Jeg har min bærbar i bilen og så var det min mening at jeg kan indtaste timeforbrug i en webbrowser når en opgave er færdig. Det virker også godt nok nu men jeg kunne godt tænke mig at få det sidste på plads. Jeg har tænkt over  denne :
str = stime & ":" & right("0" & smin,2)

her er jeg ikke rigtigt med på hvad det er du gør og jeg formoder svaret på det jeg gerne vil ligger her?
Avatar billede eagleeye Praktikant
06. marts 2006 - 17:42 #18
Den laver strengen som skal udskrives i formatet tt:mm.

right("0" & smin,2)

Den sikre at minutter udskrives som to tal. Hvis det giver 5 minuter skal der et nul ind foran så det bliver :05 og ikke bare :5. Derfor sættes der altid et 0 ind foran mintterne:
"0" & smin

og right funktionen klipper de 2 karatkter i "0" & smin fra højer mod venstre. Så smin indeholder en karakter bliver den to, indeholder smin to karakter eks "356" så bliver det til "035" men da right kan tager 2 tegn forsvinder det "0" igen så det bliver til "35".
Avatar billede maxmuldjord Nybegynder
06. marts 2006 - 17:56 #19
ok - tak! Jeg må lige tænke over det for at se om jeg kan forstå det. Men det kan godt være at det har været for mange timer på landevejen det sidste døgn. Men jeg ser lige på din forklaring. Mine felter i databasen er sat til decimaltal er det mon derfor den viser 2:25 som 225:00? Der er ingen forskel om jeg indtaster 1300 eller 13.00.
Avatar billede eagleeye Praktikant
06. marts 2006 - 19:24 #20
Umiddelbart kunne det være pga. hvordan den tolker punktum eller komma, hvis du sigder 1300 og 13.00 giver det samme.
Hvordan ser din kode ud lige nu?
Avatar billede eagleeye Praktikant
06. marts 2006 - 19:30 #21
Ja det må være fordi den tolker 13.00 som 1300 det er fordi serveren køre DK format og når man skriver 13.00 tror den der er 1000'skille tegn og ikke decimal skille tegn.

Når du indtaster så skal du havde lavet . om til , inden du gemmer i db'en det kan gøres i koden:

a = replace(request.form("start"),".",",")
Avatar billede maxmuldjord Nybegynder
06. marts 2006 - 19:51 #22
eagleeye er ikke gud men GUDEN 8>)

Hurra - det virker fandme godt set. Det havde jeg aldrig klaret uden eagleeye

Tusind tak!!!!!!
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