keuzelijsten met invoervak elkaar laten filteren

Status
Niet open voor verdere reacties.

M.Broere

Gebruiker
Lid geworden
4 okt 2000
Berichten
75
Beste helpers,

Ik heb een database met adresgegevens.
Nu wil ik via een formulier met keuzelijsten een adressenselectie maken.
De keuzes zijn bv: plaats, wijk, buurt, straat enz.

Wat ik wil is dat als ik bv een plaats selecteer de andere velden automatisch alleen die velden laten zien die in die plaats voorkomen.

Ik doe dat door voor alle velden de keuzelijslijst te laten filteren door de andere gekozen velden.

Het probleem wat ik hiermee heb is dat het formulier erg traag wordt. Er zijn z'n 13 keuzelijsten (= query's) die iedere keer als het formulier geladen wordt of een requery krijgt opnieuw uitgevoerd moeten worden.

Mijn vraag is: is mijn opzet wel goed ? kan het anders zodat het formulier sneller wordt ?
 
Dan zou je eigenlijk de db moeten posten; ik zou zo niet weten of en waardoor er snelheid is te winnen. Het aantal van 13 afhankelijke keuzelijsten is wel stevig, dus het zou kunnen...
 
Snelheidswinst is mogelijk:
Heb je de query's via de query builder gebouwd of in VBA?

Indien je met de querybuilder werkt dan kan je volgende doen:
  • Open de query in de ontwerpmodus.
  • Klik met de rechtmuisknop in het gedeelte waar ook de tabellen staan.
  • Kies voor "Eigenschappen".
  • Indien je nu maar 2 opties ziet staan (alias en bron) dan moet nog een keer in het deel klikken waar de tabellen staan. Je krijgt dan +/- 22 opties.
  • Ga naar de optie recordvergrendeling en zet deze optie om naar "geen".
  • Ga 1 rij naar benden (type recordset) en zet deze op "momentopname"

In een multiuser database heeft dit wel de volgende consequenties:
  • wanneer iemand tussen door de gegevens wijzigt dan wordt dit niet opgemerkt. Je hebt namelijk deze opties uitgeschakeld.
  • het is mogelijk dat een andere gebruiker jouw gekozen record in de tussentijds kan aanpassen

Werk je met recordssets in VBA code dan kan je de connectionstrings van de recordsset aanpassen. Deze is weer afhankelijk van het type recordsset. Zelf werk ik met dit soort query's via de ADODB recordsets.
de syntax voor de connectionstring wordt dan:
Code:
rst.Open strSql, CurrentProject.Connection, adOpenStatic, adLockReadOnly, adCmdText


Je kan snelheid winnen door een het comprimeren van de database uit te schakelen. Dit komt omdat Access dan query's uit voorgaande sessies heeft onthouden en nog wat optimaliseert.
Echter, indien je Access ook voor de dataopslag gebruikt dan is dit ten sterkste af te raden. De data kan ongemerkt corrupt raken, helemaal wanneer de database op een FAT32 indeling draait.

Edit:
Heb je de tabellen wel goed geindexeerd? Ik heb hier namelijk uitgebreide keuzelijsten gebaseerd op serieuze tabellen die toch relatief soepel lopen.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan