Relaties

Status
Niet open voor verdere reacties.
Het blijkt dat de relatie zonder referentiiële integriteit moet.
Sorry hoor, maar dat is volslagen onzin. Peter is nogal mild in zijn commentaar op jouw opmerkingen, maar iemand moet je toch de waarheid vertellen, want anders zie je nooit het licht. Relaties zonder Referentiële Integriteit zo’n volslagen nutteloos. Dan kun je namelijk óók de relatie leggen tussen [Serienummer] en [Behuizing Compleet]. Probeer maar: maakt voor je database niets uit. Dan ‘werkt’ het volgens jou nog steeds goed. Nou, nee dus. Je kunt, bij wijze van spreke, net zo goed tussen twee tabellen een relatie leggen tussen de velden [Voornaam] en [Schoenmaat]. Volkomen nutteloos, zeg je? Klopt. Maar dat is jouw relatie nu ook.

Het feit dat de constructie niet werkt als je RI aanvinkt, betekent niets meer en nets minder dan dat je een probleem hebt in de database. En dat gaat zichzelf niet oplossen. Zul je toch écht op moeten lossen!
 
Hoho ik heb mijn vraag niet gesteld op dit forum om tot de grond afgebrand te worden.......ik ben geen expert (zie eerste bericht).
Dus het antwoord van Peter is niet mild maar normaal!!!! Ik stel een vraag omdat ik iets niet snap, en ja ik ga er zeker zelf mee bezig want ik snap ook wel dat het anders zou moeten maar ik zou graag willen horen wat het zou kunnen zijn, waarom het zo (ook) werkt ipv mij vertellen dat ik het licht niet zie, kun jij mij vertellen hoe dit kan dan? Het zou in mijn optiek niet eens MOETEN werken.......maar jullie zijn experts hierin.
Als jij mij alleen voor dit "probleem" een oplossing kan bieden ben ik je zeer erkentelijk.
 
ik zou graag willen horen wat het zou kunnen zijn, waarom het zo (ook) werkt
We zijn helaas geen helderzienden en weten niet wat je inmiddels aan de database veranderd hebt. Dus .....................
 
Beste Peter, nee dat snap ik heel goed. Ik ga zelf eerst weer aan de knutsel, jullie informatie heeft me zeker vooruit geholpen. Ik heb ook heel veel respect voor jullie met zo enorm veel kennis, ben stiekem en beetje jaloers . Ik reageerde misschien iets te agressief maar het bericht van OctaFish kwam bij mij verkeerd binnen. Ik laat me door niemand afzeiken. Super bedankt voor je hulp.
Fijne avond gewenst.
 
Ik laat me door niemand afzeiken.
Ik vrees dat je aan de moderne ziekte leidt waarbij niemand meer tegen eerlijke kritiek kan, en dan maar gelijk vind dat hij/zij wordt ‘afgezeken’ zoals je het zelf zegt. Ik heb je nergens ‘afgebrand’, laat staan tot de grond. Wél de (harde) waarheid verteld.

Databases bouwen is een vak, en op zijn minst is het nodig dat je jezelf de beginselen aanleert voordat je een db gaat maken. Dit in tegenstelling tot pakketten als Word en Excel waarbij je na het opstarten gelijk kan gaan werken. Al geldt ook hier dat enige kennis van het doel van het pakket wel handig is. Wil je het licht zien? Doe dan éérst een cursus!

Er zit een vette fout in jouw database, en vóórdat de database goed kan werken, moet die er uit. Zo simpel is het. Nogmaals: relaties zónder RI zijn nutteloos, in de betekenis van: hebben geen nut. Kun je net zo goed weglaten. Of vervangen door een tekstveld op een datumveld te koppelen. Mag namelijk allemaal, want het is van geen enkele betekenis.

Post een versie van de db zoals je hem nu hebt, en ik kijk er met plezier naar. Up to you!
 
Beste OctaFish,

Laten we het er op houden dat de de toon de muziek maakt ;). Dit is niet voor op een forum maar misschien wel duidelijkheid voor onze verdere communicatie. Ik ben geen expert maar het w een aantal jaren geleden twee online cursussen gevolgd via train2work. Ik heb access basis en access gevorderd gedaan en allebei positief afgerond, dus helemaal nieuw is dit niet voor me. Helaas is het voor mij niet mogelijk om een fysieke cursus te volgen omdat ik op één van de waddeneilanden woon. Online is dus voor mij een prima oplossing. Naast mijn werk als ambulancechauffeur (ieder zijn vak dan maar) probeer ik uit interesse meer te leren over access. Soms loop ik tegen "storingen" aan die ik niet weet of misschien niet kan weten. Dan is helpmij.nl een prima hulpmiddel. Ik ben erg leergierig en wil graag alles snappen waarom dingen zijn zoals ze zijn. Mijn interesse is erg breed, als ik alles wil doen wat ik interessant vind mag ik wel 300 jaar worden.

Ik doe mijn best en probeer de vragen die ik heb zo duidelijk mogelijk te vragen aan jullie als experts. Misschien zijn mijn vragen niet altijd even duidelijk maar dat hoor ik dan graag. Ik wil graag alles zelf oplossen en vraag alleen naar handvaten of "heb je hier aan gedacht".

Ik zal eerst zelf aan de knutsel om te kijken wat ikzelf kan doen. Lukt het echt niet? dan wil ik graag gebruik maken van je aanbod, lukt het wel dan hoor je het natuurlijk ook.

Ik wens je een fijne dag toe en tot later

Vriendelijke groet,
Richard
 
No hard feelings :). Ik heb zelf jarenlang trainingen Access (Basis, Gevorderd en Expert) gegeven, en één van de zaken die al in de Basiscursus zat was het werken met, en snappen van, de relaties tussen tabellen. En Referentiële Integriteit dus ook. Dat zat dan blijkbaar niet bij jou in de cursussen :). Hoe dan ook: een database bestaat bij de gratie van correcte data in de tabellen. En de ontwerper moet er voor zorgen dat die gegevens dus op de juiste manier worden opgeslagen. Vandaar dat ik zo hamer op dit punt, en ik je dus aanraad om in die ene relatie tóch RI af te dwingen, en vervolgens op zoek gaat om te kijken waaróm dat dan niet kan bij jou. Dat kan twee oorzaken hebben:
1. De gegevenstypen komen niet overeen (tekstveld koppelen aan getalveld, verkeerde types getalvelden, zoals Lange Integer aan Byte)
2. In de hoofdtabel ontbreken gegevens die je wél in de gekoppelde tabel wilt invoeren (KlantID 12 wil je invoeren in de Bestellingen, maar klantID 12 bestaat niet in tabel Klanten)

Beide problemen zijn simpel op te lossen. Waarschijnlijk in minder tijd dan ik nodig heb om dit bericht te typen :).
 
Overigens kan ik jouw geposte db niet meer ophalen, want de link doet het niet meer. En de db van xps351 gebruik ik liever ook niet, omdat daar ook al te weinig records in zitten om fatsoenlijk in te klooien. En ik zelf toch enigszins anders werk. Dus als je hulp nodig hebt, post dan in ieder geval een nieuwe database.
 
Relaties zonder Referentiële Integriteit zo’n volslagen nutteloos.

Misschien is dat bij Access zo, maar graag even erbij noteren dat overal FK constraints gaan leggen (of relaties met referentiële integriteit zoals het in access noemt) een slechte gewoonte is als je met databases gaat werken.
 
Overigens kan ik jouw geposte db niet meer ophalen, want de link doet het niet meer. En de db van xps351 gebruik ik liever ook niet, omdat daar ook al te weinig records in zitten om fatsoenlijk in te klooien. En ik zelf toch enigszins anders werk. Dus als je hulp nodig hebt, post dan in ieder geval een nieuwe database.

Ik ben helemaal overnieuw begonnen....het zal goed :cool:
Ik ben begonnen met een simpele datatbase om die later uit te breiden (zonder opmaak ;)) En?......het werkt hier wel, nu heb ik deze methode ook overgezet op mijn bestaande database en daar werkt het niet. Kortom zo het nu lijkt komt het goed. Als ik (weer) hulp nodig heb laat ik weer van me horen. tot zover BEDANKT!

Fijne avond
 
Misschien is dat bij Access zo, maar graag even erbij noteren dat overal FK constraints gaan leggen (of relaties met referentiële integriteit zoals het in access noemt) een slechte gewoonte is als je met databases gaat werken.
Vind ik een behoorlijk ongenuanceerde uitspraak... Zeker in Access is het zo, en voor zover ik weet in alle databases is het zo dat je in tabellen die gerelateerd zijn aan een andere tabel altijd wilt kunnen verwijzen naar bestaande records in de gekoppelde tabel. Het heeft, om maar wat te noemen, totaal geen zin om in een bestelling bestelregels te maken voor artikelen die je niet levert (en die dus niet in je Artikelen tabel staan), of een factuur te sturen naar niet-bestaande klanten (omdat je geen Klantenrecord hebt). Common sense dus. Wél kan ik mij voorstellen (en dat heb ik ook regelmatig gebouwd) dat je de werkwijze hanteert dat je bij het aannemen van een bestelling éérst de bestelling noteert, en daarna pas de klantgegevens invoert. In dát geval heb je dus een bestelling gemaakt zónder direct klantID in te vullen, wat pas later gebeurt. Dan nog: ook in déze situatie heb je de koppeling op KlantID nodig, anders krijg je nooit een cent binnen.

Een andere situatie waarin je niet altijd een (extra) koppeling legt (althans: zou ik niet doen) is als je in een record altijd twee medewerkers vastlegt. Ik zie dan op HelpMij vaak dat beide velden dan zijn gekoppeld aan de medewerkers tabel. Niet nodig, je hoeft de RI maar één keer af te dwingen. En zo zijn er nog wel een paar voorbeelden te vinden waarin het niet perse nodig is om koppelingen te leggen. En je kunt natuurlijk ook altijd via VBA afdwingen dat er geen onjuiste gegevens worden opgeslagen.

Nog een tip: we hebben het hier over het Access forum. Het heeft dus geen enkele zin om in antwoorden te verwijzen naar oplossingen in andere database systemen. Bovendien hebben we daar een ander subforum voor :).
 
Goedenavond daar ben ik weer.

Ik ben met een nieuwe database bezig (met een probleempje) maar ik laat dit graag aan de experts over om even mee te kijken voor ik doorga. Ik weet niet wat ik verkeerd doe!

Acces opent om het contactform, door dubbel te klikken op het serienummer van het subformulier opent acces een uitgebreide form waar ik meer informatie van de AED in kan zetten. Daarnaast staat het archief waar de datums komen te staan wanneer de AED is getest. Ik kan, zo nodig, het formulier opnieuw bekijken en eventueel uitprinten.

Alleen als ik een nieuwe controle wil doen (knop boven) kan ik wel een nieuwe gegevens/controle invoeren maar ik MOET een AedID handmatig invullen. Dit omdat het een gerelateerde record is. Ik zou graag een leeg formulier openen waar access alleen het serienummer en de AedID automatisch worden ingevoerd/overgenomen.

Alle formulieren en tabellen moeten nog uitgebreid worden met meer vragen.
Hieronder de link naar mijn map waar ik de database in heb gezet.

https://1drv.ms/u/s!ApUQg9-IqiS1hvZLcZ1O6q1uTMDK3w?e=4GaH3J

Alvast bedankt voor jullie tijd.

Vriendelijke groet,
 
Alleen als ik een nieuwe controle wil doen (knop boven) kan ik wel een nieuwe gegevens/controle invoeren maar ik MOET een AedID handmatig invullen. ..... Ik zou graag een leeg formulier openen waar access alleen het serienummer en de AedID automatisch worden ingevoerd/overgenomen.

Hallo Richard,

Volgens mij heb ik in de database die ik bij post #14 meestuurde daar al een oplossing voor ingebouwd. In essentie is die hier nog steeds bruikbaar. Doe daar dus je voordeel mee.
Overigens neemt die oplossing alleen de AedID mee. Het serienummer is een kenmerk van een AED en hoort daarom niet in een keuring thuis.

Je knoppen en dubbelklikacties vind ik overigens verwarrend. De ene keer moet je dubbelklikken om in een detailscherm te komen (AED), de andere keer moet je eerst op een rij gaan staan en dan op een knop klikken (keuring).
De knop Nieuwe op het AedForm zette me trouwens ook op het verkeerde been. Ik dacht dat ik dan een nieuwe AED bij de klant (contact) toe zou voegen. Het bleek een keuring voor de betreffende AED te zijn (die je opslaat in de tabel ContoleTbl, maar dit terzijde).
 
Laatst bewerkt:
Goedemorgen Peter,

Bedankt voor je reactie en je aanbevelingen. Je hebt inderdaad gelijk dat het de ene keer dubbel klik is en de andere keer op een knop best verwarrend kan zijn, ik ga dit veranderen.

Ik heb je antwoord van #14 erbij gepakt en daar staan inderdaad codes in die jij hebt gemaakt. Er staan natuurlijk meer in maar ik vraag me alleen af waar ik die ( If Me.NewRecord Then Me.AedID = Me.OpenArgs ) moet plaatsen. Moet ik die onder een knop plaatsen, bij openen of bij laden van het formulier ControleFrm. VBA "lezen" is me een brug te ver maar als ik het goed begrijp open je een nieuwe (lege) record met deze code en neemt ie alleen de AedID over.

Vriendelijke groet,

Richard
 
Hallo Richard,

Het genoemde stukje code moet je inderdaad aanroepen bij het openen van het controleformulier.

OpenArgs gebruik ik om de waarde van AedID door te geven van het ene naar het andere formulier. Als je kijkt in de code waarmee het formulier aangeroepen wordt (DoCmd.OpenForm) zie je dat de me.AedID van dat formulier meegegeven wordt als parameter.
Ik heb het zo gemaakt de code alleen uitgevoerd wordt in het geval je bezig bent met het toevoegen van een nieuwe controle. Ik kan me voorstellen dat je hetzelfde formulier uiteindelijk ook wilt gebruiken voor het raadplegen van een bestaande controle. Dan is de ID al ingevuld en is de actie dus niet nodig.

Zoals ik eerder al schreef hoort het serienummer niet thuis in de controletabel.
 
Beste Peter bedankt voor je uitleg.

Ik heb de formulieren aangepast zodat je nu alleen nog maar met knoppen werkt, dit werkt inderdaad beter. Ik heb de volgende code achter de knop "nieuwe controle" gedaan maar hij neemt de AedID niet over :(, heeft de volgorde van commando's ook invloed?

Private Sub Nieuwe_controle_Click()

DoCmd.OpenForm "ControleFrm", , , , acFormAdd, , Me.AedID
DoCmd.GoToRecord acDataForm, "ControleFrm", acNewRec
If Me.NewRecord Then Me.AedID = Me.OpenArgs
End

End Sub

Groeten, Richard
 
De laatste regel hoort thuis in de gebeurtenis 'bij laden' van het formulier waarmee je de controle toevoegt. Daar moet de ID immers overgenomen worden. Het formulier krijgt de waarde via zijn OpenArgs aangeleverd.

De GoToRecord is overbodig. Bij OpenForm kan je al een parameter meegeven die ervoor zorgt dat het formulier in de toevoegmodus wordt geopend.
Zie https://learn.microsoft.com/en-us/office/vba/api/access.docmd.openform voor uitleg over de parameters (met name DataMode en OpenArgs)
 
Beste Peter,

Yes!......geweldig bedankt. Ik kan nu verder met (op) "bouwen".

Een heel goed weekend en nogmaals dank

Groeten, Richard
 
Ik was zelf al een tijdje bezig om het systeem een beetje te fatsoeneren, en aangezien ik mijn broddelwerk goed genoeg vind, hierbij de database :). Je zult zien dat ik het (in mijn ogen) overbodige subformulier heb vervangen door een veel handigere keuzelijst. Maar dat laat onverlet dat je jouw subformulier natuurlijk gewoon weer terug kunt zetten als je dat handiger en/of mooier vind.
 

Bijlagen

  • Controle_AED.zip
    76,8 KB · Weergaven: 16
Jemig OctaFish.....dat ziet er prachtig uit. Ik heb even stiekum in de VBA gekeken maar ik kreeg er gelijk een verhoogde hartslag van :d

Allemaal heel erg bedankt voor alle hulp. Voor nu is alles werkbaar en kan ik beginnen met het "vullen".

Nogmaals heel erg bedankt

Groeten Richard
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan