Skjemaet eller rapporten som er bundet til en lagret prosedyre eller en funksjon gjelder ikke WHERE-betingelse

Moderat: Krever grunnleggende makroer, koding og interoperabilitet ferdigheter.


Denne artikkelen gjelder bare for Microsoft Access-prosjekt (ADP).


Symptomer

Filteret brukes ikke når du forsøker å filtrere et Access-skjema eller en rapport ved hjelp av en verdi som vises på et annet objekt, for eksempel en annen Microsoft Access-skjema.

Løsning

Det finnes flere metoder du kan bruke til å løse manglende evne til å filtrere et skjema eller en rapport som er bundet til en lagret prosedyre eller funksjon. De fleste av disse løsningene omfatter å erstatte den lagrede prosedyren eller funksjonen med en annen type postkilde, for eksempel en tabell, en visning eller en SQL-setning.

Imidlertid viser følgende løsning deg hvordan du kan fortsette å bruke en lagret prosedyre som postkilde for et skjema mens vellykket implementering av en WHERE-setningsdelen eller filter.

FORSIKTIG: Hvis du følger trinnene i dette eksemplet, endrer du eksempelprosjektet GastronorCS.adp. Du bør sikkerhetskopiere filen NorthwindCS.adp, og følge denne fremgangsmåten på en kopi av prosjektet.

  1. Åpne eksempelprosjektet GastronorCS.adp.

  2. Klikk for å merke tabellen kategorier i Database-vinduet, og klikk deretter Autoskjema på Sett inn -menyen.

    Obs! Hvis du bruker Access 2007, klikk for å merke tabellen kategorier i database-vinduet, og klikk deretter skjema i gruppen skjemaer i kategorien Opprett .

  3. Åpne skjemaet i utformingsvisning.

  4. Slett delskjemaobjektet som heter tabell.varer fra hovedskjemaet, og deretter legge til en kommandoknapp i skjemaet. Hvis veiviseren starter, klikker du Avbryt.

  5. Angi følgende egenskaper for kommandoknappen:
    Name: cmdFilterProducts
    Caption: Filter Products
    On Click: [Event Procedure]

  6. Egenskapen OnClick for kommandoknappen til følgende hendelsesprosedyre:

    Private Sub cmdFilterProducts_Click()
    DoCmd.OpenForm "Products", acNormal, , , acFormEdit, acWindowNormal
    End Sub
  7. Klikk Lukk og gå tilbake til Microsoft Accesspå fil -menyen.

  8. Klikk Lagrepå fil -menyen, og lagre skjemaet som Categories1.

    Obs! Klikk Lagrepå verktøylinjen for Hurtigtilgang .

  9. I databasevinduet klikker du spørringer, og klikk deretter Ny.

    Obs! Hvis du bruker Access 2007, klikker du Veiviser for spørring i andre -gruppen i kategorien Opprett .

  10. Klikk Opprett tekstlagringsprosedyrei dialogboksen Ny spørring og deretter OK.

  11. Skriv inn eller Lim inn følgende Transact-SQL-setningen, og lukke og lagre prosedyren med standardnavnet på spProducts:

    CREATE PROCEDURE spProducts
    @CatID int
    AS
    SELECT * FROM Products WHERE CategoryID = @CatID
    RETURN
  12. Åpner du produktskjemaet i utformingsvisning og endre deretter egenskapen Postkilde fra produkter til spProducts.

  13. Ruller du ned til egenskapen InputParameters i skjemaet, og deretter tilordne følgende verdi for denne egenskapen:

    Int @CatID = Forms! [Categories1]! [KategoriID]

  14. Lukk og lagre varer-skjemaet, og deretter åpne skjemaet Categories1.

  15. Bla til kategorinavn Confections, og klikk deretter Filter-produkter . Merk at produkter-skjemaet åpnes og viser bare de varene der kategorien er lik Confections.

Status

Denne virkemåten er standard.

Hvis du vil ha mer informasjon

Ofte, vil en bruker med tilgang til å begrense antall poster som vises i et Access-skjema eller en rapport. Én metode for å gjøre dette er å filtrere poster i skjemaet (eller rapport) med en WHERE-betingelse og du bruker et annet objekt for å angi betingede verdien. Et skjema kan for eksempel vise en betinget verdi som skal brukes av et annet skjema for å begrense antall poster som skal vises. Hvis du prøver å filtrere skjemaet har en lagret prosedyre eller funksjon som postkilde, ignoreres imidlertid filteret. Trinnene nedenfor illustrerer denne atferden.

FORSIKTIG: Hvis du følger trinnene i dette eksemplet, endrer du eksempelprosjektet GastronorCS.adp. Du bør sikkerhetskopiere filen NorthwindCS.adp, og følge denne fremgangsmåten på en kopi av prosjektet.

Fremgangsmåte for å gjenskape problemet i Access 2003

  1. Følg trinn 1 til 5 i delen "Løsning" tidligere i denne artikkelen.

  2. Egenskapen OnClick for kommandoknappen til følgende hendelsesprosedyre:

    Private Sub cmdFilterProducts_Click()
    DoCmd.OpenForm "Products", acNormal, , "[CategoryID] = " & Me!CategoryID, acFormEdit, acWindowNormal
    End Sub
  3. Klikk Lukk og gå tilbake til Microsoft Accesspå fil -menyen.

  4. Klikk Lagrepå fil -menyen, og lagre deretter skjemaet som Categories1.

  5. Åpne skjemaet i skjemavisning.

  6. Bla til kategorinavn Confections, og klikk deretter Filter-produkter . Merk at produkter-skjemaet åpnes og viser bare de varene der kategorien er lik Confections.

  7. Lukk produkter og Categories1 skjemaer.

  8. I databasevinduet klikker du spørringer, og klikk deretter Ny. Klikk Opprett tekstlagringsprosedyre, og klikk deretter OK.

  9. Skriv inn eller Lim inn følgende Transact-SQL-setningen, og lukke og lagre prosedyren med standardnavnet på spProducts:

    CREATE PROCEDURE spProducts
    AS
    SELECT * FROM Products
    RETURN
  10. Åpner du produktskjemaet i utformingsvisning og endre deretter egenskapen RecordSource fra produkter til spProducts.

  11. Lukk og lagre varer-skjemaet, og deretter åpne skjemaet Categories1.

  12. Bla til kategorinavn Confections, og klikk deretter Filter-produkter . Merk at produkter-skjemaet åpnes og viser alle produkter i stedet for bare de produktene i kategorien Confections.

Trenger du mer hjelp?

Utvid ferdighetene dine
Utforsk opplæring
Vær først ute med de nye funksjonene
Bli med i Microsoft Insiders

Var denne informasjonen nyttig?

Hvor fornøyd er du med kvaliteten på oversettelsen?

Hva påvirket opplevelsen din?

Har du ytterligere tilbakemeldinger? (valgfritt)

Takk for tilbakemeldingen!

×