19. februar 2015 - 12:04Der er
7 kommentarer og 1 løsning
Avanceret sortering
Har lige brug for lidt assistance.
Jeg har en tabel bl.a. med informationer om hændelse i én kolonne og et tids stempel i en anden. Hændelsen kan f.eks. Åben: 19-02-2015 01:22:45 Luk: 19-02-2015 01:23:55
Det er let nok at lægge hændelserne i hver sin forespørgsel og herefter udregne tiden for åbning. Problemet er at der kan komme flere "åben" hændelser eller "luk" hændelse efter hinanden, og det i de tilfælde er det sidste (højeste) "Åben" hændelse og den første "Luk" hændelse der skal beregnes. I det tilfælde her er det hændelsen 05:31:33 der skal sorteres væk.
Der er tale om registreringer af en række hændelser i noget produktionsudstyr, hvor en åben hændelse i den ideelle verden gerne skulle blive afløst af en luk hændelse. i ovenstående tilfælde passer de første 2 linjer, der er kommet en åben hændelse og derefter en luk hændelse men i linje 3 mangler der en luk hændelse. Ved analyse at tallene er jeg kommet frem til at åben hændelsen 05:40:23 hænger sammen med luk hændelsen 06:07:00, så i eksemplet her er der en åben hændelse for meget.
Men i så tilfælde ser det jo lidt sort ud ;O( Så er åben- og lukhændelserne jo helt ude af sync.
Det, du efterlyser er så en løsning, hvor alle poster fra-og-med åben hændelsen 05:31:33 skal korrigeres. Du skal jo have flyttet alle lukhændelser "een nedad", så du ender op med at 05:31:33 står alene uden nogen tilhørende lukhændelse.
Men hvor mange poster skal rettes? Det ved vi vel reelt ikke, fordi der kan være flere poster, der er ude af sync. Dit oplæg, som gik på at en hændelse skulle "sorteres væk" ser ud til at være en simplificering af et helt andet (og større) oprydningsarbejde. Der skal skrives noget kode, der kan løbe alle poster igennem og sammenligne de to kolonner og danne en ny, korrekt tabel, hvor de ufuldstændige poster er udeladt. Er det korrekt forstået?
Whoa. Korrektion! Jeg nærlæser lige din beskrivelse og kan nu se, at åben- og lukhændelserne ikke ligger i samme post. Det forvirrede mig at du skrev "i ovenstående tilfælde passer de første 2 linjer ...". Der er jo ikke tale om linjer (poster) i en tabel, men bare to udtræk, som du har sat op ud for hinanden. Jeg ser lige på en lille oprydningsrutine.
... og hvordan forestiller du dig løsningen: - skal vi slette de poster i tabellen, der er overflødige - eller skal de bevares - og i så fald: hvordan skal resultatet præsenteres
OK, hvis posterne må slettes, får du en løsning her. Forudsætter at din tabel hedder "Hændelser" og kolonnerne "Hændelse" og "Kl". Husk lige at tage en kopi af tabellen inden du går amok med nedenstående:
'Markerer dubletter (første "Åben" og sidste "Luk"), sletter markerede poster Sub RydOp() Dim GlType As String Dim Rst As Recordset
GlType = "" Set Rst = CurrentDb.OpenRecordset("Hændelser", dbOpenDynaset) With Rst Do If !Hændelse = "Åben" And GlType = "Åben" Then .MovePrevious .Edit !Kl = #1/1/2001# .Update .MoveNext End If If !Hændelse = "Luk" And GlType = "Luk" Then .Edit !Kl = #1/1/2001# .Update End If GlType = !Hændelse .MoveNext Loop Until .EOF .Close End With Set Rst = Nothing
DoCmd.SetWarnings False DoCmd.RunSQL "DELETE Hændelser.* FROM Hændelser WHERE Kl = #1/1/2001#" DoCmd.SetWarnings True End Sub
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.