Access 2016 Formulieren koppelen

Status
Niet open voor verdere reacties.
Access formulieren koppelen

Sorry dat het niet gelukt is, bijgaande nogmaals in pdf.
 

Bijlagen

  • VBA en Macro Pand_Meterkast.pdf
    82,6 KB · Weergaven: 38
Ik heb goed nieuws, of slecht nieuws, afhankelijk van hoe je er naar wilt kijken. Aan je structuur mankeert niks, en aan de (VBA)code ook niet. Dus de code onder de knop zou moeten werken.
Dat dat niet gebeurt, zou dan komen door de foutmelding te snappen. Op zich is die melding duidelijk: blijkbaar ben je in formulier Meterkast met een record bezig dat niet te vinden is in de tabel Panden. En omdat je een één-op-één relatie hebt met die tabellen, kun je het record niet opslaan. Dat zou voor kunnen komen op het moment dat je een nieuw pand invoert, en gelijk de meterstanden wilt invullen. Bij het aanmaken van het pand krijg je weliswaar een PandID, maar als dat records niet is opgeslagen, kun je dat niet koppelen in Meterkast. Je ziet het nummer dus wel op het formulier, maar het bestaat nog niet.

Bij een bestaand pand, dus met nieuwe meterkastgegevens, zou dat echter niet mogen spelen want dan bestaat het PandID al. Controleer dus eerst of je het formulier niet kunt openen als het PandID in beide tabellen bestaat; in dat geval zou het formulier absoluut moeten openen.
 
Access formulieren koppelen

Bedankt voor je reactie. Ik heb wel bestaande panden ingevoerd maar kan geen bijbehorende meterkast invoeren. De foutmelding dat het niet kan worden opgeslagen blijft. Ik heb de relatie verwijderd en getracht in de tabel meterstanden dan maar een record toe te voegen. Ook dit geeft dezelfde foutmelding. Dus de relatie weer herstelt. Ik zie wel in tabel meterstanden dat steeds bij een nieuwe poging de PandID teller steeds één verhoogt maar deze niet opslaat in de tabel. De tabel heeft nog geen record, er staat alleen record Nieuw gereed. Wat opvalt is dat in tabel Meterkast, veld PandID de waarde 0 staat en geen indexnummer aangeeft vanuit de tabel Pand. PandID staat dus niet in beide tabellen.

Wat kan ik nog doen? Mijn idee moet toch in Access mogelijk zijn? Heb je nog mijn voorstel onderaan de bijlage gelezen?
 
Het kan absoluut, want ik doe het ook regelmatig. Persoonlijk zou ik geen één-op-één relatie gebruiken, maar een één-op-veel. Dat is veel betrouwbaarder. In combinatie met de unieke index op het veld Pand_ID kun je toch nooit meer dan één Pand_ID invoeren. Ik heb het niet zo op één-op-één relaties.
 
Access formulieren koppelen

Bedankt. Ik heb de één op veel relatie gemaakt maar het geeft hetzelfde resultaat, de foutmelding dat de record niet kan worden opgeslagen. Om de één op veel relatie te maken is volgens mij Pand_ID niet meer uniek omdat deze ingesteld moet worden op Ja (duplicaten OK). Je geeft helaas geen antwoord op mijn voorstel/vraag in de pdf bijlage onderaan of weet je iemand anders.
Het is toch geen uitzonderlijke situatie die ik wil. Ik ga vrezen dat ik er niet uitkom en mijn project moet stoppen.
 
Ik ga vrezen dat ik er niet uitkom en mijn project moet stoppen.
Het was ook maar een ideetje; ik zou je db moeten zien om te beoordelen wat er fout gaat; we hebben het hier over standaardfunctionalteit die ik al honderden keren zonder problemen gebouwd heb. Ik zou er mijn project in ieder geval niet op stopzetten :).
Maar je zult dus moeten wachten tot ik weer thuis ben, en een db kan bekijken op de laptop. Wat je vraag betreft: daarvoor geldt natuurlijk hetzelfde; zolang ik geen laptop tot mijn beschikking heb kan ik niks doen. Je probleem zou ook dermate simpel moeten zijn dat ik daar best belangeloos naar wil kijken. Ik vermoed dat ik het binnen 5 minuten heb opgelost. Of in ieder geval kan aanwijzen waar het probleem zit. Wat dan nog niet gelijk staat aan een oplossing :).
 
Bedankt en een super reactie. Geef je svp. aan wanneer je kunt kijken? Als je wat nodig hebt, dan verneem ik dat graag.
 
Access formulieren koppelen

Ik heb de database weer teruggezet naar uniek. PandID in tabel meterkast naar geen duplicaten. Bijgevoegd de proef database in zip format.
 

Bijlagen

  • Proef.zip
    78,9 KB · Weergaven: 15
Ik ben volgende week weer thuis, dus dan heb ik wel tijd. Tot zolang moet je dus geduld hebben, al zijn er meer helpers die het op (moeten) kunnen lossen, dus wat mij betreft is het volgende week al lang klaar :).
 
Access formulieren koppelen

Hallo Octafish, Tot op heden hebben zich geen andere helpers gemeld en is mijn hoop op je gevestigd. Heb je inmiddels gelegenheid? Ik heb een proef database bijgevoegd. Zo niet, dan hoor ik dat graag. Het is de bedoeling dat van de tabel pand een formulier beschikbaar is met algemene gegevens van het pand en aan ieder pand één tabel is gekoppeld met een formulier waarbij aanvullende gegevens van het pand kunnen worden ingevuld. (form Pand, knop 13 is VBA en knop Meterkast is een macro) In de "echte" database worden dat straks meer aan het ene Pand gekoppelde tabellen en formulieren. Als je zou willen kijken, graag. Alvast bedankt.
 

Bijlagen

  • Proef.zip
    78,6 KB · Weergaven: 18
Ik ben weer thuis, en nog vrij vandaag. Dus ik zal er zo even naar kijken. Is deze db anders dan de vorige?
 
Nou, dat was snel opgelost :). Eigenlijk hoefde ik niks te doen, en jij dus ook niet. Zoals ik in bericht #8 al aangaf, heb je geen probleem als je een subformulier gebruikt voor (in jouw voorbeeld) de meetgegevens. Dan kun je gelijk een record aanmaken voor de tabel Meterkast. Doordat PandID daar een sleutelveld is, kun je maar één record aanmaken voor een pand (de één-op-één relatie); bij een tweede record krijg je een foutmelding. Dat is niet een heel erg nette oplossing, maar hij werkt wel. Je kunt dat nog wel afvangen door een functie die het toevoegen van records uitzet als er al een record is. Maar dat staat dus los van je vraag.

De twee knoppen doen het dus niet als er geen record is in de tabel Meterkast. Dat is logisch, want je geeft een filter mee om dat formulier te openen, en dat werkt niet als er geen pand is. De code/macro werkt prima (beide knoppen dus) als er wél een record is. Maar dus niet als je nog geen record hebt in Meterkast. In dat geval zul je hem zelf moeten aanmaken, want anders heb je een probleem. Nogmaals: met een (doorlopend) subformulier heb je dat gezijk niet.
Je moet dus eerst uitzoeken voordat je Meterkast opent, of het record al bestaat. Zo niet: aanmaken, zo wel: openen met het filter. Dat gaat zo:

Code:
Private Sub Knop13_Click()
    If Nz(DLookup("Pand_ID", "Meterkast", "Pand_ID = " & Me.PandID), 0) = 0 Then
        DoCmd.OpenForm "Meterkast", , , , acFormAdd, acDialog, Me.PandID
    Else
        DoCmd.OpenForm "Meterkast", , , "Pand_ID = " & Me.PandID, , acDialog
    End If
End Sub

Je zoekt dus het pandnummer op in de tabel Meterkast, en als dat niet bestaat (waarde =0) open je het formulier in de Toevoegmodus, met het huidige PandID als OpenArgs parameter. Bestaat die wel (waarde hoger als 0) dan open je het formulier dus met het filter. Vervolgens moet je (bij het eerste geval) de parameter toewijzen aan het veld PandID, want dat wil je nu opslaan. En tevens de rest invullen. Dat doe je bij het laden van het formulier, dus daar krijg je deze code:
Code:
Private Sub Form_Load()
    If Not Me.OpenArgs = vbNullString Then Me.Pand_ID = Me.OpenArgs
End Sub

En dat werkt dus prima.
 
Access formulieren koppelen

Veel dank dat je zo snel reageerde. Ik heb je oplossing toegepast en heb de volgende opmerkingen.

a) Ik heb je twee VBA subs na elkaar onder de knop 13 geplaatst. Er is ontstaat een compileerfout (Pand_ID) "Kan de methode of gegevenslid niet vinden" en wordt aangegeven in de regel van de 2e sub: If Not Me.OpenArgs = vbNullString Then Me.Pand_ID = Me.OpenArgs. Ik heb dit aangepast naar PandID maar kan nog niet overzien of dat correct is. De compileerfout is weg.

b) Wanneer ik knop 13 gebruik, met je VBA code, dan krijg je een subformulier Meterkast. Ik zie geen gerelateerd Pand_ID nummer op het formulier ingevuld. Als ik waarden in het formulier invul, kan ik het formulier niet sluiten via het kruisje zonder de foutmelding: "U kunt geen record toevoegen of wijzigen voor de tabel Pand een gerelateerde record is vereist". Ik heb een knop Opslaan & Afsluiten (Macro) toegevoegd zodat ik het formulier Meterkast kan sluiten. Dit wil ik straks ook toepassen om geopende formulieren te kunnen sluiten. Het opslaan met de knop geeft ook de foutmelding: "U kunt geen record toevoegen of wijzigen voor de tabel Pand een gerelateerde record is vereist". De enige uitweg is de volledige database af te laten sluiten. De tabel Meterkast is niet aangepast.

c) Het is wel de bedoeling, als het principe gaat werken, dat aan tabel/formulier Pand meerdere tabellen/formulieren (voor woonkamer, keuken, etc.) worden gerelateerd. Uit je uitleg maak ik op dat dat niet gaat. Hoe dan wel.

Wat kan ik nog doen om straks te kunnen juichen?
 
Begin eens met mijn oplossing toe te passen zoals ik hem bedoeld heb. Dit:
Ik heb je twee VBA subs na elkaar onder de knop 13 geplaatst.
Is dat namelijk niet! Ik schreef dat je de tweede code moest plaatsen in het formulier Meterkast. Dat heb je dus niet gedaan. Uiteraard werkt de code niet op het formulier Panden, want daar is hij niet voor bedoeld :). Lees dus mijn bericht nog eens door, zou ik zeggen.
 
Begin eens met mijn oplossing toe te passen zoals ik hem bedoeld heb. Dit:
Ik heb je twee VBA subs na elkaar onder de knop 13 geplaatst.
Is dat namelijk niet! Ik schreef dat je de tweede code moest plaatsen in het formulier Meterkast. Dat heb je dus niet gedaan. Uiteraard werkt de code niet op het formulier Panden, want daar is hij niet voor bedoeld :). Lees dus mijn bericht nog eens door, zou ik zeggen.
 
Access formulieren koppelen

Dank, ik begrijp je oplossing alleen zie ik niet hoe ik de tweede sub moet verwerken. Hoe en waar breng ik deze tweede code in Meterkast aan?
 
Deze code
Code:
Private Sub Form_Load()
    If Not Me.OpenArgs = vbNullString Then Me.Pand_ID = Me.OpenArgs
End Sub
Zet je in het formulier Meterkast. (uiteraard op de VBA pagina). Hij draait als je het formulier opent, en de code kijkt of er een waarde staat in de OpenArgs variabele. Zo ja (en dat is het geval als je hem opent vanuit een nieuw PandID in Meterkast) dan zet hij de waarde in het tekstveld. Is het veld leeg (de andere optie: je start vanuit een bestaande PandID) dan heb je dus het formulier gefilterd geopend.
 
Access formulieren koppelen

Volgens mij ging de verzending van mijn antwoord niet goed en dus opnieuw.
Ik heb in formulier Meterkast onder "Hulpmiddelen voor databases" en item "Visual Basic" de tweede code toegevoegd. Er staat echter al de eerste VBA code voor knop 13 van het formulier Pand en nu dus weer de twee codes achter elkaar. Als ik het zo zie heb ik nu dezelfde situatie als dat ik eerder schreef in het forum (2 juli) over de tweede codes die ik in het formulier Pand onder knop 13 achter elkaar plaatste en niet goed werkte. Ik krijg weer de complieerfout voor Pand_ID en kan de door mij ingevulde gegevens niet opslaan en krijg daar ook weer de foutmelding van. Het werkt niet, geeft foutmeldingen en dus zal ik je oplossing "uiteraard op de VBA pagina" niet goed begrepen hebben en fout hebben verwerkt. Maar hoe dan wel? We zijn er bijna, nog een klein zetje graag, alvast bedankt.
 
Ik zal zo de db die ik gemaakt heb posten, dan is het wellicht duidelijker.
 
Dat moet ik terugnemen, want mijn laptop werkt niet goed meer sinds een systeemherstel dit weekend. Ik moet dus alle software weer opnieuw installeren. Ik zal morgen de code opnieuw in je voorbeeldje plakken, want zoals ik eerder al schreef: het is maar een paar minuten werk.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan