Velden invoegen uit verschillende tabellen

Status
Niet open voor verdere reacties.

Cardiotek

Gebruiker
Lid geworden
31 mrt 2010
Berichten
9
Beste forumers,

Het volgende probleem doet zich voor in mijn database. Ik heb 2 tabbelen gemaakt waarin verschillende informatie staat. Beide tabellen hebben een apart formulier. In het ene formulier toont het productnummer en de bijbehorende gegevens van het product inclusief standplaats en adres. In het andere formulier staan gegevens van diverse distributeurs. Een product kan aangeschaft worden door een distributeur en dus zou ik graag een derde formulier per record maken waarbij ik invulvelden gebruik om zowel de gegevens van formulier/tabel product als ook de gegevens van formulier/tabel distributeur kan invullen. Door middel van een tabblad onderscheidt ik deze verdeling. Het toevoegen van velden uit de tabel product is geen probleem. Echter als ik velden wil toevoegen uit mijn tabel distributeurs wil mijn database een relatie maken. Die relatie heb ik al eerder geprobeerd aan te leggen buiten dit formulier om, maar ergens krijg ik steeds de foutmelding bij het invullen van gegevens dat de velden niet met elkaar overeenkomen. Afgezien daarvan kan ik wel velden invoegen uit de tabel distributeurs, maar wanneer ik overga naar de viewmode zijn alle velden niet meer zichtbaar in mijn formulier. (Het gaat hier nog steeds om het formulier om per record gegevens in te vullen.)

Hoe kan ik een goede relatie maken tussen de velden (formulier distributeurs) id van distributeurs en (formulier product) serienummer? Beide zijn nummerieke velden.
En hoe moet ik de velden toevoegen uit mijn secundaire tabel distributeur zonder dat hierdoor de zichtbaarheid van mijn andere velden wordt aangetast? (Aangezien de tabel product mijn startpunt is van deze database)

Ik hoop dat iemand mij kan helpen. Ik stoei er al een paar dagen mee.

Groetjes,
Nathalie
 
Als je de foutmelding krijgt dat de gegevens niet overeen komen, dan kan dat verschillende oorzaken hebben. Om met de meest logische te beginnen: je probeert bijvoorbeeld een tekstveld te koppelen aan een numeriek veld. Dat kan uiteraard niet.
Ook het koppelen van twee numerieke velden kan op de melding stuiten, als je bijvoorbeeld een Numeriek Decimaalveld probeert te koppelen aan een Numeriek veld van het type Lange Integer. Ook dat zal niet lukken. De derde oorzaak is dat de velden wel kloppen, maar dat de gegevens in de hoofdtabel niet te koppelen zijn aan de gegevens in de gerelateerde tabel, omdat er in de gerelateerde tabel recordverwijzingen staan die niet voorkomen in de hoofdtabel.
Als ik dit lees:
Hoe kan ik een goede relatie maken tussen de velden (formulier distributeurs) id van distributeurs en (formulier product) serienummer?
zie ik een probleem van de laatste categorie, want je kunt een DistributeursID uiteraard nooit koppelen aan een Product serienummer. Dat zijn twee heel verschillende gegevens.
Misschien kun je een plaatje uploaden van de relaties (of tabellen) zoals ze nu bestaan in de db, dan kunnen we daar wat meer van zeggen.
 
Beste Michel,

Bijgaand stuur ik de afbeeldingen van de tabellen die betrekking hebben op bovenstaande vraag. Als ik het dus goed begrijp kan ik alleen een distributeurs id aan een ander id koppelen?! Het punt is dat ik graag in het formulier EP-tracers ook de gegevens wil hebben van de distributeur, zonder dat deze in de tabel zijn verwerkt van de EP-Tracers. Het is uiteindelijke de bedoeling dat ik de database zo inricht dat bij het invullen van de naam van de distributeur id, de rest van de velden automatisch wordt toegevoegd. Zover ik het nu begrepen heb, moet ik hiervoor een relatie maken en mij leek het handigste om de relatie te maken tussen de distributeur id en het serienummer, aangezien 1 distributeurs meerdere serienummers kan hebben verkocht (1 to many). Maar zo te horen zit ik dus helemaal fout. Ik hoor graag hoe ik dit toch zover kan krijgen of wat ik moet veranderen.

Alvast bedankt.

Groetjes,
Nathalie
 

Bijlagen

  • Tabel EP-Tracers.jpg
    Tabel EP-Tracers.jpg
    91,7 KB · Weergaven: 56
  • Tabel Distributers.jpg
    Tabel Distributers.jpg
    92,2 KB · Weergaven: 57
Wat mij opvalt als ik de plaatjes bekijk, is dat je geen van de velden als Sleutel hebt gedefiniëerd. Bij hetl leggen van Relaties is dat echter van groot belang. In je tabel Distribiturs heb je bijvoorbeeld het veld ID. Dit is weliswaar een Numeriek veld, en de Indexwaarde staat wel goed, maar het veld is nog geen Key. Dus dat moet je in ieder geval nog doen. Op basis van een Sleutelveld wordt straks de één-op-veel relatie gelegd.
En dat geldt dus ook voor de andere tabel; daar heb je ook geen veld als Sleutelveld gedefinieerd.
Als je dat gedaan hebt, en je probeert de relaties opnieuw te leggen, kun je nog steeds tegen een probleem aanlopen. Je moet daarvoor (dat moet zowiezo gebeuren) de optie <Referentiële Integriteit afdwingen> aanvinken. Als je dat gedaan hebt, en je klikt op OK, kan het zijn dat de relatie nog steeds niet gelegd kan worden. In dat geval zitten er in de gerelateerde tabel al gegevens die je niet hebt in de hoofdtabel (Distributers). De melding krijg je overigens niet als de Ref. Integriteitvink uit staat. Maar dat is dus niet de bedoeling...
Probeer dit dus eerst, en dan horen we wel weer of het is gelukt.
 
Ik heb wat algemene basis kennis van Access en een dik boek, maar dat blijkt toch niet genoeg te zijn.

Ik loop nu eerst al tegen het probleem aan dat ik geen one to many relatie kan maken. Acces maakt er automatisch een one to one relatie van omdat ik in beide tabellen een primairy key heb gedefinieerd. Op het moment dat ik het ID van de distributeur wil wijzigen waarbij duplicaten zijn toegstaan (volgens de oude acces bijbel van 2000) kan ik geen gebruik maken van de primairy key. (Immers bestaat de redenatie dat 1 distributeur meerdere serienummers kan hebben verkocht.) Wat nu?

Groetjes
Nathalie
 
Waarschijnlijk probeer je de twee sleutelvelden van de tabellen aan elkaaar te koppelen; dit levert inderdaad een één-op'één relatie op. De bedoeling is, dat je in de gerelateerde tabel een veld DistributerID hebt, dat eventueel wel geïndexeerd mag zijn, maar dan met de optie Ja <(Duplicaten OK)>. Dit veld bevat straks de ID waarde uit de tabel Distributer. En dan heb je dus wel een één-op'veel relatie.
 
Ontzettend bedankt! Ik had al een klein vermoeden dat het zoiets zou zijn. Soms zijn de makkelijkste oplossing het moeilijkst te vinden. Het is in ieder geval gelukt om de relatie op de juiste manier te creeren en het werkt. Door de relatie heb ik het probleem voorkomen dat mijn formulier leeg blijft als ik de velden uit de nieuwe tabel toevoeg.

Als ik nogmaals gebruik mag maken van je expertise, want nu blijf ik toch met een andere vraag zitten die ik helaas door zoeken via internet nog niet duidelijk heb kunnen beantwoorden.

Ik zou graag bij het selecteren van de distributeur ID willen zien dat de andere velden automatisch aan-/ingevuld worden. Dat is namelijk het hele idee achter deze tweede tabel. Hoe kan ik dit het beste doen?

Groetjes,
Nathalie
 
Daar zijn op dit forum wel een aantal vragen over te vinden ;) Je kunt een tekstvak binden aan een keuzelijst, zodat de gekozen waarde getoond wordt in dat tekstvak.
De basisformule daarvoor is het volgende:
stel de <Besturingselementbron> van het tekstvak als volgt in: =Me.[cboDistributor].[Column(1).
Hierbij ga ik ervan uit, dat het eerste veld van de keuzelijst het Sleutelveld bevat. Deze vraag je overigens op met Column(0). Het tweede veld is dan kolom 1, en zo voort.
Als je de formule via Besturingselementbron toepast, kun je de waarde in het tekstvak niet meer opslaan in je tabel. Wil je dat wel, dan zul je een <Na Bijwerken> gebeurtenis moeten hebben op de keuzelijst, die er ongeveer zo uitziet: Me.txtNameDistributor.Value=Me.[cboDistributor].[Column(1)
Dus redelijk vergelijkbaar.... Door het via de AfterUpdate te doen, hou je het Besturingselementbron vrij voor een veld in de tabel, maar vul je het tekstveld dus met de geselecteerde waarde.
 
Dit gaat mij echt boven mijn pet uit. Ik heb het bovenstaande geprobeerd uit te voeren. Ik kom dan in de VBA programmering uit omdat access bij After Update alleen de keuze heeft voor een event procedure. Hierin heb ik de gebeurtenis overgenomen, maar ik krijg een foutmelding wanneer ik deze wil uitproberen in mijn formulier (zie bijlages). Omdat mijn sleutelveld de ID van de distributor is heb ik eens geprobeerd om dit te veranderen, maar daar kom ik al helemaal niet mee uit. En nu weet ik het echt niet meer. :shocked:

Even voor mijn beeldvorming: je hebt het over een keuzelijst, wil je daarmee aangeven dat ik het tekstvak moet veranderen in een combobox of heb je het dan gewoon over de mogelijkheid om een keuze te maken uit de diverse distributeurs?

Groetjes,
Nathalie
 
Was natuurlijk handig geweest als ik gelijk de bijlage had toegevoegd! :o

Groetjes,
Nathalie
 

Bijlagen

  • Form Detail EP-Tracer.jpg
    Form Detail EP-Tracer.jpg
    93,5 KB · Weergaven: 45
  • Form Detail EP-Tracer ERROR.JPG
    Form Detail EP-Tracer ERROR.JPG
    86 KB · Weergaven: 34
Da's altijd handig ;)
Je hebt in ieder geval de juiste plek gevonden waar je het moet gaan aanpassen, dus het begin is er! Als ik het over een Keuzelijst heb, dan is dat inderdaad een combobox. Je kunt van elk tekstvak een combobox maken, via het menu <Format>. Als je dat gedaan hebt, dan is de volgende stap aangeven wat de Rowsource moet worden van de combobox. Je moet deze namelijk ergens mee vullen, anders kun je net zo goed een tekstvak blijven gebruiken. In jouw geval zou ik 'm koppelen aan de tabel Distributors, waarbij je dan een aantal velden uit die tabel toevoegt. Als eerste neem je meestal het ID veld uit de tabel, en verder pak je dan een aantal velden die je straks terug wilt zien als je een selectie gaat maken. Dus meestal de naam, adres etc. Maakt niet uit hoeveel kolommen, dus dat mag je zelf weten.
Het aantal kolommen is wel belangrijk, want dat moet je ook instellen op de nieuwe keuzelijst. Als je dus 5 kolommen hebt, dan stel je dat in bij <Aantal kolommen>. Omdat je de eerste kolom meestal niet hoeft te zien, stel je daar de kolombreedte op 0 cm; de andere kolommen geef je een breedte die overeenkomt met de inhoud.

Ik heb er een voorbeeldje bijgedaan, kun je eerst eens kijken wat de bedoeling nou eigenlijk is...
 

Bijlagen

Tot dus ver het maken van de keuzelijst. Dat is me wel gelukt. Gelukkig zijn er ook nog dingen die ik wel kan :D . Maar ik krijg nog steeds dezelfde foutmelding met de formule in VBA. Ik heb meerdere opties geprobeerd aan de hand van de voorbeelden die je gaf, maar ergens klopt het niet. Op dit moment loop ik nog steeds vast bij de formule met dezelfde foutmelding als voorheen. Ik kan ook zelf niet zien welk stuk in de formule anders zou moeten zijn aangezien ik hier niet de kennis voor in huis heb. Ik heb geprobeerd om het bestand te comprimeren en mee te zenden, zodat je er misschien wat meer van kan zien dan met de plaatjes.

Daarbij zag ik dat je voor elk vak apart een formule in het tekstvak toepast. Is dit nodig om in alle velden die je automatisch wil laten invullen mee te nemen of doe je dit eigenlijk al in VBA door daar voor ieder in te vullen veld een nieuwe formule te maken? Ik zag dat je dit namelijk beide doet, maar voor de postcode plaats doe je het in het tekstvak en voor de provincie en land zet je het in de VBA. Welk van de twee is het beste?

Groetjes
Nathalie


(Waarom laten de bazen dit toch ook altijd aan medewerkers over die er net niet genoeg kennis voor hebben?! :confused: )
 

Bijlagen

Goeie vraag....
Kun je eerst de db opslaan als 2003 versie? Ik kan (en wil eerlijk gezegd ook niet) geen 2007 openen...
 
Tja, ik weet niet of je er veel aan hebt, want ik zag dat bij het opslaan naar 2003 de database alleen de tabellen overneemt en mijn formulieren verdwijnen. Overigens zal ik na deze ochtend pas weer maandag in de gelegenheid zijn er mee verder te werken, maar ik doe mijn best.

Ik snap wel waarom je geen 2007 wilt!!

Groetjes,
Nathalie
 

Bijlagen

Hoi Nathalie,

Je moet in beginsel wel formulieren mee op kunnen slaan als je exporteert naar een oudere versie. Dus misschien moet je daar nog even naar kijken, want die zijn in deze natuurlijk wel nodig!
Ik krijg de db zowiezo niet opgeslagen, want de virusscanner vindt 'm niet lekker...
 
Goedemorgen,

Dankzij een woensdagmiddagdipje leek het er inderdaad op dat hij enkel de tabellen opsloeg, maar in werkelijkheid gaf hij alleen deze weer. De rest zat er natuurlijk ook gewoon in en na het selecteren van alle objecten vannochtend waren ze daar dan toch. Het viel me gister ineens te binnen.

:D

Groetjes,
Nathalie
 

Bijlagen

Hoi Nathalie,

Kun je de db mailen? Ik krijg hem nog steeds niet opgeslagen...
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan