01. september 2005 - 18:26Der er
4 kommentarer og 1 løsning
Tildele en placering
Jeg har et løb hvor jeg har en masse løbere der får registreret en tid. Efterfølgende har jeg lavet en forespørgsel hvor jeg sorterer dem i h.h.v. køn, rute og så igen tider, således at jeg kan lave en liste. Jeg vil dog gerne opdatere min løbsdatabase med det placeringsnummer de får. Dette må gerne gøres i en forespørgsel.
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
Det er desværre en af de ting som en forespørgsel ikke er god til. Den kan kun have fat i én row (record) ad gangen, og vil således ikke vide om en kolonne (felt) i denne row (record) er større eller mindre end den foregående, selv hvis du har sat den til at sortere i korrekt orden. Der findes ingen standard SQL funktion til det (RANK?). Du vil teoretisk kunne bruge en selvlavet brugerfunktion, lavet i VBA hvor du sammenligner en indgået værdi med en tidligere indgået værdi, som du har gemt i en variabel defineret som static, og herefter returnere en rangering. Men det er ikke helt let. Bl.a. fordi en sådan funktion også skal kunne håndtere en nulstilling af den gemte værdi ved starten af en forespørgsel.
Det er meget nemmere at udregne det selv i din rapport.
Her er en løsning, der ganske vist ikke kører i en forespørgsel. Du åbner et dynamisk recordset i vba. Recordsettet skal du sortere efter tid. Så løber du recordsettet igennem - én record af gangen - og sætter løbsplaceringen. Noget i denne stil:
dim strSQL as string, RS as DAO.Recordset, lngPlacering as long
strSQL = "SELECT * FROM DinTabel ORDER BY Løbstid DESC"
set RS = CurrentDb.OpenRecordset(strSQL, dbOpenDynamic)
lngPlacering = 0 While not RS.EOF lngPlacering = lngPlacering + 1 RS.edit RS![Løbstid] = n RS.Update RS.Movenext Wend
Tak for hjælpen. Jeg troede man kunne gøre det i en forespørgsel. Jeg har nu lavet en formular hvor jeg - som 2dbornot2db foreslår - gennemløber alle poster. 2dbornot2db vil du give et svar så du kan få dine point !
Du kan faktisk godt gøre det i en forespørgsel. Det kræver blot lidt assistance af funktionen DCount:
SELECT DCount("Løbstid","DinTabel","[Tid]<#" & [Tid] & "#")+1 AS Placering, * FROM DinTabel;
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.