rowsource listbox bij openen van formulier legen

Status
Niet open voor verdere reacties.

sanders1969

Gebruiker
Lid geworden
29 dec 2018
Berichten
243
In sommige gevallen neemt het ophalen van de rowsource van een listbox veel tijd in beslag terwijl dit helemaal niet hoeft want ik zou het ideaal vinden dat deze standaard leeg is.
De rowsource in de eigenschappen venster is ingevuld en ik zoek eigenlijk de gebeurtenis voordat de listbox de data ophaalt wat in de rowsource ingevuld is.
Bij form_Load dan wordt de data al opgehaald.
Ik heb ook geprobeerd de rowsource te legen bij sluiten formulier maar dat ging ook niet goed.
Wie kent de gebeurtenis bij openen formulier voordat de instellingen worden afgevuurd welke in de eigenschappen zijn ingevuld?
 
Wie kent de gebeurtenis bij openen formulier voordat de instellingen worden afgevuurd welke in de eigenschappen zijn ingevuld?
Niemand, want die is er niet. De enige workaround is om de keuzelijst pas te vullen op het moment dat jij dat wilt. Bijvoorbeeld bij de gebeurtenis <OnFocus>. Overigens vraag ik me af of je de rijbron van de keuzelijst wel goed gebruikt; een keuzelijst hoort behoorlijk snel te kunnen laden.
 
Ja ik wil de rowsource vullen voordat de listbox geladen wordt. Als ik bijv de formulier tijdens runnen in ontwerp modus zet dan wordt de rowsource gevuld. Als ik daarna de formulier weer opent dan wordt de rowsource die is ingesteld opgevraagd. Ik wil of bij sluiten van formulier de rouwsource standaard legen of bij openen een gebeurtenis weten voordat de rowsource opgevraagd wordt.
Klink onduidelijk maar ik hoop dat je me begrijpt.
 
als je de rowsource leeg wil hebben bij het openen: zet die dan op iets als "SELECT f1, f2, … from MYTABLE where 1 = 0" Geen enkel record kan voldoen aan de voorwaarde 1 = 0, dus de listbox blijft leeg.
Je kan dat ook doen in de record source van je formulier, zodat het leeg (zeer snel) opent, en je kan dat dan laten vullen via een zoekactie die een deel van de gegevens ophaalt.
 
Hoi NoellaG

Klopt alleen als de formulier wordt geladen dan is de rowsource inmiddels gevuld en kan ik pas de rowsource aanpassen wanneer de listbox de data heeft opgehaald. Daarom ben ik opzoek naar een gebeurtenis waar de data van de rowsource nog niet wordt opgehaald zodat ik deze eerst leeg en dat dan de formulier snel geopend wordt. de Where 1=2 is een goede en werk ik ook sinds een paar jaar mee! Nogmaals de rowsource leeg maken moet ook werken alleen ik kan het niet legen eer de formulier is geladen.
Ik dacht ook aan unload maar dan kan ik de listbox niet benaderen grrrr
 
Ik begrijp niet waarom je de rowsource wil leegmaken. Als je iets leegmaakt dan impliceert dit dat het eerst gevuld is. Eerst vullen en dan leegmaken gaat de boel inderdaad vertragen. Daarom: start leeg op met de where 1 = 2. En ga dan vullen bij bv. de Onfocus event van de listbox zelf.
 
Als ik dynamisch gevulde keuzelijsten (al dan niet met invoervak) nodig heb, dan krijgen ze bij mij bij het openen geen rowsource. Dan start-ie dus heel snel, en heb je daar geen probleem mee. Vervolgens (vandaar mijn tip van de gebeurtenis OnFocus ) vul ik de keuzelijst als ik hem selecteer. De benodigde SQL voor de RowSource zet je dus pas op de keuzelijst als je die kiest. Dan hoef je ook niet te klooien met filters als 1=2. Is in mijn ogen nergens voor nodig.

Is je keuzelijst te lang, of de hoeveelheid data te groot/zwaar, dan kun je ook overwegen om de keuzelijst te vullen op basis van een selectie. Die is dan wellicht al te maken op het formulier, voordat je de keuzelijst dus aanklikt. In dat geval laadt-ie een stuk sneller.
 
Uhh het gaat vaak goed alleen alleen als ik de formulier in design modus plaats kan de rowsource gevuld zijn. Ik zou willen dat ik deze bij het laden of bij het afsluiten vooraf kan legen. Zodra de formulier eenmaal geopend wordt dan wordt eerst de rowsource gevuld en daarna kan ik de gebeurtenis Form_Load de rowsource weer legen maar dan is het te laat want dan heeft ie de listbox al gevuld.
Ik krijg de indruk dat het niet kan.
 
... alleen alleen als ik de formulier in design modus plaats kan de rowsource gevuld zijn.
Huh? Design modus heeft niks met inhoud te maken; je kunt best een query die 3 dagen moet laden gebruiken op een formulier, terwijl dat gewoon in 0,5 seconde opent in de design modus. OK, je moet 'm niet in de Formulierweergave zetten :)
Doe het nou eens zoals ik het al een paar keer heb voorgesteld. Kleine moeite, zou ik zeggen...
 
Ik vul de rowsource via VBA in en je kan verschillende types data opvragingen doen. De ene duurt niet lang en de andere wel. Nogmaals als ik de formulier sluit of naar design modus zet dan onthoudt de listbox de laatste rowsource. Als deze een rowsource is wat lang duurt om op te vragen dan heb ik een probleem wanneer ik de formulier open en eerst lang moet wachten eer de formulier is geladen terwijl ik niet eens deze data wil opvragen. Dus enorm balen want ik zou het liefst altijd een lege rowsource willen hebben in listbox maar dat gaat niet want ik vraag in dit formulier altijd iets op. Dus ik zet m niet in formulierweergave dit gebeurd wanneer ik eenmaal de formulier geopend heb en een opvraag gedaan heb. Het wordt standaard onthouden en ik kan het niet legen. Ja ik kan een knop maken: listbox.rowsource="" maar zoals je hopelijk begrijpt is dit gekkewerk. Ik heb dit achter mijn knop: sluiten geplaatst alleen als ik niet op de knop sluiten klik en direct de formulier wil ontwerpen, designmodus dan kom het niet in de gebeurtenis sluiten. vandaar.
 
Dus ik zet m niet in formulierweergave dit gebeurd wanneer ik eenmaal de formulier geopend heb en een opvraag gedaan heb.
En wat is een geopend formulier anders dan een formulier weergave? Ik raak lichtelijk confuus nu...
Als je keuzelijst geen Rowsource heeft bij het starten van het formulier, dan is hij leeg en razendsnel.

Maar hebben we het wel over hetzelfde programma? Als ik dit lees:
Als ik bijv de formulier tijdens runnen in ontwerp modus zet dan wordt de rowsource gevuld. Als ik daarna de formulier weer open dan wordt de rowsource die is ingesteld opgevraagd.

En dit:
Ik dacht ook aan unload maar dan kan ik de listbox niet benaderen grrrr

Dan denk ik dat je met Excel aan het stoeien bent en niet met Access. Want je noemt dingen die in Access helemaal niet kunnen of bestaan.
 
Beste Octafish

Ik programmeer 20 jaar in Access en ik heb meerdere malen van jou in het verleden geweldige tips gekregen alleen het verschil tussen Access en Excel is mij heel duidelijk.
Ik ga nogmaals een poging wagen.
Een nadeel van een listbox is wanneer je deze vult via vba dat de rowsource opgeslagen wordt.
Als ik in formulier weergave met mijn rechtermuis kiest voor ontwerpmodus dan onthoudt de listbox de rowsource die op dat moment is geladen.
Dit kan een tijdrovende rowsource zijn.
De volgende keer als ik de formulier open vraagt ie eerst de rowsource van de listbox op en ik ben opzoek naar een gebeurtenis welke eerder afspeelt zonder de data op te halen van de listbox.
Formload bijv als deze wordt geactiveerd dan is de lisbox al gevuld met databasegegevens en heb ik lang moeten wachten.
Ik heb een knop: Sluiten en daar leeg ik standaard de rowsource echter als ik met mn rechtermuis direct voor ontwerpmodus kiest wordt er dus niet op knop Sluiten gekozen en de rowsource van de listbox blijft actief.
Ik hoop echt dat je me nu begrijpt.
 
zet de opkuis van de rowsource in de OnClose van het formulier. Die wordt ook uitgevoerd als het formulier gesloten wordt zonder de knop te gebruiken.
 
Beter nog: de LostFocus van je keuzelijst. Overigens herken ik je probleem totaal niet. Maak eens een voorbeeldje, want dit wil ik wel eens zien.
 
Een nadeel van een listbox is wanneer je deze vult via vba dat de rowsource opgeslagen wordt.
Ik heb het voor de zekerheid nog even getest, maar het klopt dus echt niet wat je zegt. Als ik een keuzelijst maak, zonder Rijbron, en niet-afhankelijk, dan is die leeg als ik het formulier in de Formulierweergave open. Vervolgens een testje gedaan met twee gebeurtenissen:
PHP:
Private Sub Form_Load()
    Me.lstMaanden.RowSource = strSQL
End Sub
en
PHP:
Private Sub Form_Close()
    Me.lstMaanden.RowSource = ""
End Sub

Formulier krijgt netjes de inhoud uit strSQL, en bij sluiten/ontwerpweergave van formulier staat er dus niks. Lege rijbron. Overigens was de keuzelijst óók leeg zonder de Close procedure, want hij krijgt pas een rowsource bij het laden.

Vervolgens een test met:
PHP:
Private Sub lstMaanden_GotFocus()
Dim strSQL As String
    Me.lstMaanden.RowSource = strSQL
End Sub

PHP:
Private Sub lstMaanden_LostFocus()
    Me.lstMaanden.RowSource = ""
End Sub
Zelfde effect, alleen nu 'live' te zien op de keuzelijst. Als ik hem kies, wordt-ie netjes gevuld, als ik een andere keuzelijst (of tekstvak, maakt natuurlijk niet uit) kies, wordt-ie leeggemaakt. Ik wil echt wel even kijken naar jouw db, maar dan moet je wel reageren :).
 
Beste Octafish en NoellaG,

Ik ben van het weekend getroffen door een griepje en ik had maandag en dinsdag een cursus Power BI, geweldig btw!
Alleen lukte het me niet jullie adviezen uit te zoeken en te reageren.
Inmiddels ben ik achter gekomen waar het aan lag en het klopt als je sluit dat de rowsource leeg bleef.
Ik ben er achter gekomen dat het zegmaar fout gaat wanneer Access crashte...
Sorry voor het laat reageren en veel dank voor jullie goede adviezen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan