Data invoeren via extern formulier gekoppeld aan ander formulier

Status
Niet open voor verdere reacties.

Squeezer

Gebruiker
Lid geworden
5 jul 2017
Berichten
17
Ja, hoe moeilijk wil je het maken........

Ik heb een formulier waarin een subformulier zit waarin notities worden weergegeven.

Screen Shot 08-31-17 at 03.02 PM.PNG

Dit subformulier is een doorlopend formulier waarop het onderwerp van een notitie staat. De gegevens zijn geblokkeerd. Door op het onderwerp te klikken opent een popup met de eigenlijke inhoud van de notitie.

Screen Shot 08-31-17 at 03.19 PM.PNG

Op deze wijze zijn de gegevens niet aan te passen. Werkt uitstekend. :D

Nu wil ik middels een derde formulier gegevens invoeren in de tabel. Wanneer ik op het hoofdformulier sta klik ik op de knop Nieuwe notitie en deze opent een invoerformulier.

Screen Shot 08-31-17 at 03.03 PM.PNG

Tot zo ver gaat het goed. Echter, bij het opslaan na het invullen wordt de data niet gekoppeld aan het openstaande hoofdformulier (lees bedrijf) maar komt wel in de tabel terecht. :shocked:

Hoe krijg ik het voor elkaar dat het invoerformulier direct wordt gekoppeld aan het openstaande hoofdformulier/de gegevens in de tabel worden gekoppeld aan het juiste bedrijf? :confused:
 
Laatst bewerkt:
Echter, bij het opslaan na het invullen wordt de data niet gekoppeld aan het openstaande hoofdformulier (lees bedrijf) maar komt wel in de tabel terecht.
Hier klopt iets niet in je redenering: als je subformulier is gekoppeld aan je tabel, en je via het derde formulier de nieuwe data in die tabel krijgt, is het onmogelijk dat je het nieuwe record niet in je subformulier te zien krijgt. Tenzij een onderdeel van je code is om de koppeling weg te gooien. Maar dat lijkt mij een onzinnige exercitie. Normaal gesproken zou je, als je de formulieren sluit en opnieuw opent, het record dus gewoon moeten zien.

De oorzaak ligt heel simpel. Een formulier opent met een gefixeerde recordset. Je ziet dus de status van de recordset op het moment van openen. Manipuleer je gegevens via dat formulier, is er niks aan de hand, want die wijzigingen zie je gelijk terug in zowel tabel als formulier. Maar jij doet wat anders: je opent het (sub)formulier en voegt dan via een ander formulier een record toe. Dat nieuwe record wordt dan nooit gezien door de recordset die al eerder was geopend. Je zult dus, na het sluiten van het toevoegformulier, een requery moeten doen op het oorspronkelijke formulier om de data te verversen.
 
Naar alle waarschijnlijkheid zit er dan iets niet goed in mijn code. Het is idd de bedoeling de ingevoerde data te zien in het subformulier nadat ik het invoerformulier sluit.
Ik open dit invoerformulier via een macro in een nieuw record. Dit is de reden dat ik geen data in dit invoerformulier heb staan. Bij het sluiten komt de data wel in de tabel te staan, echter niet gekoppeld aan het bedrijf.
Het lijkt er op dat ik ergens de koppeling met de tabel niet goed heb staan, ik kan het echter niet achterhalen.

Wellicht goed te weten dat ik met twee databases werk. Een met de bedrijfsinfo, gekoppeld aan het hoofdformulier en een met de bedrijfsnotities, die gekoppeld is aan de beide andere formulieren. De databases hebben een relatie van een op veel (een bedrijf met veel notities)

Bekijk bijlage Groenteboeren.zip
 
Laatst bewerkt:
Wellicht goed te weten dat ik met twee databases werk. ... De databases hebben een relatie van een op veel (een bedrijf met veel notities)
Even een misverstand uit de weg ruimen, want dat zou het antwoord vertroebelen. Werk je met twee databases of met twee tabellen? Databases hebben geen relatie met elkaar, en die kun je dus ook niet leggen. Tabellen wel: de tabel [Bedrijfsinfo] (met unieke sleutel op bedrijf) kan een één-op-veel relatie hebben met de tabel [Bedrijfsnotitie] waarin je de bedrijfssleutel terug laat komen. Staan de tabellen in aparte databases, dan wordt het een heel ander verhaal.

Werken met macro's is niet mijn specialiteit (en dan zeg ik het heel beschaafd). Ik werk altijd met VBA code omdat je daar veel meer mee kan doen, en het veel logischer werkt. Zeg maar het verschil tussen het Franse elftal en het Nederlandse :). Al is het met beide technieken mogelijk om een nieuw record aan te maken. Maar met VBA kun je een het formulier parameters meegeven zodat je velden gelijk kunt vullen. En dat is in dit geval dus wel zo handig, begrijp ik.
Overigens zou de hele mikmak (en vraag) niet nodig zijn als je het Notities formulier als (doorlopend) subformulier op het hoofdformulier (Bedrijfsinfo) zet, want dan wordt het sleutelveld automatisch ingevuld en zijn de formulieren dus ook goed gekoppeld.
 
Nog voordat ik je antwoord had gezien heb ik een voorbeeldbestandje (Groenteboeren) aangemaakt en toegevoegd aan mijn voorlaatste bericht. Hierin zit exact hetzelfde probleem. Wellicht wordt het dan duidelijk. Ik ben niet zo goed met de juiste termen.
Wanneer je het formulier frm_bedrijf opent en probeert een nog niet ingevoegd product bij te voegen (mandarijnen), wordt het vanzelf duidelijk wat er bij mij niet werkt.
Ik hoop dat je me kunt helpen of iig een goed alternatief kan voorleggen. Mocht het niet kunnen zoals ik wil, zal ik het wel in één tabel moeten zetten.
 
Laatst bewerkt:
1. Gelijk maar je 'relatie' probleem tackelen, want die deugt niet. Je hebt tussen [tab_bedrijf] en [tab_product] een verkeerde relatie gelegd die zo niet gaat werken. Om te beginnen: gebruik nooit outer joins in het Relaties venster, tenzij het echt moet. Altijd optie 1 gebruiken. Daarnaast is het essentieel dat je <Referentiële integriteit afdwingen> aanzet, anders is en blijft de relatie volkomen waardeloos en nutteloos.
2. Je hebt ervoor gekozen om geen unieke ID's te maken voor de bedrijven, maar dat te doen op basis van bedrijfsnamen, en dat is ook niet handig. Gebruik desnoods het Autonummerveld als sleutelveld, maar geen bedrijfsnaam, want die hoeft niet uniek te zijn.
3. Idem voor je producten, die hebben nu ook niet echt een codeveld als sleutel.

Ik zal er vanavond even naar kijken, want er zitten nog meer problemen in die ik nu even niet zo snel opgelost krijg.
 
Ik heb wat aanpassingen in de db gemaakt, en hem dus ingericht zoals ik het zou doen, met een werkend subformulier. Scheelt een boel sores.
 

Bijlagen

  • Groenteboeren.zip
    34,9 KB · Weergaven: 53
Ik zie dat je er (weer) de nodige aandacht aan hebt besteed. Bedankt daarvoor.
De voorstellen die je doet heb ik in mijn originele database gelukkig wel goed staan.
Ik krijg het echter, ook in jouw uitgewerkte voorbeeld, niet voor elkaar om een product toe te voegen middels de knop "product toevoegen" en daar is eigenlijk de hele vraag om begonnen.

Wat ik graag werkend zou zien is het volgende;

* open het formulier frm_bedrijf.
* ga naar een willekeurig bedrijf (Roelofs als voorbeeld)
* klik op de knop "product toevoegen". Hiermee wordt het formulier "frm_invoeren product" geopend.
* Type in dat formulier een nieuw product
* sluit het formulier "frm_invoeren product" middels de knop "sluiten" rechts naast het invoerveld.

Het product staat nu (eventueel na opnieuw openen van bedrijf Roelofs) uitsluitend geregistreerd in de producten bij bedrijf Roelofs.

n.b. Deze database (groenteboeren) is bedoeld als een vereenvoudigd voorbeeld van een database waarbij op deze manier notities bij een bedrijf worden toegevoegd.
 
Natuurlijk ben ik zelf ook het een en ander aan het proberen en ben nu zo ver dat, wanneer ik handmatig de klantID invoer in het invoerformulier de zaken wel gekoppeld worden en netjes in het subformulier worden weergegeven. Maar, zoals zo vaak ontstaat et weer een probleem.

Zodra ik het invoerformulier open dient dit klantID eigenlijk automatisch te verschijnen in het daarvoor bestemde veld.
Hoe kan ik daar voor zorgen?
Ik heb nu het volgende in het veld klantID staan: =[Formulieren]![frm_bedrijf].[KlantID] en het klant id verschijnt ook in het veld.

Wanneer ik echter het formulier sluit krijg ik de waarschuwing dat "De Microsoft Access-database-engine kan geen record vinden in de tab_bedrijf waarvoor de sleutel overeenkomt met de volgende velden: KlantID."

Ik ben dus erg dicht bij mijn oplossing, maar nu de laatste schrede.... Ik zoek verder en breng je op de hoogte zodra ik weer vorderingen heb gemaakt (als dat gebeurt :d )
 
De voorstellen die je doet heb ik in mijn originele database gelukkig wel goed staan.
Dit vind ik dus eigenlijk een vervelende opmerking, want dat houdt in dat je ons laat kijken naar een structuur die niet overeenkomt met jouw eigen situatie. En dat betekent dat wij (ik in ieder geval) energie steken in in het constateren van 'fouten' die er in werkelijkheid niet zijn. Dat is jammer van onze tijd, lijkt mij :). We zijn, om jouw goed te kunnen helpen, uiteraard niet afhankelijk van jouw productiegegevens, dus als je een db meestuurt, dan liefst met dummy data. En we hoeven meestal ook geen bakken vol records in de tabellen te hebben om iets te kunnen constateren. Wat dus wel essentieel is, is dat de db die je post qua opzet overeenkomt met jouw situatie.
 
Ik begrijp wat je zegt. Ik had het idee dat een vereenvoudigde versie voordelen zou hebben, maar dat heb ik dus duidelijk verkeerd beoordeeld. :eek: Mijn verontschuldigingen.

Hierbij dan een kopie van het originele bestand, ontdaan van de ingevoerde gegevens. Ik hoop dat je me alsnog wilt helpen.

Voor alle duidelijkheid, ik ben bezig met de het formulier frm_bedrijf met de daarbij behorende formulieren. Het persoonsdeel wil ik aanpakken zodra ik het bedrijfsdeel op orde heb.
 

Bijlagen

  • DatabaseHelpMij.zip
    563,7 KB · Weergaven: 39
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan