Toon posts:

[Access] vraagje over Filters

Pagina: 1
Acties:
  • 101 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik ben bezig om uit een tabel met nu nog 5.000, maar binnenkort zon 30.000 records een concatenerende query te maken.. ik gok dan met zon 100.000 resultaten. Als je in je formulier een filter maakt, haalt access dan 100.000 records (van de Back end) op en laat vervolgens degene zien die je nodig hebt, of haalt ie dan alleen op wat je nodig hebt?

  • whoami
  • Registratie: December 2000
  • Laatst online: 01:57
Als je een query maakt, dan worden enkel de records opgehaald die voldoen aan die query.
De query wordt nl. op database-niveau uitgevoerd.

https://fgheysels.github.io/


Verwijderd

Topicstarter
dus als je een filter toepast dan maakt access een nieuwe query? Filter suggereerd nl. een beetje alsof hij gegevens verbergt...

Verwijderd

Access haalt eerst alle records binnen en voert dan pas de query uit. Dat is een groot nadeel om access te gebruiken.

[ Voor 15% gewijzigd door Verwijderd op 19-06-2003 15:32 ]


  • Arnaud
  • Registratie: Mei 2000
  • Laatst online: 02-08 18:07
Een filter kun je volgens mij alleen toepassen als je al een query hebt uitgevoerd. Dit betekent dat je zowieze eerst alle resultaten krijgt en pas na inschakeling van een filter de beperkte hoeveelheid resultaten.

Volgens mij is het een sprookje dat Access (in een client-server scenario) eerst alle mogelijk benodigde records binnenhaalt vanaf de server en dan de query op de client uitvoert. Als iemand hier een goede link over aanbied om mij terecht te wijzen ben ik bereid mijn nederige excuses aan te bieden.

Verwijderd

Access is geen client server programma en draait volledig op zijn jet engine op de client.
Oftewel je haalt dus altijd alle data binnen en dan pas wordt de query uitgevoerd.

Nog even een quote van msdn:
Microsoft Access 2000 is a powerful relational database application with which a desktop user can efficiently create and manipulate database systems. Access targets the desktop category and works best for individuals and workgroups managing megabytes of data. For multiuser access to the same database, Access uses file-server architecture, rather than client-server architecture. Access is included in the Professional and Developer Editions of Microsoft Office.

http://msdn.microsoft.com...dnacc2k/html/acmsdeop.asp

[ Voor 64% gewijzigd door Verwijderd op 19-06-2003 16:05 ]


Verwijderd

Topicstarter
Kortom: Het maakt praktisch niets uit of ik mijn formulier maak met een parameter query, of een filter?

Verwijderd

qua performance niet. Persoonlijk kies ik altijd voor een query. De gebruiker kan dan nl zelf het filter uitzetten en alle resultaten bekijken.

Verwijderd

Topicstarter
Uhm.. ok.. dan wordt het een filter :)

Het is ook niet de bedoeling / mogelijk dat gebruikers zelf gaan filteren. Om iedere keer de query opnieuw aan te roepen is meer tik-werk dan om te zeggen filter = "blah = blah"

  • Arnaud
  • Registratie: Mei 2000
  • Laatst online: 02-08 18:07
Volgens mij is het een sprookje dat Access (in een client-server scenario) eerst alle mogelijk benodigde records binnenhaalt vanaf de server en dan de query op de client uitvoert. Als iemand hier een goede link over aanbied om mij terecht te wijzen ben ik bereid mijn nederige excuses aan te bieden.
MSDE also has a performance advantage over Jet for large sets of data and many simultaneous users. Because Jet is a file-server system, the query processing must happen on the client. This involves moving a lot of data over the network for large databases. MSDE runs that same query on the server. This puts a larger load on the server, but can reduce network traffic substantially, especially if the users are selecting a small subset of the data.
Access kan dus in een client-server-scenario dus wel degelijk queries door de server uit laten voeren en alleen de resultaten tonen. Dit sprookje is ontstaan omdat mensen het verschil tussen Access (de GUI) en de onderliggende database-engine (Jet of MSDE) met elkaar hebben verward. De Jet-Engine moet inderdaad eerst alle mogelijk benodigde gegevens vanaf de server (over het netwerk) inlezen en daarna zelf verwerken. De MSDE-Engine laat de server de verwerking uitvoeren en hoeft daarna alleen het resultaat (over het netwerk) in te lezen. Hiermee is dit sprookje dan eindelijk uit de wereld geholpen wat mij aangaat.

Toch alsnog een _/-\o_ voor ErikvSon vanwege de duidelijke link.

Verwijderd

Verwijderd schreef op 19 June 2003 @ 16:33:
Uhm.. ok.. dan wordt het een filter :)

Het is ook niet de bedoeling / mogelijk dat gebruikers zelf gaan filteren. Om iedere keer de query opnieuw aan te roepen is meer tik-werk dan om te zeggen filter = "blah = blah"
Wat je nu zegt is niet waar. Als je een goede query hebt gebouwd die bv een veld van het formulier gebruikt als criteria hoef je alleen maar een [veld].requery in de AfterUpdate van je criteria veld aan te roepen en je bent klaar.

Verwijderd

Topicstarter
Daar zat ik in eerste instantie ook aan te denken. Ik ben een planningssysteem aan het maken. Door middel van een keuzelijst krijgt de gebruiker zijn eigen werkaandeel te zien. Daarnaast is er een groepsvak met radiobuttons waaruit ze uit drie onderdelen kunnen kiezen: Verricht werk, te verrichten werk en bijde.

Het is inderdaad op te lossen door een query met twee IIF() 's in de where te zetten die kijkt welke radiobutton geselecteerd is. Maar mijn vraag is of een filter niet net zo snel is.

Verwijderd

Als die radio buttons een code hebben waarop je ook moet filteren.
Dus radio button heeft 1 en 2. In je tabel filter je ook op 1 en 2 dan is het veel sneller om een query te gebruiken.
Een filter is net zo snel alleen met 1 druk op een knop uit te zetten door een gebruiker.

Verwijderd

Topicstarter
Ow, ik ben iets dieper in de Access documentatie gedoken. en kwam het volgende tegen:

----------------------------------------------------------------------------------
Gebruik filters of query's om het aantal records te beperken dat in een formulier of gegevensblad wordt weergegeven. Op die manier worden minder gegevens overgebracht via het netwerk.
----------------------------------------------------------------------------------

Als ik dit moet geloven maakt het niets uit. Bedankt voor de info iig :)


Misschien een beetje offtopic maar dit kwam ik ook tegen onder het performance gedeelte:
----------------------------------------------------------------------------------
U kunt de prestaties bij het openen van de hoofddatabase en het openen van tabellen en formulieren enorm verbeteren als u de gekoppelde database dwingt open te blijven. Dit doet u door een lege tabel in de gekoppelde database te maken en deze tabel te koppelen aan de hoofddatabase. Vervolgens opent u de gekoppelde tabel met de methode OpenRecordset. Hiermee voorkomt u dat de Microsoft Jet Database Engine de gekoppelde tabel blijft openen en sluiten en het bijbehorende .ldb-bestand voortdurend maakt en verwijdert.
----------------------------------------------------------------------------------

wordt hiermee bedoeld dat je dit voor alle gekoppelde tabellen moet doen, of alleen voor een fake-tabel zodat de link altijd open is?

[ Voor 56% gewijzigd door Verwijderd op 20-06-2003 11:50 ]


  • Arnaud
  • Registratie: Mei 2000
  • Laatst online: 02-08 18:07
Alleen voor 1 fake-tabel en alleen als je een gekoppelde database gebruikt.
Pagina: 1