28. marts 2003 - 20:11Der 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?
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
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
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.
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
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;
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;
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!!
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.
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?
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;
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;
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
Synes godt om
Ny brugerNybegynder
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.