Acties:
  • 0 Henk 'm!

  • Yohsoog
  • Registratie: Maart 2010
  • Laatst online: 22-06 18:24
In onze applicatie wordt op een form een aantal listboxes en een subform getoond. A.d.h.v. de gekozen waarden in de listboxes wordt het subform gefilterd met de juiste data.

Bij het opbouwen van dit formulier, wordt het subform apart opgebouwd naargelang de gekozen recordsource. Het subform bestaat uit 60 labels en texboxes die elk apart aan een veld van de recordsource gehangen worden. Indien de recordsource bestaat uit minder dan 60 velden (praktisch altijd), dan worden de overige controls een lege controlsource toegewezen.

In Access 2003 draaide dit perfect, alles ging vlot en snel.

Nu bij het overzetten naar 2007 tradt een enorme vertraging op. Na nader onderzoek blijkt dat het zetten van een controlsource enorm veel langer duurt (2 à 3 seconden!). Dit is niet gerelateerd aan de waarde naar wat dit gezet wordt, want zelfs een lege string geeft deze vertraging.

Een voorbeeld:

Me.subfrmBasis.Controls("txt" & i + 1).ControlSource= ""

Ik ben al een hele tijd Google aan het afschuimen, maar vindt nergens hetzelfde concrete probleem. Misschien zoek ik op de verkeerde termen, maar indien hier iemand ervaring mee heeft, is een duwtje in de goede richting altijd welkom!

Acties:
  • 0 Henk 'm!

  • Marko_J
  • Registratie: Maart 2010
  • Laatst online: 15-03-2024
Misschien is het de AutoCorrect functie die voor de vertraging zorgt. Zie:
http://office.microsoft.c...-options-HA010256413.aspx

Je opzet van dynamisch koppelen van velden aan besturingselementen klinkt overigens wat onconventioneel.. Waarom niet verschillende subformulieren die je dynamisch wisselt?

Acties:
  • 0 Henk 'm!

  • Yohsoog
  • Registratie: Maart 2010
  • Laatst online: 22-06 18:24
De 'track name autocorrect option" stond reeds uit. Toch bedankt voor het meedenken.

Hoezo onconventioneel? Ik weet ook niet of ik jouw oplossing begrijp, jij zou per 'filter' een subformulier aanmaken?

In ieder geval hier wat meer uitleg: er wordt eerst een recordset gekozen (een tabel of query), daarmee wordt onderaan het scherm in datasheetview het subformulier opgevuld. Bovenaan het formulier staan 12 dropdownlijsten/tekstvelden (ook dynamisch adhv de gekozen recordset) die gelinkt zijn aan de 12 eerste kolommen van de recordset (en er zijn 3 dynamische selectiemogelijkheden naar keuze van alle kolommen).

Het stuk waar het fout loopt is echter de bovenvermelde regel, de code kan simpelweg als volgt worden voorgesteld:
code:
1
2
3
4
5
6
7
8
rst = " SELECT * FROM table"
me.subfrm.form.recordset = rst
for i = 0 to rst.fields.count
   me.subfrm.controls("txt" & i).controlsource = rst.fields(i).name
next
for i= rst.fields.count to 60
   me.subfrm.controls("txt" & i).controlsource = ""
next

Acties:
  • 0 Henk 'm!

  • Marko_J
  • Registratie: Maart 2010
  • Laatst online: 15-03-2024
Het klonk in eerste instantie vreemd, dat je van verschillende tabellen (=verschillende typen gegevens) dynamisch subformulieren gaat maken, maar het gaat om een soort zoek/filter-scherm begrijp ik nu.

De code ziet er duidelijk uit. Doet het subform verder nog iets? Conditional formatting? Totalen uitrekenen?

(tussen haakjes, wel laatste SP al geinstalleerd?)

Acties:
  • 0 Henk 'm!

  • Yohsoog
  • Registratie: Maart 2010
  • Laatst online: 22-06 18:24
Neen, geen formatting of berekeningen op het subform. Doel is dat met de filters de gebruikers hun eigen info snel kunnen ophalen en gemakkelijk een simpel excel rapportje kunnen trekken. (ze kunnen de filters ook opslaan zodat deze achteraf ineens geladen kunnen worden)

Er is nu ook een update :

indien we eerst de namen van de fields van de recordsource van het subform in een array steken, dan de recordsource van het subform leegmaken en met bovenstaande methode de controlsource invullen met de namen uit de array (ipv deze rechtstreeks uit de recordsource) loopt de gehele bewerking terug een pak vlotter.

Ergens vermoed ik dus dat in 2007 elke keer dat de controlsource property wordt aangeroepen, ook het subform zijn recordsource opnieuw wordt gecontroleerd of iets dergelijk.

PS: yep, laatste SP is reeds geïnstalleerd.