Et tilgangsspørsmål som returnerer hver niende post

Tabeller og spørsmål er grunnlaget for enhver Access-database. Tabeller lagrer dataene og spørringene henter dataene vi trenger å se og manipulere. Vanligvis kan kritiske uttrykk håndtere selv de mest komplekse krav, for eksempel å returnere hver niende post. Mange utviklere pleier å bruke en enkel VBA-funksjon, men et kriterieuttrykk kan håndtere akkurat denne oppgaven. En kriterieuttrykksløsning

La oss først se på et kriterieuttrykk som returnerer hver niende post i ordretabellen i Northwind (eksempeldatabasen som følger med Access). Først må du basere et Velg-spørsmål i tabellen Bestillinger, som følger:

Tilgang 2003

Tilgang 2007 og 2010

  1. Velg Bestillinger i databasevinduet.
  2. Velg spørring fra knappen Ny objekt på standardverktøylinjen.
  3. Klikk på Designvisning i dialogboksen Ny spørring.
  4. Klikk OK.
  1. Klikk på Opprett-fanen.
  2. Klikk på Query Design i Queries-gruppen.
  3. Velg Bestillinger fra Tabeller-fanen i dialogboksen Vis tabell.
  4. Klikk Legg til.
  5. Klikk Lukk.

Nå er du klar til å bygge spørringen. Først drar du noen felt til rutenettet: OrderID, CustomerID og EmployeeID. Du kan legge til så mange felt du trenger, men du trenger minst ett felt som unikt identifiserer hver post - et hovednøkkelfelt mest sannsynlig. Når du bruker dette på dine egne spørsmål, må du sørge for at du kan inkludere et slikt felt.

Nå er du klar til å legge til det faktiske kriterieuttrykket som identifiserer hver niende post. Dette uttrykket har følgende form:

DCount(" fieldid ", " table ", " fieldid <= " & fieldid ) Mod n

Mod-operatøren returnerer en verdi for hver post. Oppdater n for å bestemme n . For å returnere hver femte post fra ordretabellen, bruker du for eksempel følgende uttrykk:

DCount("OrderID", "Orders", "OrderID<= " & OrderID) Mod 5

Hvis du bruker Access 2007 og 2010, må du huske å plassere et mellomrom før ID-strengen i hvert feltnavn og omgi feltnavnet i parentes som følger:

DCount("Order ID", "Orders", "Order ID<= " & Order ID) Mod 5

Velg deretter Totaler fra Vis-menyen; i Access 2007 og 2010, klikker du på Summer i Vis / skjul-gruppen i kategorien Design. Sett Total aggregatet til Uttrykk for hver celle unntatt kriteriekolonnen. For den kolonnen, sett Total-aggregatet til Uttrykk. (Bare velg aggregatet fra cellens nedtrekksliste.) Legg deretter til kriteriene 0 i kriteriekolonnens kriteriecelle. Klikk Kjør for å utføre spørringen. En rask titt på OrderID-feltet bekrefter at spørsmålet faktisk henter bare hver femte post. Husk at dette er tabellens primære nøkkelfelt og derfor i rekkefølge.

Som jeg nevnte tidligere, har denne spørringen noen begrensninger:

  • Du trenger en unik verdi for hver post, og disse verdiene må være i rekkefølge.
  • Mange utviklere viker unna DCount () fordi de hevder det er tregt, men andre debatterer som belaster og antyder at en passende indeks er alt som trengs for å forbedre ytelsen.
En VBA-løsning

Hvis du velger å ikke bruke DCount () -løsningen, kan du bruke VBA. Spesielt kaller du en funksjon fra spørringen og bruker Mod-operatøren på funksjonens resultater, på samme måte.

Åpne Visual Basic Editor (VBE) ved å trykke på Alt + F11. Velg Modul fra Sett inn-menyen og angi følgende funksjon:

Function SeqValues(var As Variant) 'Return a sequential column of values for 'nth record query. Static i As Integer i = i + 1 SeqValues = i End Function

Dra deretter OrderID, CustomerID og EmployeeID til nettet, slik du gjorde før. I stedet for å legge inn kriterieuttrykket i den siste løsningen, oppgir du følgende oppfordring til SeqValues ​​():

SeqValues(OrderID) Mod 5

Bruk uttrykket i Access 2007 og 2010

SeqValues(Order ID) Mod 5

Skriv inn 0 i kriteriecellen, som vist nedenfor. I tillegg er ikke dette spørsmålet et Totalsynspunkt. Klikk på Kjør for å utføre spørringen. resultatene er de samme. Samtalen til SeqValues ​​oppretter en liste over sekvensielle verdier, som er det samme som DCount () -funksjonen i den tidligere løsningen gjør.

Hvis dette er en hyppig oppgave for brukere, kan du vurdere å opprette et skjema som lar dem passere den niende verdien og deretter utføre spørringen.

© Copyright 2021 | pepebotifarra.com