Nieuwe record subformulier d.m.v een formulier.

Status
Niet open voor verdere reacties.

kroggykwak

Gebruiker
Lid geworden
8 dec 2009
Berichten
8
In een subformulier kan ik nieuwe records aanmaken d.m.v. de record kiezer. In de nieuwe record komt dan al automatisch het id van het hoofdformulier te staan, dit werk goed. Nu wil ik echter d.m.v. een knop in het sub formulier een neuwe record aanmaken middels een ander formulier. Hoe krijg ik het voor elkaar dat hierin het juiste id al is ingevuld zodat ik dit niet eerst op hoef te zoeken of te onthouden? En is het ook mogelijk de knop voor deze record in het hoofdformulier te plaatsen?
Ik ben nog maar een paar weken bezig met Access dus het is misschien wel heel simpel maar ik kom er niet uit. Alvast bedank aan degene die mij verder kan helpen.

Kroggykwak:d
 
Ik snap niet helemaal wat je bedoelt; je hebt een hoofdformulier en een subformulier. Het subformulier is gekoppeld aan het hoofdformulier op basis van een sleutelreferentie; als je een nieuw record aanmaakt in het subformulier zal Acces dus automatisch het sleutelveld uit het hoofdformulier overnemen, zoals je al geconstateerd had. Ga je nu een record aanmaken vanuit een ander formulier in ditzelfde subformulier, waar moet Access dan het sleutelveld op koppelen? Want welk veld wil je dan in laten vullen? Het subformulier heeft een koppeling met zijn eigen hoofdformulier, niet met een ander formulier...
 
Bedankt voor de snelle reactie.

Middels een knop in het subformulier wil ik een popup formulier laten verschijnen waarmee ik de gegeven voor de nieuwe record in het subformulier kan invullen. Dit luk wel maar in het pop up formulier moet ik dan zelf het ID invullen van het hoofdformulier, dit is namelijk de relatie met het subformulier, dus de ID van het hoofdformulier zou al ingevuld moeten worden met het ID van het formulier van waaruit ik op de knop "nieuwe record" druk. Als je rechtstreeks een nieuwe record invult in het sub formulier dan wordt dit netje door acces gedaan.
Ik hoop dat u begrijpt wat ik bedoel.

Kroggykwak.
 
Vergeet dan niet om het subformulier bij te werken, als je het tweede formulier sluit, anders zie je de records niet terug. Overigens is in dit geval het OpenArgs verhaal wel relevant, want met een knop vanuit het hoofdformulier open je een nieuw record, waarin je dan de ID van het hoofdformulier wilt zetten in het overeenkomende koppelveld. Dus niet filteren, zoals bij Iegje, maar OpenArgs gebruiken. De code kun je dan weer uit de link halen.
 
Mag je de vraag ook nog op <Opgelost> zetten :)
 
Toch nog problemen met nieuwe record via button in subformulier.

Ik dacht dat alles prima werkte maar ik heb een probleem waarop ik nergens een goede oplossing gevonden krijg.

Situatie: Ik heb een hoofdformulier met een subformulier. Gegevens zijn gekoppeld (een op veel relatie). Het subformulier is een doorlopend formulier met in de formulierkoptekst een knop om een nieuwe record aan te maken, deze opent een nieuw formulier waarin het id waarmee de relatie gekoppeld is automatisch ingevuld wordt. Dit werkt prima als er al records in het subformulier aanwezig zijn. Is het subformulier echter nog leeg dan kan het juiste id niet ingevuld worden. Wanneer ik de knop in het hoofdformulier zet werkt het wel goed.

Dit is de code van de knop:
>Private Sub btnNieuwStalling_Click()
>DoCmd.OpenForm "StallingInvoeren", , , , acFormAdd, , Me.KlantId
>End Sub

In het formulier StallingInvoeren staat deze vba code voor formload:
>Private Sub Form_Load()
>If Not Nz(Me.OpenArgs, "") = "" Then
>Me.KlantId = Me.OpenArgs
>End If
>End Sub

Zolang er nog geen record in het subformulier staat is schijnbaar het KlantId nog niet bekend. Hoe krijg ik dit opgelost? Ik zou toch graag deze knop in het subformulier hebben.

Bij voorbaat dank,
Kroggykwak
 
de logische vraag is natuurlijk: waarom vul je de records niet in via het subformulier? Dat lijkt mij de meest aangewezen weg... En de makkelijkste! Het subformulier is afhankelijk van het hoofdformulier, op basis van de koppeling die je tussen hoofd- en subformulier hebt gelegd. Vandaar dat als je in het subformulier een nieuw record aanmaakt, het koppelveld gelijk kan worden ingevuld, want dat komt van het hoofdformulier. Niks mis mee dus, die constructie. Maar jij hebt daar blijkbaar een probleem mee, want je wilt een apart formulier gebruiken om een nieuw record toe te voegen... Dat kan weer prima als de knop op het hoofdformulier staat, want daar staat immers het sleutelveld. En dat heb je nodig om een record aan te maken. Probleem (voor de tweede keer) opgelost.
Maar nee, we kunnen er nog een derde probleem van maken, door de knop op het subformulier te zetten, waar de koppeling op dat moment nog niet bestaat.... Zucht.....

Je kunt op deze manier een KlantID van een hoofdformulier afplukken:

Code:
DoCmd.OpenForm "StallingInvoeren", , , , acFormAdd, , Me.Parent!KlantId.Value
 
Dank voor de snelle oplossing. Het subformulier mag niet te bewerken zijn en kan ook niet alle gegevens overzichtelijk weergeven vandaar deze methode.

Ik heb nog een vierde probleem: Ik wil hetzelfde met een subformulier knop op het tweede subformulier dit is weer gekoppeld met het eerste subformulier maar hierbij werkt de bovenstaande oplossing niet.

Ik heb het zo geprobeerd:

DoCmd.OpenForm "BetalingInvoeren", , , , acFormAdd, , Me.Parent!StallingId.Value

Dan krijg ik de melding dat StallingId niet gevonden kan worden. Misschien denk ik verkeerd maar subformulier 1 is toch de Parent van het tweede subformulier?

Ik hoop dat je hier ook nog een slimme oplossing voor heb.

NB: Ik ben al tegen veel problemen aan gelopen die ik wel zelf opgelost heb, ik wil verder niet lastig zijn....

M.v.g. Kroggykwak
 
Het nieuwe formulier dat je opent is op zichzelf weer een hoofdformulier (vermoed ik). Als je in je subformulier een subformulier hebt, kun je daar de Parent weer van opvragen. Op deze site zie je welke syntax je nodig hebt om vanuit een willekeurig formulier naar andere formulieren/subformulieren/hoofdformulieren te verwijzen.

BTW: je bent niet lastig :) Vragende mensen zijn nooit lastig!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan