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?
Als je een query maakt, dan worden enkel de records opgehaald die voldoen aan die query.
De query wordt nl. op database-niveau uitgevoerd.
De query wordt nl. op database-niveau uitgevoerd.
https://fgheysels.github.io/
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 ]
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.
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
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 ]
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.
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"
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"
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.
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.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.
Toch alsnog een
Verwijderd
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 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"
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.
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.
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.
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?
----------------------------------------------------------------------------------
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 ]
Pagina: 1