Formularz lub raport, który jest powiązany z procedury przechowywanej lub funkcji nie dotyczy warunek WHERE

Poziom Średni: Wymaga podstawowych makro, kodowania i umiejętności interoperacyjności.


W tym artykule dotyczą tylko projektu programu Microsoft Access (.adp).


Objawy

Podczas próby filtrowania dostępu do formularza lub raportu przy użyciu wartości wyświetlanych na innego obiektu, takiego jak innego formularza programu Access, filtr nie jest stosowana.

Rozwiązanie

Istnieje kilka metod, których można używać Aby rozwiązać niezdolność do filtrowania formularza lub raportu, który jest powiązany z procedury przechowywanej lub funkcji. Większość tych rezolucji obejmują zastąpienie procedura składowana lub funkcja innego rodzaju źródła rekordów, takich jak tabela, widok lub instrukcji SQL.

Jednak następującego rozwiązania pokazuje, jak nadal można użyć procedury składowanej jako źródła rekordów dla formularza podczas wdrażania pomyślnie warunek WHERE lub filtru.

Przestroga: wykonanie kroków opisanych w tym przykładzie, modyfikację przykładowego projektu programu Access NorthwindCS.adp. Można utworzyć kopię zapasową pliku NorthwindCS.adp i wykonaj następujące kroki na kopii projektu.

  1. Otwórz przykładowy projekt NorthwindCS.adp.

  2. W oknie Baza danych kliknij, aby podświetlić tabeli Kategorie, a następnie w menu Wstaw kliknij polecenie Autoformularz .

    Uwaga Jeśli używasz programu Access 2007, kliknij, aby podświetlić tabeli Kategorie w oknie Baza danych, a następnie kliknij formularz w grupie Formularze na karcie Tworzenie .

  3. Otwórz formularz w widoku Projekt.

  4. Usuń obiekt podformularza, o nazwie Table.Products z formularza głównego, a następnie dodać do formularza przycisk polecenia. Jeśli zostanie uruchomiony Kreator, kliknij przycisk Anuluj.

  5. Ustaw następujące właściwości przycisku polecenia:
    Name: cmdFilterProducts
    Caption: Filter Products
    On Click: [Event Procedure]

  6. Właściwość OnClick przycisku polecenia jest ustawiona na następującą procedurę zdarzenia:

    Private Sub cmdFilterProducts_Click()
    DoCmd.OpenForm "Products", acNormal, , , acFormEdit, acWindowNormal
    End Sub
  7. W menu plik kliknij polecenie Zamknij i powróć do programu Microsoft Access.

  8. W menu plik kliknij polecenie Zapisz, a następnie zapisz formularz jako Categories1.

    Uwaga Na pasku narzędzi Szybki dostęp kliknij przycisk Zapisz.

  9. W oknie Baza danych kliknij przycisk kwerendy, a następnie kliknij przycisk Nowy.

    Uwaga Jeśli używasz programu Access 2007 kliknij polecenie Kreator kwerend w grupie inne na karcie Tworzenie .

  10. W oknie dialogowym Nowa kwerenda kliknij przycisk Utwórz tekstową procedurę przechowywaną, a następnie kliknij przycisk OK.

  11. Wpisz lub wklej następującą instrukcję języka Transact-SQL, a następnie zamknij i zapisać procedurę z domyślną nazwą spProducts:

    CREATE PROCEDURE spProducts
    @CatID int
    AS
    SELECT * FROM Products WHERE CategoryID = @CatID
    RETURN
  12. Otwórz formularz produkty w widoku Projekt, a następnie zmień właściwość Źródło rekordów z produktów do spProducts.

  13. Przewiń w dół do właściwość InputParameters formularza, a następnie przypisać do tej właściwości następującą wartość:

    @CatID int = Forms! [Categories1]! [IDKategorii]

  14. Zamknij i Zapisz formularz produktów, a następnie otwórz formularz Categories1.

  15. Przejdź do NazwaKategorii słodycze, a następnie kliknij przycisk Filtr produktów . Należy zauważyć, że formularz produkty otwiera i wyświetla tylko te produkty, gdzie kategoria jest równa słodycze.

Stan

To zachowanie jest zgodne z projektem.

Więcej informacji

Często użytkownika programu Access będzie chcesz ograniczyć liczbę rekordów wyświetlanych na dostęp do formularza lub raportu. Jedną z metod w ten sposób jest, aby filtrować rekordy według formularza (lub raportu) z warunku WHERE i używać innego obiektu warunkowe wartości. Na przykład jeden formularz można wyświetlić warunkowe wartość, która będzie używana przez innego formularza w celu ograniczenia liczby rekordów do wyświetlenia. Jednakże jeśli formularz, który chcesz filtrować ma procedury przechowywanej lub funkcji jako swojego źródła rekordów, filtr jest ignorowany. Następujące kroki ilustrują to zachowanie.

Przestroga: wykonanie kroków opisanych w tym przykładzie, modyfikację przykładowego projektu programu Access NorthwindCS.adp. Można utworzyć kopię zapasową pliku NorthwindCS.adp i wykonaj następujące kroki na kopii projektu.

Kroki do odtworzenia problemu w 2003 r. pulpt

  1. Wykonaj kroki od 1 do 5 sekcji "Rozwiązanie" w tym artykule.

  2. Właściwość OnClick przycisku polecenia jest ustawiona na następującą procedurę zdarzenia:

    Private Sub cmdFilterProducts_Click()
    DoCmd.OpenForm "Products", acNormal, , "[CategoryID] = " & Me!CategoryID, acFormEdit, acWindowNormal
    End Sub
  3. W menu plik kliknij polecenie Zamknij i powróć do programu Microsoft Access.

  4. W menu plik kliknij polecenie Zapisz, a następnie zapisz formularz jako Categories1.

  5. Otwórz formularz w widoku Formularz.

  6. Przejdź do NazwaKategorii słodycze, a następnie kliknij przycisk Filtr produktów . Należy zauważyć, że formularz produkty otwiera i wyświetla tylko te produkty, gdzie kategoria jest równa słodycze.

  7. Zamknij produktów i Categories1 formularzy.

  8. W oknie Baza danych kliknij przycisk kwerendy, a następnie kliknij przycisk Nowy. Kliknij przycisk Utwórz tekstową procedurę przechowywaną, a następnie kliknij przycisk OK.

  9. Wpisz lub wklej następującą instrukcję języka Transact-SQL, a następnie zamknij i zapisać procedurę z domyślną nazwą spProducts:

    CREATE PROCEDURE spProducts
    AS
    SELECT * FROM Products
    RETURN
  10. Otwórz formularz produkty w widoku Projekt, a następnie zmień właściwość RecordSource z produktów spProducts.

  11. Zamknij i Zapisz formularz produktów, a następnie otwórz formularz Categories1.

  12. Przejdź do NazwaKategorii słodycze, a następnie kliknij przycisk Filtr produktów . Zauważ, że formularz produkty otwiera się i wyświetla wszystkie produkty zamiast tylko do tych produktów w kategorii wyrobów cukierniczych.

Potrzebna dalsza pomoc?

Rozwijaj swoje umiejętności
Poznaj szkolenia
Uzyskuj nowe funkcje w pierwszej kolejności
Dołącz do niejawnych testerów firmy Microsoft

Czy te informacje były pomocne?

Jak zadowalająca jest jakość tłumaczenia?

Co wpłynęło na Twoje wrażenia?

Czy chcesz przekazać jakieś inne uwagi? (Opcjonalnie)

Dziękujemy za opinię!

×