Střední: Vyžaduje základní maker, kódování a interoperability dovedností.
Tento článek se týká pouze projektu Microsoft Access (ADP).
Příznaky
Při pokusu o filtrování pomocí hodnotu, která je zobrazena na jiný objekt, například jiný formulář aplikace Access, aplikace Access formuláře nebo sestavy není filtr použit.
Řešení
Existuje několik metod, které jeden mohl použít k překladu neschopnost filtr formuláře nebo sestavy, který je vázán k uložené proceduře nebo funkci. Většina těchto řešení týkají nahrazení uložené procedury nebo funkce jiného typu záznamu zdroje, například tabulky, zobrazení nebo příkazu SQL.
Však následující řešení se dozvíte, jak můžete nadále používat uložené procedury jako zdroje záznamů pro formulář při úspěšné implementaci filtr a podmínka WHERE.
Upozornění: Pokud budete postupovat podle kroků v tomto příkladu, změníte ukázkový projekt Access projektu NorthwindCS.adp. Můžete chtít zálohovat soubor projektu NorthwindCS.adp a proveďte následující kroky s kopií projektu.
-
Otevřete ukázkový projekt NorthwindCS.adp.
-
V okně Databáze klepněte na tlačítko Zvýraznit tabulky kategorie a potom v nabídce Vložit klepněte na tlačítko Automatický formulář .
Poznámka: Pokud používáte aplikaci Access 2007, klepněte na tlačítko Zvýraznit tabulky kategorie v okně databáze a potom klepněte na formulář ve skupině formuláře na kartě vytvořit . -
Otevřete formulář v návrhovém zobrazení.
-
Odstranit objekt podformulář s názvem Table.Products z hlavního formuláře a potom přidat příkazové tlačítko do formuláře. Pokud se spustí průvodce, klepněte na tlačítko Storno.
-
Nastavte následující vlastnosti příkazového tlačítka:
Name: cmdFilterProducts
Caption: Filter Products
On Click: [Event Procedure] -
Nastavte vlastnost Při klepnutí příkazového tlačítka na následující proceduru události:
Private Sub cmdFilterProducts_Click()
DoCmd.OpenForm "Products", acNormal, , , acFormEdit, acWindowNormal
End Sub -
V nabídce soubor klepněte na tlačítko Zavřít a návrat do aplikace Microsoft Access.
-
V nabídce soubor klepněte na tlačítko Uložita uložte formulář jako Categories1.
Poznámka: V panelu nástrojů Rychlý přístup klepněte na tlačítko Uložit. -
V okně Databáze klepněte na položku dotazya potom klepněte na tlačítko Nový.
Poznámka: Pokud používáte aplikaci Access 2007, klepněte ve skupině jiné na kartě vytvořitPrůvodce dotazem . -
V dialogovém okně Nový dotaz klepněte na položku Vytvořit Text uloženou procedurua potom klepněte na tlačítko OK.
-
Zadejte nebo vložte následující příkaz Transact-SQL zavřete a uložte postup s názvem výchozí spProducts:
CREATE PROCEDURE spProducts
@CatID int
AS
SELECT * FROM Products WHERE CategoryID = @CatID
RETURN -
Otevřete formulář výrobků v návrhovém zobrazení a změňte vlastnost Zdroj záznamů z produktů spProducts.
-
Přejděte na vlastnost vstupní parametry formuláře a potom přiřaďte následující hodnotu pro tuto vlastnost:
@CatID int = Forms! [Categories1]! [ČísloKategorie]
-
Zavřete a uložte formulář výrobky a poté otevřete formulář Categories1.
-
Procházet NázevKategorie Confectionsa potom klepněte na tlačítko Filtr produktů . Všimněte si, že produkty formulář otevře a zobrazí pouze produkty, kde je rovno Confections kategorie.
Stav
Toto chování je záměrné.
Další informace
Přístupu uživatelů, často vhodné omezit počet záznamů, které se zobrazí aplikace Access formuláře nebo sestavy. Jedna metoda tohoto postupu je filtrovat záznamy na formulář (nebo sestavu) s podmínka WHERE a umožňuje zadat podmíněné hodnotu některý jiný objekt. Například jeden formulář, můžete zobrazit podmíněné hodnotu, který bude použit v jiném formuláři za účelem omezení počtu záznamů, které mají být zobrazeny. Pokud formulář, který chcete filtrovat má jako zdroj záznamů uložené procedury nebo funkce, je ignorována filtr. Následující kroky popisují toto chování.
Upozornění: Pokud budete postupovat podle kroků v tomto příkladu, změníte ukázkový projekt Access projektu NorthwindCS.adp. Můžete chtít zálohovat soubor projektu NorthwindCS.adp a proveďte následující kroky s kopií projektu.
Kroky pro reprodukci chování v přístupu 2003
-
Postupujte podle kroků 1 až 5 části "Řešení" dříve v tomto článku.
-
Nastavte vlastnost Při klepnutí příkazového tlačítka na následující proceduru události:
Private Sub cmdFilterProducts_Click()
DoCmd.OpenForm "Products", acNormal, , "[CategoryID] = " & Me!CategoryID, acFormEdit, acWindowNormal
End Sub -
V nabídce soubor klepněte na tlačítko Zavřít a návrat do aplikace Microsoft Access.
-
V nabídce soubor klepněte na tlačítko Uložita uložte formulář jako Categories1.
-
Otevřete formulář ve formulářovém zobrazení.
-
Procházet NázevKategorie Confectionsa potom klepněte na tlačítko Filtr produktů . Všimněte si, že produkty formulář otevře a zobrazí pouze produkty, kde je rovno Confections kategorie.
-
Zavřete produktů a Categories1 formulářů.
-
V okně Databáze klepněte na položku dotazya potom klepněte na tlačítko Nový. Klepněte na položku Vytvořit Text uloženou procedurua potom klepněte na tlačítko OK.
-
Zadejte nebo vložte následující příkaz Transact-SQL zavřete a uložte postup s názvem výchozí spProducts:
CREATE PROCEDURE spProducts
AS
SELECT * FROM Products
RETURN -
Otevřete formulář výrobků v návrhovém zobrazení a potom změnit vlastnost RecordSource z produktů na spProducts.
-
Zavřete a uložte formulář výrobky a poté otevřete formulář Categories1.
-
Procházet NázevKategorie Confectionsa potom klepněte na tlačítko Filtr produktů . Všimněte si, že formulář výrobky otevře a zobrazí pouze produkty všechny produkty v kategorii Confections.