Avatar billede h_s Forsker
28. marts 2003 - 20:11 Der er 18 kommentarer og
1 løsning

Udregning af km/Timen og tid/km

Jeg er ved at lave en database til at holde styr på mine løbeture og har brug for at kunne udregne Kilometer i timen og hastighed i timen.
Jeg har tiden langt klokkesletformat 00:00:00 og kilometer i en anden tabel som Tal med 2 decimaler. Jeg vil allerhelst kunne udregne Km/T og Tid/km via en forespørgsel, da jeg skal bruge løsningen i mange formularer og rapporter.
Er der nogen der kan hjælpe mig?
Avatar billede arne_v Ekspert
28. marts 2003 - 21:02 #1
Prøv med de her 2 VB funktioner:

Function kmt(km As Integer, time As Variant) As Integer
    Dim s As Long
    s = Hour(time) * 3600 + Minute(time) * 60 + Second(time)
    kmt = (3600 * km) / s
End Function

Function minkm(km As Integer, time As Variant) As Integer
    Dim s As Long
    s = Hour(time) * 3600 + Minute(time) * 60 + Second(time)
    minkm = s / (km * 60)
End Function
Avatar billede sjap Praktikant
28. marts 2003 - 21:15 #2
Du kan lave en forespørgsel, der ser nogenlunde sådan her ud:

SELECT tblKilometer.Dato, tblKilometer.Afstand, tblTid.Tid, [Afstand]/([Tid]*24) AS Hastighed, ([Tid]*24*60)/[Afstand] AS Tidsforbrug
FROM tblKilometer INNER JOIN tblTid ON tblKilometer.Dato = tblTid.Dato;

Der er forudsat to tabeller:

tblKilometer: Dato Afstand
tblTid:      Dato Tid

hvor DATO feltet i de to tabeller relaterer sig til hinanden.

Enheden på Hastighed er km/time og enheden på Tidsforbrug er minutter/km
Avatar billede sjap Praktikant
28. marts 2003 - 21:17 #3
Det virker umiddelbart lidt klodset at Afstand og Tid ligger i hver sin tabel. Er der nogen speciel grund til det? Hvis ikke så vil jeg anbefale at de lægges ind i den samme tabel.
Avatar billede h_s Forsker
28. marts 2003 - 21:31 #4
superjap: Ja der er en årsag: Jeg har en tabel med ruter jeg løber og en med løbeturene. Er det ikke smartest!!??
Avatar billede h_s Forsker
28. marts 2003 - 21:33 #5
Superjap: 21:15:54: Det er ikke datoen, der binder de to tabeller sammen, men ruten. Når jeg opretter en løbetur vælger jeg en rute.
Avatar billede h_s Forsker
28. marts 2003 - 22:08 #6
arne_v 21:02:56 > Hvor skal jeg bruge VB funktionerne? Kan du give mig en step by step vejledning til hvordan jeg skal gøre?
vh h_s
Avatar billede arne_v Ekspert
28. marts 2003 - 22:13 #7
De VB funktioner er mere generelle utilities.

D.v.s. du kan lave:

SELECT km,tid,kmt(km,tid),minkm(km,tid) FROM kmtabel,tidtabel WHERE kmtabel.x = tidtabel.x;
Avatar billede arne_v Ekspert
28. marts 2003 - 22:14 #8
Jeg synes at det er pænt at gemme den funktionalitet over i en
VB funktion.
Avatar billede arne_v Ekspert
28. marts 2003 - 22:15 #9
Du vil nok iøvrigt hellere have dem med decimaler:

Function kmt(km As Double, time As Variant) As Double
    Dim s As Long
    s = Hour(time) * 3600 + Minute(time) * 60 + Second(time)
    kmt = (3600 * km) / s
End Function

Function minkm(km As Double, time As Variant) As Double
    Dim s As Long
    s = Hour(time) * 3600 + Minute(time) * 60 + Second(time)
    minkm = s / (km * 60)
End Function
Avatar billede h_s Forsker
28. marts 2003 - 22:40 #10
Nu har jeg fået noget at arbejde videre med. Jeg vender tilbage, når jeg enten har løst problemet eller har brug for mere hjælp.

vh. h_s
Avatar billede sjap Praktikant
28. marts 2003 - 22:48 #11
Hvis det er ruten, der binder de to tabeller sammen, kan du jo ganske enkelt lave forespørgslen om til

SELECT tblRute.Afstand, tblTid.Tid, [Afstand]/([Tid]*24) AS Hastighed, ([Tid]*24*60)/[Afstand] AS Tidsforbrug
FROM tblRute INNER JOIN tblTid ON tblRute.RuteNr = tblTid.RuteNr;
Avatar billede sjap Praktikant
01. april 2003 - 19:38 #12
h_s har oplyst de korrekte tabel og feltnavne, hvorefter jeg har ændret forslaget til

SELECT Løbeture.Løbetur, Løbeture.Dato, Løbeture.Rutenummer, Ruter.Kilometer, Løbeture.Tid, [Kilometer]/([Tid]*24) AS Hastighed, ([Tid]*24*60)/[Kilometer] AS Tidsforbrug
FROM Ruter RIGHT JOIN Løbeture ON Ruter.Rutenummer = Løbeture.Rutenummer;

Så mangler der bare lidt reaktion fra h_s
Avatar billede h_s Forsker
01. april 2003 - 20:56 #13
superjap 19:38:50 > Ja, så er jeg kommet til dette spørgsmål - Uha, man skal godt nok passe på man ikke får sat for mange ting igan på en gang!!!
Nå, men den SELECT-ting du har skrevet, kan jeg bruge den i en forespørgsel, og i givet fald, hvor og hvordan skal den skrives? Jeg får en fejl - noget med syntaksen og paranteserne er forkert!!
Avatar billede sjap Praktikant
01. april 2003 - 21:23 #14
Opret en ny query (i designvisning). Lad være med at tilføje nogen tabeller.

Når du så står i designvinduet vælger du menuen Vis/SQL-visning. Så er du faktisk i forespørgslens SQL editor (du kan også vælge det med en af dine eksisterende forespørgsler, så kan du se hvordan det ser ud).

Så kopierer du faktisk blot mit forslag (fra kl. 19:38:50) ind her og prøver at køre forespørgslen.

SQL sætningen virker hos mig, så der er ikke problemer med parenteser eller lignende.
Avatar billede h_s Forsker
01. april 2003 - 23:01 #15
Superjap> Det virker faktisk, men der er et enkelt problem/udfordring: Når ud udregner "hastighed" regnes der med at ikke taget højde for at der kun er 60 sekunder i et minut. Beregningen regner med 100 sekunder i et minut. Det giver sig udtryg ved at når beregningen viser at det tager4,50 minut pr km. er det ikke 4 muínutter og 50 sekunder men 4 minutter og 30 sekunder (50% af 60 sekunder) Jeg kan ikke gennemskue om det også er galt i minutter, men noget kunne tyde på det. Kan dette problem løses?
Avatar billede sjap Praktikant
01. april 2003 - 23:07 #16
Du kan ændre beregningen af tidsforbrug til [Tid]/[Kilometer]. Så får du resultatet i Access datotidsformat. Så skal du blot formatere feltet i formularen til f.eks. nn:ss.

SELECT Løbeture.Løbetur, StrConv(Format([Dato],"dddd"),3) AS Dag, Løbeture.Rutenummer, Ruter.Kilometer, Løbeture.Tid, [Kilometer]/([Tid]*24) AS Hastighed, [Tid]/[Kilometer] AS Tidsforbrug
FROM Ruter RIGHT JOIN Løbeture ON Ruter.Rutenummer = Løbeture.Rutenummer;
Avatar billede sjap Praktikant
01. april 2003 - 23:21 #17
Hvis du gerne vil se resultatet direkte i forespørgslen kan du jo også bare bruge funktionen format:

Tidsforbrug: Format([Tid]/[Kilometer];"nn:ss")

SELECT Løbeture.Løbetur, StrConv(Format([Dato],"dddd"),3) AS Dag, Løbeture.Rutenummer, Ruter.Kilometer, Løbeture.Tid, [Kilometer]/([Tid]*24) AS Hastighed, Format([Tid]/[Kilometer],"nn:ss") AS Tidsforbrug
FROM Ruter RIGHT JOIN Løbeture ON Ruter.Rutenummer = Løbeture.Rutenummer;
Avatar billede sjap Praktikant
02. april 2003 - 21:15 #18
Haaallooooo - er der nogen hjemme?  :-)
Avatar billede h_s Forsker
03. april 2003 - 14:12 #19
Ja, jeg er hjemme, men jeg skal jo lige have mulighed for at finde ud af om det virker :-) Og det gør det!! Tak Superjap
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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