Subformulieren aanvullen

Status
Niet open voor verdere reacties.

Stabiloy

Gebruiker
Lid geworden
3 okt 2009
Berichten
129
Hallo,
Jullie denken vast alweer iemand met zo een standaard vraag. Maar die van mij is toch weer net even anders.

In een keuze lijst word een waarde getypt, de velden van het formulier worden dan d.m.v VBA aangevult. Nu heb ik mijn subformulier gekoppeld op het veld debnr, alleen heb ik het idee dat het subformulier de waarde niet overneemt. Dit omdat hij dan niks vind.

Nu is mijn vraag: Hoe kan ik zorgen dat de subformulieren het doen. En dus de waarde uit het veld debnr van het hoofdformulier hun query kunnen maken?
 
Als je de velden van hoofd- en subfomulier goed hebt gekoppeld, dan mag het eigenlijk niet fout gaan. Je moet kortom de records op het subformulier zien, die je toont op het hoofdformulier.
Als je een opzoeklijst gebruikt op je hoofdformulier om een record op te zoeken, dan moet het subformulier dus ook worden ververst.
Je kunt eventueel nog een Requery op het <Na bijwerken> event van de keuzelijst zetten om het subformulier opnieuw te laden.

Code:
Me.[Subformulier].Form.Requery
Als je, bij het openen van het formulier, al geen records ziet in het subformulier, is er iets anders aan de hand, en zijn hoofd- en subformulier niet goed gekoppeld. Dan helpt Requery uiteraard ook niet.
 
voordat ik mijn formulier dmv VBA liet aanvullen, dus gewoon met alleen de keuzelijst werkte alles wel. Zal nu dit proberen.

Heb het geprobeerd, maar mag het nog steeds niet doen.
 
Laatst bewerkt:
Hoe wordt het formulier nu gevuld? Je zegt dat-ie het nu wel doet, voordat je het formulier met VBA vulde. Wat is er precies veranderd?
 
Hoe wordt het formulier nu gevuld? Je zegt dat-ie het nu wel doet, voordat je het formulier met VBA vulde. Wat is er precies veranderd?

ik zal het even wat duidelijker uitleggen.

De eerste situatie:
Ik had een keuze formulier en die vulde de velden van het hoofdformulier aan. De subformulieren werkte op een zoekquery, en gebruikte de waarde van het veld debnr, om de bijpassende gegevens in het subformulier te laten zien.

De situatie nu:
Ipv dat de keuzelijst ze zelf aanvult, heb ik, zoals in mijn andere topic staat dat via VBA gedaan om zo de keuzelijst weer leeg te kunnen maken, maar wel de velden in het hoofdformulier ingevult bleven. Alleen nu werken de subformulieren niet meer. Ze geven geen resultaten terug. Dus ik denk dat ze dan de waarde van het veld debnr niet meer kunnen gebruiken oid.

De verandering is dus dat er nu bij <na bijwerken> een VBA code staat die de vulden invult. namelijk deze:
Code:
    Me.Tekst85.Value = Keuzelijst_met_invoervak83.Column(0)
    Me.Tekst106.Value = Keuzelijst_met_invoervak83.Column(1)
    Me.adres.Value = Keuzelijst_met_invoervak83.Column(2)
    Me.postcode.Value = Keuzelijst_met_invoervak83.Column(3)
    Me.woonplts.Value = Keuzelijst_met_invoervak83.Column(4)
    Me.telnr.Value = Keuzelijst_met_invoervak83.Column(5)
    Me.emailadrs.Value = Keuzelijst_met_invoervak83.Column(6)
    Me.Type.Value = Keuzelijst_met_invoervak83.Column(7)
    Me.Keuzelijst_met_invoervak83 = ""
 
Laatst bewerkt:
Ik zie dat je een goed-beschijvende naam hebt gebruikt voor je keuzelijst ;)
Formulieren en subformulieren zijn gekoppeld op basis van een gegevensbron. Als het hoofdformulier niet is gebonden aan een recordbron zoals een tabel of een query, dan wordt het al heel lastig om een subformulier daar goed aan te koppelen.
In jouw geval heb je waarschijnlijk het subformulier gekoppeld (gehad) aan de waarde die via de keuzelijst is opgezocht. Door nu de keuzelijst leeg te maken, is er ook geen directe link meer met het gegeven uit die keuzelijst. Persoonlijk snap ik eerlijk gezegd niet waarom die lijst leeg moet, want het werkt alleen maar problemen in de hand, waar je volgens mij niet echt op zit te wachten...
Dus als de keuzelijst in tact laten het probleem oplost, dan kun je dat volgens mij prima verkopen aan de gebruikers, want het is dan een technische noodzaak. toch? Maar je kunt, als je toch wilt doorzetten, misschien de waarde uit de keuzelijst op een tekstveld zetten, en dat tekstveld koppelen aan je subformulier.
 
Ik zie dat je een goed-beschijvende naam hebt gebruikt voor je keuzelijst ;)
Formulieren en subformulieren zijn gekoppeld op basis van een gegevensbron. Als het hoofdformulier niet is gebonden aan een recordbron zoals een tabel of een query, dan wordt het al heel lastig om een subformulier daar goed aan te koppelen.
In jouw geval heb je waarschijnlijk het subformulier gekoppeld (gehad) aan de waarde die via de keuzelijst is opgezocht. Door nu de keuzelijst leeg te maken, is er ook geen directe link meer met het gegeven uit die keuzelijst. Persoonlijk snap ik eerlijk gezegd niet waarom die lijst leeg moet, want het werkt alleen maar problemen in de hand, waar je volgens mij niet echt op zit te wachten...
Dus als de keuzelijst in tact laten het probleem oplost, dan kun je dat volgens mij prima verkopen aan de gebruikers, want het is dan een technische noodzaak. toch? Maar je kunt, als je toch wilt doorzetten, misschien de waarde uit de keuzelijst op een tekstveld zetten, en dat tekstveld koppelen aan je subformulier.
De waarde van debnr word nu gewoon in een tekstveld gezet. Daarom snap ik ook niet waarom hij het niet doet :P En heb een eigenwijze baas :P die wil die velden leeg zien, dit omdat ze als een soort zoekveld gebruikt worden
 
Een eigenwijze baas kan lastig zijn; maar als mijn baas zou eisen dat ik water moet laten branden, dan weet ik nog wel een paar donkere plekjes voor 'm ;) Wensen in een formulier zijn prima als ze de functionaliteit niet aantasten; zodra dat wel het geval is, lijkt mij dat de werking van het programma voor gaat. Toch?
 
Een eigenwijze baas kan lastig zijn; maar als mijn baas zou eisen dat ik water moet laten branden, dan weet ik nog wel een paar donkere plekjes voor 'm ;) Wensen in een formulier zijn prima als ze de functionaliteit niet aantasten; zodra dat wel het geval is, lijkt mij dat de werking van het programma voor gaat. Toch?

ach ja eigenlijk wel. Maar wat hij wil moet toch ook mogelijk zijn :P (ik ben ook eigenwijs)
 
Je maakt iets leeg waar iets anders van afhankelijk is. Dan raak je de afhankelijkhheid kwijt. Je kunt overigens natuurlijk meerdere objecten koppelen aan hetzelfde veld in tabel of query, dus de Besturingselementbron meerdere keren instellen op dat veld. En kijken of je daar op kunt koppelen.
Ik weet ook niet hoeveel elementen je hebt in de lijst, maar als het er veel zijn, vind ik het nogal klantonvriendelijk om de lijst steeds leeg te maken; als je eenmaal een waarde hebt staan, is een andere waarde opzoeken een stuk makkelijker, omdat je niet meer aan het begin van de lijst staat.
Ik ben (zo mogelijk) nog eigenwijzer... ;)
 
de subformulieren staan gekoppeld aan het veld.. en die word gewoon gevult. Dus snap niet waarom hij het niet doet:P of moet ik dan al die subformulieren ook via VBA laten vullen, ipv een query in access??
 
Laatst bewerkt:
Kun je misschien een voorbeeldje posten? Het werkt wat makkelijker in een testomgeving die aansluit op de vraag.
 
hierbij een voorbeeld database. Bij openen word het formulier geopend waar het om gaat. Als je nu bovenin in de "Zoek velden" wat typt worden de gegevens dus goed gevuld. Alleen de subformulieren niet meer. Voor zover ik weet zijn ze goed gekoppeld. Hoop dat jij het probleem wel ziet waar ik misschien overheen kijk.
 

Bijlagen

Laatst bewerkt:
Zal er een blik op werpen!
 
Ik heb de eerste keuzelijst verwijderd en vervangen door een keuzelijst die wel werkt. De andere twee zijn nog niet aangepast, maar dat kun je nu zelf wel, denk ik ;)
Verder zijn de volgende (al dan niet noodzakelijke) aanpassingen gemaakt:
1. Ik heb de keuzelijsten in de Koptekst van het formulier gezet, de overige velden/subformulieren zijn verplaatst naar de Detailsectie.
De Koptekst en voetteks moet je nooit gebruiken voor gegevens, want die horen thuis in de Detailsectie.
2. Het formulier is gekoppeld aan de tabel Klanten. (zie punt 1). Je wilt immers Klantgegevens zien, met daaraan gerelateerde gegevens.
3. Alle formulieren, tekstvelden en labels zijn hernoemd. Ik krijg altijd kromme tenen als ik namen zie als Me.Tekstvak85.value... Zegt mij echt helemaal niks.... En al had je d'r een heleboel, het aanpassen kost niet meer dan 10 minuten. En voor de rest van je leven weet iedereen wat je bedoelt met het object txtPersNr.

De reden dat jouw opzet niet werkt, ligt in het gegeven dat je het formulier niet hebt gebonden aan een gegevensbron. En dat moet eigenlijk wel, bij een Hoofd-formulier+Subformulier. Je koppelt dan de ene gegevensbron aan de andere. Aangezien je geen gegevensbron had, krijg je dus geen records te zien.
Om een onafhankelijk formulier te blijven gebruiken, moet je dus toch een recordset aan het formulier breien. Dat kan uiteraard via een Recordset; maar in dit geval levert dat geen enkele winst op.
Veel succes ermee!
 

Bijlagen

Ik heb de eerste keuzelijst verwijderd en vervangen door een keuzelijst die wel werkt. De andere twee zijn nog niet aangepast, maar dat kun je nu zelf wel, denk ik ;)
Verder zijn de volgende (al dan niet noodzakelijke) aanpassingen gemaakt:
1. Ik heb de keuzelijsten in de Koptekst van het formulier gezet, de overige velden/subformulieren zijn verplaatst naar de Detailsectie.
De Koptekst en voetteks moet je nooit gebruiken voor gegevens, want die horen thuis in de Detailsectie.
2. Het formulier is gekoppeld aan de tabel Klanten. (zie punt 1). Je wilt immers Klantgegevens zien, met daaraan gerelateerde gegevens.
3. Alle formulieren, tekstvelden en labels zijn hernoemd. Ik krijg altijd kromme tenen als ik namen zie als Me.Tekstvak85.value... Zegt mij echt helemaal niks.... En al had je d'r een heleboel, het aanpassen kost niet meer dan 10 minuten. En voor de rest van je leven weet iedereen wat je bedoelt met het object txtPersNr.

De reden dat jouw opzet niet werkt, ligt in het gegeven dat je het formulier niet hebt gebonden aan een gegevensbron. En dat moet eigenlijk wel, bij een Hoofd-formulier+Subformulier. Je koppelt dan de ene gegevensbron aan de andere. Aangezien je geen gegevensbron had, krijg je dus geen records te zien.
Om een onafhankelijk formulier te blijven gebruiken, moet je dus toch een recordset aan het formulier breien. Dat kan uiteraard via een Recordset; maar in dit geval levert dat geen enkele winst op.
Veel succes ermee!

Nog niet naar bestand kunnen kijken, maar alvast bedankt. en word de waarde van de keuzelijst nog steeds weer leeggemaakt? Want daarom ben ik het op een andere manier gaan doen xd
 
Ja, die is nog steeds leeg ;)
 
Hey octafish ;)

heb eindelijk de database kunnen bekijken. Hij werkt hoe de bedoeling is ;) Wanneer ik hem nu kopieer naar mijn bestaande database werkt hij niet meer, de subformulieren worden niet meer aangevult. Heb de nieuwe sql, en de nieuwe naamgeving van jou overgenomen. Tevens krijg ik de foutmelding dat ik ergens dubbelwaarden heb staan.

Ik heb het ook andersom geprobeerd door de klanten en de aankopen te kopieren naar het bestand van octafish, en dan doet die het ook niet meer.....

Die laatste fout krijg ik ookal in de database hier. Weet iemand hoe dit komt?
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan