Ved et gennemløb vil jeg vise et resultat med en tekstboks som viser et antal minutter +tekst eller en tekst, afhængig af rækkeXFra - (rækkex-1)Til --> Vises ud for rækkeX
Tabellen: Fra Til nyt felt Række1 08:00 09:00 Ingen ledig tid Række2 09:05 09:30 5 minutter ledig Række3 09:25 10:00 5 minutter overlap Række4 10:00 11:00 Ingen ledig tid
Jeg havde tænkt, at vise variablen med et tekstfelt i rapporten.
'Jeg ville lave en foresp. på din tabel med de 3 første felter og beregne det 4. felt vha en function i VBA
Function res(fra As Date, til As Date) As String Dim minut As Integer minut = Minute(fra - til) If minut = 60 Then res = "Ingen ledig tid" Else res = 60 - minut & " minutter ledig" End If End Function
foresp: select fra, til, (res(fra,til))as nytfelt from dinTabel
Så returnerer den enten inting, eller #fejl eller en fejl om at typerne er forskellige. Tanken er, at den skal tage "fra" fra den aktuelle record minus "til" fra den forrige resord.
fra+til er iøvrigt af typen dato klokkeslet (XP DK)
Sub bygResTabel() Dim db As DAO.Database Dim rsTid As DAO.Recordset Dim rsRes As DAO.Recordset Dim sidsteTil As Date Dim ekstraTid As Integer
Set db = CurrentDb db.Execute "delete * from tblres" Set rsTid = db.OpenRecordset("SELECT * FROM tblTid ORDER BY fra;") Set rsRes = db.OpenRecordset("tblRes")
Do While Not rsTid.EOF
rsRes.AddNew rsRes!fra = rsTid!fra rsRes!til = rsTid!til If Not sidsteTil = 0 Then ekstraTid = Minute(rsTid!fra - sidsteTil) If ekstraTid = 0 Then rsRes!Tekst = "Ingen ledig tid" ElseIf rsTid!fra < sidsteTil Then rsRes!Tekst = ekstraTid & " Minutter overlap" ElseIf rsTid!fra > sidsteTil Then rsRes!Tekst = ekstraTid & " Minutter ledig tid" End If Else rsRes!Tekst = "Ingen ledig tid" End If
sidsteTil = rsTid!til rsRes.Update rsTid.MoveNext Loop End Sub
Løsningen kunne være at lade din rapport bygge på en temptabel tblRes med felterne fra, til og tekst Koden ovenfor kopiere fra og til felterne fra den oprindelige tabel tblTid og indsætter minutberegningerne i tekstfeltet.
Det er lidt ud over mit niveau i VB & Access, kan du give en kort step-by-step. Jeg kan ikke læse mig til om temptabellerne bliver oprettet aut. og jeg har ingen idé om, hvordan jeg får felter og resultat ind i en foresp. eller rapport
du skal have en tabel "tblTid" med 2 felter: fra og til (dato klokkeslet)
og så skal du have en anden tabel "tblRes" med 3 felter fra, til og tekst
Jeg forudsætter du indtaster tiderne i tblTid
Hver gang min kode kører slettes alle poster i tblRes i linjen: db.Execute "delete * from tblres" Dernæst åbnes de 2 tabeller i linjerne: Set rsTid = db.OpenRecordset("SELECT * FROM tblTid ORDER BY fra;") Set rsRes = db.OpenRecordset("tblRes") tabellen tbltid løbes igennem række for række og tiderne kopieres ind i tblRes PLUS feltet tekst som tilskrives en tekst alt efter om 'sidsteTil' er lig den nuværende 'fra' ELLER større end ELLER mindre end.
Du kan afprøve koden ved at oprette de to tabeller med de rigtigenavne og rigtige felter. Min kode kopieres ind i et nyt modul og med cursoren stående i koden kan du gennemløbe koden vha F5 eller trinvis F8
Til sidst skal jeg sige at Access IKKE er god til at regne med den "sidste værdi" - man skal være sikker på rækkefølgen af posterne og programmere sig ud af det som jeg her har prøvet.
Du kan også lave det i ren SQL, men den synes jeg er svær at forstå - Jeg prøver dog alligevel:
select t1.fra, t1.til, null as Minut from tbltid as t1 Where fra = ( select min(fra) from tbltid ) UNION ALL SELECT t1.fra, t1.til, cint((T2.til - t1.fra)*1440) AS Minut FROM tbltid AS T1 , tbltid AS T2 WHERE T2.til = ( SELECT Max(til) FROM tbltid where til<T1.til ) ORDER BY fra;
Der er ingen nem måde at gøre dette på, desværre :(
Hej Niels, En lidt sen tilbagemelding....sorry, men jeg var faktisk ved at generere en sql a la din - det forstår jeg mig noget bedre på, men den er umiddelbart noget "tungere" en den løsning du gav først. Men jeg prøver mig lidt frem, nu er jeg da på rette spor!.
Tak for hjælpen
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.