subformulier koppelen aan meerdere tabellen

Status
Niet open voor verdere reacties.

ReinHaakma

Gebruiker
Lid geworden
13 jan 2015
Berichten
27
LS

Hoop dat ik geen rare vraag stel, ben maar een amateur. Ik ben bezig met een database(je) voor een vrijwilligersorganisatie en wil graag een subformulier koppelen aan meerdere tabellen.
Versimpelde weergave: er zijn twee tabellen (jongere en maatje) en een subformulier met een eigen tabel matches. Ieder jongere kan verschillende maatjes hebben (met begin en einddatum van het traject). Iedere vrijwilliger kan meerdere trajecten hebben met jongeren (met begin en einddatum). De matches van beide wil ik graag als subform bij beide formulieren kunnen zien.
Ik raak een beetje de kluts kwijt hoe ik de koppelingen dan maak.

Bij voorbaat veel dank.

Groet,
Rein Haakma
 
Allereerst nog welkom bij HelpMij :)
Ik raak een beetje de kluts kwijt hoe ik de koppelingen dan maak.
Ik raak op mijn beurt een beetje de kluts kwijt bij je vraag: wat wil je precies? Een formulier kan gebaseerd zijn op een tabel, een query of niks. Gebruik je een query, dan maakt het niet zoveel uit of je één of meerdere tabellen gebruikt. Maar volgens mij gaat je vraag ook niet over 1 of meerdere tabellen in een subformulier. Dus kun je nog even uitleggen wat je wilt? Nog beter is natuurlijk als je ook een voorbeeldje kunt meesturen :).

En om je te behoeden voor de klassieke beginnersfout: je kunt een antwoord gewoon typen in het tekstvak <Snel reageren>. De Quote knop is niet bedoeld als antwoordknop :).
 
Veel dank voor de reactie, erg blij dat ik deze vraag hier mag stellen. Excuus dat ik de het niet goed uit heb gelegd.

Er zijn drie tabellen: jongeren, vrijwilliger en matches.
- De tabellen Jongeren en Vrijwilliger zijn de bron voor resp. de formulieren Jongeren en Vrijwilliger.
- De tabel matches is de bron voor het subformulier Matches.
- Het subformulier Matches is onderdeel van de formulieren Jongere en Vrijwilliger.

In het subformulier Matches van het formulier Jongere moet er een koppeling (via keuzelijst) gemaakt worden met de tabel Vrijwilliger. In het subformulier Matches van het formulier Vrijwilliger moet de gemaakte keuze in het corresponderende record zichtbaar zijn.

Anders gezegd: in de formulieren (Jongere en Vrijwilliger) moet de gemaakte keus corresponderen in het subformulier Matches.

Hoop dat dit iets duidelijker is.

Ik kan 100 kb als bijlage invoegen (hij is 225). Mag ik dat misschien mailen of is daar een andere manier voor...?
 
Laatst bewerkt:
Je kunt (heb je de db overigens al gecomprimeerd?) de db met winrar zippen in brokken van 100kb, en dan hoef je maar 3 bestandjes in te voegen. Of je zet het bestand op een fileshare als wikisend. Halen we 'm daar weg.
Overigens zou je probleem zonder meer en simpel op te lossen moeten zijn. Als je de genormaliseerd hebt, heb je in de tabel [Jongeren] een veld [PersoonID] en in de tabel [Vrijwilligers] een veld [VrijwilligerID]. Dit zijn sleutelvelden. In de tabel [Match] heb je dan in ieder geval een [PersoonID] en een veld [VrijwilligerID] staan, alsmede begin- en einddatum en wat je nog meer opslaat voor een traject. Een formulier frmMatch bevat dan alle velden, en dat formulier kun je dan zonder probleem naar het formulier frmJongeren slepen, waarbij Access zal koppelen op [PersoonID]. En het formulier frmVrijwilligers doet hetzelfde met het veld [VrijwilligerID]. Mag geen enkel probleem zijn.
 
Heel veel dank voor de reactie, en het mag geen probleem zijn.... dat is geruststellend (ik heb al de indruk dat ik iets wil wat eigenlijk niet kan).

Hij staat hier met de procedure zoals hierboven beschreven: https://www.dropbox.com/s/pnn2e42v53xkp2q/0.1 test.accdb?dl=0
Die koppeling lijkt Access niet te maken. Als ik van de tabel Matches een formulier laat maken, plaats hij wel automatisch de tabel Jongeren daarbij op, dat begrijp ik niet. Die heb ik er nu af gehaald...Ook als ik die laat staan veranderd het gegeven niet. Ik zal wel iets buitengewoon logisch over het hoofd zien als leek.
 
Laatst bewerkt:
Voordat ik naar een oplossing kan kijken, eerst een paar 'zaken van algemeen nut'. Zo constateer ik al gelijk dat je tabellen niet gekoppeld zijn. Zo zouden de tabellen [1 tabel jongeren] en [2 tabel vrijwilligers] gekoppeld moeten worden aan [6 matches], maar dat is nog niet gebeurd. Kán ook niet, want als je dat probeert, krijg je een foutmelding :). Er blijkt geen Referentiële integriteit te zijn tussen de koppelvelden, en dat is een stuk kwalijker dan dat de tabellen niet gekoppeld zijn. Dat laatste kun je namelijk met stricte regels op je formulieren nog wel ondervangen. Ga je in de tabellen kijken, dan blijkt er in [6 matches] een record te zitten met een waarde 0 in het veld [id jongere], en dat kan dus inderdaad niet: die waarde heb je niet (en zul je ook nooit hebben) in [1 tabel jongeren]. Het is een goede zaak om, voordat je records gaat invullen, eerst de relaties te leggen tussen de tabellen, dan kan dit niet gebeuren.

Volgende wat ik zou aanpassen: je gebruikt in het veld [aanmelding: naam verwijzer] een dubbele punt in de naam. Hoewel dat wel mag (anders had je het veld niet kunnen maken) is dat erg onhandig, want een dubbele punt is een gereserveerd teken in een database, en je kunt daar problemen mee krijgen later. Probeer die dubbele punt dus in namen te vermijden. Sowieso gebruik je érg lange veldnamen, en dat is, hoewel dus niet verboden, niet handig. Probeer veldnamen kort en bondig te houden, maar wel beschrijvend en liefst zonder spaties (nog zo'n teken waar je later problemen mee kan krijgen).
Daarnaast gebruik je voor het veld [aanmelding: naam verwijzer] een keuzelijst als invoer. Niet doen. Keuzelijsten die je baseert op een lijst met velden, zoals [wettelijk vertegenwoordiger2: soort] zijn prima (behalve dus naam, gebruikte tekens en lengte) maar een keuzelijst moet je niet baseren op een tabel, hoe handig Microsof je dat ook voorschotelt. In een tabel wil je altijd de opgeslagen waarden zien, en dat doe je nu dus niet. Je kunt dus ook nooit goed filteren op dat veld, want je hebt geen flauw benul wat je als filter moet invullen. In ieder geval niet wat je in het veld ziet staan! Keuzelijsten (met invoervak) moet je alleen op formulieren gebruiken! Nogmaals: als ze zijn gebaseerd op tabellen.

Het belangrijkste heb ik voor het laatst bewaard: je database is niet goed genormaliseerd. En dat kun je al zien aan een veld als [wettelijk vertegenwoordiger2: soort]. Je hebt namelijk óók de velden [wettelijk vertegenwoordiger1: naam], [wettelijk vertegenwoordiger1 soort], [wettelijk vertegenwoodiger1: telefoon 1] [wettelijk vertegenwoodiger1: telefoon 2] en [wettelijk vertegenwoodiger1: bereikbaarheid]. En dat dus * 2, want je doet dit voor 2 vertegenwoordigers. Dit roept allerlei problemen op. Het begint er al mee dat je maar 2 vertegenwoordigers kunt invoeren. Stel dat je ooit de behoefte krijgt aan een derde persoon, waar laat je die dan? Weer extra velden toevoegen? Nee, dat is niet de oplossing.

Volgende probleem dat op de loer ligt: als bij 3 jongeren dezelfde wettelijke vertegenwoordiger is benoemd, dan moet je voor alle personen in elk record dezelfde gegevens invoeren. Maar is de persoon 'Michael Stradivarius' dezelfde persoon als 'Michel Stradivarius' of 'Michael Stradievarius'? Wie het weet mag het zeggen... En je mag er toch vanuit gaan dat één persoon wel dezelfde telefoonnummers zal gebruiken. Of geef je die persoon bij elke nieuwe koppeling 2 nieuwe telefoons? Kortom: voor de vertegenwoordigers heb je een aparte tabel nodig, waarin je een VertegenwoordigerID als sleutelveld hebt, en waarin je alle velden zet die nu in [1 tabel jongeren] staan. Je verwijdert dus alle 10 velden, en je maakt een koppeltabel met daarin een verwijzing naar [Jongeren] en [Vertegenwoordigers] op basis van de sleutelvelden, en dan heb je deze situatie opgelost. Niet alleen kun je nu onbeperkt vertegenwoordigers loslaten op een persoon, je hoeft de gegevens ook niet meer elke keer opnieuw in te vullen.
Een vergelijkbaar probleem heb je in [3 tabel verwijzers] waarin je alle contactpersonen herhaalt. Dus die kun je op dezelfde manier opschonen. Ik zou overigens voor deze actie één tabel maken, waarin je alle personen zet met een extra veld wat de betreffende functie van de persoon is. Een mens is namelijk, ongeacht wat-ie doet, altijd een persoon met dezelfde soort gegevens (naam, telefoon, email etc). Dus dat mag je best in één tabel stoppen. Als iemand meerdere petten heeft, en dat vaker voorkomt zou ik het overigens gescheiden houden, al zou je nog een veld met meerdere waarden kunnen overwegen.

Genoeg huiswerk? :D
 
TOP !!!!!! Vanavond aan de slag. En ongelooflijk wat een service.
Ik kom er zeker op terug! Namens onze club heel veel dank alvast.

Vriendelijke groet,
R. Haakma
 
Ben benieuwd naar je volgende bijlage :). Zet daar dan ook wat dummy records in, want nu zijn je tabellen wel erg spaarzaam gevuld. En velden met 'eeeee' als inhoud zeggen ook niet zo heel veel. Als je formulieren en queries etc. gaat maken, wil je kunnen controleren of alles werkt, en of je de juiste gegevens ziet. En dan wil je niet moeten gokken of '45r45r' een voornaam is of een achternaam of een telefoonnummer :D.
 
Dat ga ik zeker doen...normaliseren, inrichten en heel goed testen voordat het live gaat dat is duidelijk. Er zitten nog erg veel fouten in dat is volkomen duidelijk. Dank voor de prima en uitgebreide feedback.
 
https://www.dropbox.com/s/hmfuxzia7wzge5u/02 relaties.accdb?dl=0

Ik denk dat met uw gedegen aanwijzingen de structuur nu wat beter is. Ik kan echter nog steeds niet doorvorsen hoe ik de subformulieren Matches en Rapportage koppel aan Jongeren, Vrijwilliger, Verwijzer en Gemeente op zo'n manier dat ik op de formulieren Jongere, Vrijwilliger en Verwijzer de onderlinge koppeling kan maken en in deze formulieren rapportage in kan voegen die dan bij alle drie (vanuit de koppeling) zichtbaar is. Wellicht moet het ID van de tabel jongere (als uniek id) dan op het navigatie formulier meelopen of iets dergelijks, maar dan kan ik de formulieren niet meer als lijst gebruiken (om info van Vrijwilligers enz in te voeren).....?
Ik kan niet meer dummies invoeren in de subsformulieren Matches en Rapportage omdat ik dan een foutmelding krijg, dat heeft met de onderliggende inrichting en relaties te maken omdat ik dat dus niet goed begrijp hoe ik dat moet doen.

Graag uw hulp zo mogelijk!
 
Laatst bewerkt:
Ik worstel een beetje met de relaties die je hebt gelegd; sowieso zitten er relaties in die niet te maken zijn (5tblcontactpersonen met 4tblgemeenten bijvoorbeeld), maar er zit ook een kringloop in tussen 6tblmatches en 2tblvrijwilligers naar 7tblrapportage en via 3tblverwijzers terug naar 6tblmatches. Daar gaat mijn hoofd van tollen :). In die lus zit ook een relatie met 4tblgemeenten (wat prima is) dus is snap ook niet waarom je er een zou leggen tussen 5tblcontactpersonen en 4tblgemeenten.
 
We zijn erg blij met de opmerkingen. Het ziet er naar uit dat er een eerste versie aan zit te komen door al deze gedegen input, die ook gebruikt gaat worden. Men is enthousiast. Misschien mag ik die nog es posten voor een soort van beoordeling op 'constructiefouten'.
Ik heb voor nu nog een vraag wat de beste manier om deze db te delen. Ik kom steeds tegen dat via dropbox dat niet een slim idee is (wel via een gedeelde map in het netwerk ?), hoe dat splitsen precies werk begrijp ik ook niet zo goed.
 
Als je wat feedback wilt over de opzet, dan mag je uiteraard altijd een voorbeeldje posten; dan kijk ik er in ieder geval wel even naar, en wellicht dat anderen ook nog handige tips hebben. Er zijn meer kenners actief :).
Een db delen via Dropbox is inderdaad geen goed idee. Sterker nog: dat gaat niet werken. Access heeft een fysiek bestand nodig, en bij Dropbox werkt dat alleen als je de Dropbox tool gebruikt die een lokale kopie neerzet op een computer. Gebruik met met meerdere mensen dezelfde dropbox, dan heb je meerdere versies van dezelfde bestanden verspreid staan. Dat werkt dus niet.
Als het om een bedrijfsoplossing gaat, dan is een algemene netwerkschijf een veel beter plan, mits iedereen daarbij kan. Maar dat is simpel in te richten met rechten. Dus de backend staat dan centraal, en elke gebruiker heeft dan een eigen frontend die is gekoppeld aan de backend. Het is wel handig als de padverwijzing voor elke gebruiker hetzelfde is, dus niet dat de ene gebruiker de map benadert als de H-schijf, en de volgende gebruiker diezelfde map als P-schijf ziet.
 
Daar ga ik mee aan de slag. Hier staat de versie zoals hij tot nu toe ontwikkeld is. Er komen nog wat rapporten in te hangen voor de overzichten end. De basis zou dit wel een beetje moeten gaan worden, mits ik geen gekke dingen heb gedaan uiteraard: https://www.dropbox.com/s/xmyalavnars1o2t/Support%20database%20pre%20release%20v.%201.0.accdb?dl=0

Sta zeer open voor alle tips en tops ! En nogmaals ben zeer onder de indruk van alle inspanningen die jullie hier verrichten, zonder dat was ik er in ieder geval helemaal in vastgelopen :)
 
Laatst bewerkt:
Ik vermoed dat je ergens een link gepland had, maar ik zie 'm niet. Kun je daar nog even naar kijken?
 
Je snapt het concept geloof ik nog niet helemaal: we zijn hier allemaal vrijwilligers, en dat betekent dat je dus afhankelijk bent van de privé tijd van de helpers. Dan kan het wel eens gebeuren dat als een vraag even wegzakt in de lijst, hij vergeten wordt. In dat geval kun je als steller de vraag best even wakker schudden, zodat-ie weer onder de aandacht komt. Maar dat wil dus helemaal niet zeggen dat niemand je wil helpen.
Maar als je de vraag toch wilt sluiten, dan mag (nee: moet) je dat zelf doen via de daarvoor bestemde optie in de blauwe menubalk.
Overigens werkt de zoekfunctie in deze db wel goed (zie deze vraag).
 
Het zal de stress zijn om precies uit te leggen wat er aan de hand is. In dit draadje heb ik al en grote aanslag op beschikbare tijd gedaan. Ik wil echter liever niet in de irritaties belanden en dat doe ik blijkbaar wel. Ik zoek even op een ander manier verder, nogmaals dank.
 
De ene vraag is de andere niet, en je moet je zeker niet bezwaard voelen om een lastige(re) vraag te stellen. Een probleem dat voor jou zo klaar als een klontje is, hoeft dat voor de helpers natuurlijk helemaal niet te zijn, want wij kennen jouw situatie verder niet, en weten dus ook niet hoe de db gebruikt wordt. Irritaties komen op het forum wel vaker voor, als je zo door de verschillende forums bladert, maar de intentie is bij iedereen toch om een vraagsteller zo goed als mogelijk te helpen. Dus laat dat alles je er niet van weerhouden om gewoon je vragen te (blijven) stellen. Uiteindelijk komt er meestal wel een (bruikbare) oplossing uit :).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan