Avatar billede fiffi Novice
01. september 2005 - 18:26 Der 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.
Avatar billede kjulius Novice
02. september 2005 - 00:07 #1
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.
Avatar billede 2dbornot2db Nybegynder
02. september 2005 - 03:26 #2
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
Avatar billede fiffi Novice
02. september 2005 - 07:08 #3
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 !
Avatar billede 2dbornot2db Nybegynder
02. september 2005 - 15:19 #4
Svar :-)
Avatar billede sjap Praktikant
02. september 2005 - 22:13 #5
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;
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