Velden in een kolom aan elkaar koppelen

Status
Niet open voor verdere reacties.

lisannethreels

Gebruiker
Lid geworden
14 apr 2020
Berichten
40
Hallo allemaal,

Ik kom ergens niet uit en hoop dat jullie kunnen helpen.
Ik heb een tabel vanuit Excel geïmporteerd, met codes voor machines, waarin één kolom met 6427 nummers staan en één kolom met 8100 nummers. Access heeft hier zelf een primary kolom aan toegevoegd genaamd ID. Belangrijk om te weten is dat zowel de 6427 en 8100 nummers staan voor dezelfde machines alleen hebben zij een andere 'code'. Dus ID rij 1 is één machine met 2 benamingen.

Nu heb ik een invulformulier waarin een 8100 nummer kan worden gekozen dmv een dropdown keuze menu (deze komt dus uit de geïmporteerde tabel) en ik wil graag dat er dan automatisch een 6427 nummer wordt ingevuld in een andere tabel genaamd machines. In de machine tabel staan kolommen met
1. Project naam
2. Het 6427 nummer
3. Het 8100 nummer
4. Machine type
5. Machine aantal

Nu is mijn vraag of je in
1. Access dus automatisch het 6427 nummer kan laten invullen wanneer je het 8100 nummer weet?
2. Moet je de kolom met het 8100 nummer koppelen aan de kolom met het 6427 nummer, zodat Access weet dat het om dezelfde machine gaat?

81naar64.PNG

Ik hoop dat het duidelijk genoeg is uitgelegd!
 
Allereerst welkom bij HelpMij :). Op je vragen kan ik zo antwoorden:
Vraag 1: Ja, dat is heel makkelijk zelfs. Maar moet je niet willen
Vraag 2: Nee, dat hoeft niet

Dat is wellicht een beetje kort door de bocht, dus wat aanvullende informatie :). Wat je keuzelijst betreft: die is gebaseerd op de tabel met machinenummers, neem ik aan. Laten we die voor het gemak tMachines noemen. Een keuzelijst kun je het beste baseren op een query, al kan in dit geval de tabel vermoedelijk ook wel werken. Standaard zal Access dan het Sleutelveld willen gebruiken om de waarden te gebruiken op het formulier. Dat hoeft echter niet het veld te zijn dat je ziet; sterker nog: meestal wordt dat verborgen en zie je dus het tweede veld (de 64-codes). Wellicht heb je de wizard gebruikt om de keuzelijst te maken, en zie je óók de kolom met 81-codes. Of heb je het omgedraaid en zie je eerst de 81-codes, en daarachter de 64-codes. Maakt allemaal niet uit, Access gebruikt toch het ID-veld. Dus de strekking van het verhaal: gebruik altijd het sleutelveld, in dit geval het ID veld, om verder mee te werken in je database.

In jouw geval zijn beide codes uniek, dus je zou ook één van die twee nummers kunnen gebruiken als sleutelveld. In dat geval moet je dus in al je tabellen verder werken met dát nummer.

Nu komen we bij een ander deel van je vraag:
... en ik wil graag dat er dan automatisch een 6427 nummer wordt ingevuld in een andere tabel genaamd machines.
Kijk, dát moet je dus niet (meer) willen! Tenzij je al werkt met hele grote tabellen, en je al dus heel veel 64-codes in die andere tabel hebt gebruikt. Maar eerlijk gezegd snap ik je procedure dus niet helemaal; je hebt een invoerformulier waar je dus blijkbaar een machine kiest, maar waarom moet die machine in een andere tabel worden toegevoegd?
 
Heel erg bedankt voor je snelle reactie. Duidelijke uitleg!

Kijk, dát moet je dus niet (meer) willen! Tenzij je al werkt met hele grote tabellen, en je al dus heel veel 64-codes in die andere tabel hebt gebruikt. Maar eerlijk gezegd snap ik je procedure dus niet helemaal; je hebt een invoerformulier waar je dus blijkbaar een machine kiest, maar waarom moet die machine in een andere tabel worden toegevoegd?

Ik heb een invulformulier waarin er voor projecten het aantal machines kan worden ingevuld, het type machine, en de naam van de leverancier. De naam van de projecten is al ingevuld uit een ander formulier met informatie over de projectaanvraag.

Nu wil ik dus een query maken waarin te zien is met projectID, projectnaam, welk type machine het betreft, hoeveel machines en wanneer de machines geleverd dienen te worden. Al deze andere informatie wordt al verzameld in andere tabellen. Vandaar dat ik het type machine dus in een andere tabel/query wil toevoegen.
 
Nog steeds niet helemaal duidelijk, vrees ik. Ik snap dat je projecten hebt, waar je machines aan koppelt. Voor die verschillende bronnen heb je dan brontabellen. Voor de Projecten heb je neem ik aan een tabel Projecten, met daaraan gekoppeld tabellen voor de onderhangende projectdetails. Tenminste: als aan één project meerdere machines hangen, dan heb je daar een aparte tabel voor nodig. Die tabel hangt onder je Projecten in je formulier (althans: dat zou ik doen) zodat je, als je door je projecten bladert, in het subformulier de gekoppelde machines ziet. Die machines haal je dan uit de andere tabel met een keuzelijst. Nergens heb je iets nodig waarbij je gegevens heen en weer moet kopiëren. En dat zou met jouw gegevens ook niet nodig hoeven te zijn.
Ik vermoed dus dat de structuur van je db wat verbeterd kan worden. Maar om daar meer van te kunnen zeggen, moeten we die db dan wel kunnen zien uiteraard :).
 
Ik ben nogal nieuw wat betreft Access. Dit is ook pas mijn eerste database die ik maak, dus waarschijnlijk kan het inderdaad verbeterd worden. Alle tips zijn welkom :)
Zoals jij het beschrijft, heb ik het ook ongeveer gebouwd.

Er is een tabel projecten met bijbehorend invulformulier voor de gegevens. Dan is er een invulformulier voor de machines met tabel waar alle machine informatie wordt ingevuld. Ik kan per project ook alle machine informatie zien door op het plusje te klikken (zie afbeelding)
Access vraag.PNG

Ik vul in een invulformulier het 8100 nummer in, maar het 6427 nummer wordt niet ingevuld. Heb ik hier iets fout gedaan?
 
Je werkt volgens mij teveel vanuit tabellen. Sowieso heb je in die tabellen Keuzelijsten gebruikt. Mijn advies: nooit doen; alleen tekstvakken gebruiken. Keuzelijsten (met invoervak) gebruik je alleen op formulieren. En op zo'n formulier haal je gekoppelde informatie dus op middels subformulieren. Sowieso sla je nooit de 81-codes, en de 64-codes op, maar het ID veld dat ook in je tabel staat.
 
Je werkt volgens mij teveel vanuit tabellen. Sowieso heb je in die tabellen Keuzelijsten gebruikt. Mijn advies: nooit doen; alleen tekstvakken gebruiken. Keuzelijsten (met invoervak) gebruik je alleen op formulieren. En op zo'n formulier haal je gekoppelde informatie dus op middels subformulieren. Sowieso sla je nooit de 81-codes, en de 64-codes op, maar het ID veld dat ook in je tabel staat.

Ik heb nog een aanal vraagjes hoor...
1. Dus ik kan het beste vanuit zo min mogelijk tabellen werken? En velden opvragen doormiddel van querys?
2. Hoe kan je dan wel keuzelijsten in een formulier toevoegen, maar niet in een tabel? Je moet toch de keuzelijst uit een andere tabel halen, met alle keuzes, en deze via de wizard in de bijbehorende tabel zetten? (althans zo heb ik het gedaan)
 
Ik heb nog een aanal vraagjes hoor...
Als je de 'n' een positie naar links had geschoven, had ik vermoedelijk moeten gokken wat je bedoelde :D.

Ad 1: queries zijn bedoeld om gegevens op te vragen etc. Werken in een query is in essentie niet veel anders als werken in een tabel. Access werkt het beste als je, nadat je klaar bent met de tabellen inrichten, formulieren maakt voor de gebruikerskant. Dus alle invoer/mutaties doe je dan via formulieren. Daarop kun je ook veel meer controle uitoefenen op de data die je invoert/muteert, en het smoelt ook gelijk een stuk beter. En je kunt met Hoofd-Subformulieren werken. Denk bijvoorbeeld aan het aanmaken van een order voor een klant (hoofdformulier) waarbij je gelijk in het subformulier de bestelling van de artikelen kan invoeren. En voor de uitvoer gebruik je rapporten.
Kortom: zo'n beetje alle werkzaamheden die je in de database uitvoert, doe je via formulieren en rapporten. De tabellen zijn niet veel meer dan de opslagplek voor je gegevens. Maar eigenlijk hoef je daar nooit te kijken, als de database goed werkt :).

Ad 2: keuzelijsten in een formulier maak je m.b.v. de wizard, of, als je wat meer ervaring hebt, door rechts te klikken op een tekstveld (dat standaard is aangemaakt) en dan omzetten naar een keuzelijst. Vervolgens ga je de eigenschappen van de keuzelijst aanpassen naar eigen inzicht.
De belangrijkste reden (voor mij dan) om zelden keuzelijsten in tabellen te gebruiken (uitzondering: keuzelijst op basis van Waarden) is dat je in je queries en tabellen nooit ziet wat er feitelijk is opgeslagen. Stel dat je een plaatsnamen tabel gebruikt, en in een query wilt filteren op "Utrecht". Dan zou je de naam "Utrecht" willen intypen in het criteriumveld, want dat zie je in je query output, maar dat werkt niet. Je filtert namelijk niet op "Utrecht", maar op de PlaatsID 23! Je moet als criterium dus 23 intypen, en niet "Utrecht". En dat is nog maar één van de kleinere problemen....
 
Oke, maar als je een keuzelijst toevoegd in je formulier moet je dus wel een tabel hebben waarop de keuzelijst is gebaseerd toch?
 
Voor gerelateerde waarden haal je de waarden meestal uit een tabel (90 % van de gevallen), maar als je maar een paar keuzes hebt en de waarde zoals ze in de keuzelijst staat gaat opslaan in de tabel, kan je ook een zelf getypte lijst als keuzelijst gebruiken.
Bv. als je maar twee mogelijkheden hebt: TEST of PROD kan je die lijstwaarden intypen in de Row Source eigenschap. Wel de Row source type dan op "Value List" zetten.
 
En die keuzelijst met waarden kun je uiteraard ook gewoon met de wizard maken. Mag wel in de eigenschappen, maar is veel handiger met de wizard.
 
Beste OctaFish,

Ik heb alle keuzelijsten uit de tabellen gehaald en een subformulier genaamd machines in het normale formulier project aanvraag gezet. Dus zoals jij als tip mee gaf.:thumb:

Ik wilde graag dat er van een 81 nr automatisch een 64 nr werd gemaakt in het formulier maar dat werd afgeraden. Maar hoe kan ik dan duidelijk maken dat er een verband is tussen een specifiek 64 nr en 81 nr? (Het gaat namelijk om dezelfde machine maar afdelingen werken met verschillende cijfercodes)
Doe je dat door de kolom MachineID primary key te maken?

En hoe werkt dat met invullen in het sub formulier, moet dan de 81 code handmatig worden ingevoerd of kan er worden gewerkt met een keuzelijst?

Ik hoop dat mijn vragen duidelijk zijn. Alvast bedankt!
 
Dag Lisanne, ik gebruik voor de primary key altijd een nummer dat totaal geen betekenis heeft voor de eindgebruiker, daarnaast kan nog een uniek veld (bv. artikelnummer of machine nummer) bestaan dat wel een betekenis heeft en gekend is door de gebruiker. Dit kan uniek gemaakt worden via een unieke index.
In jou geval is het machine nummer duidelijk niet uniek, dus je hebt daar een tweede tabel voor nodig. Heb je een aparte tabel voor de afdelingen, dan is dit een koppeltabel tussen afdeling en machinenummer. De combinatie macinenummer-afdeling kan je in deze tabel uniek maken door een unieke index op deze twee velden te leggen.
Hier heb je een voorbeeld van zo een schema (niet naar de namen/veldtypes kijken -> het is slechts een voorbeeld dat je naar jou situatie moet vertalen)
MachineNr.jpg
 
Hmm oke, dit snap ik niet om eerlijk te zijn. Ik heb nu een tabel waarin een kolom met 81 nummers staan en vervolgens nog een kolom met de bijbehorende 64 nummers. Deze moet ik dus allebei in een aparte tabel zetten, als ik het goed begrijp?

Ook heb ik geen tabel met afdelingen, ik wil gewoon dmv een query 1.De projectnaam zien 2.De type machines in met 81 en 64 nummers 3.Aantal machines
 
In de koppeltabel kan je de volgende data hebben:
je hebt bv. afdelingen
afdID afdNaam
1 Aankoop
2 Ingenieurs
3 AdelingX
….
tblMachines
macID macOmschrijving
1 MachineX
2 MachineY
3 MachineZ

tblMachineAfdelingNummer
manID manAfdeling manMachine manNummer
1 1 3 75
2 1 2 61
3 2 2 83
...

Dan kan je in de derde tabel zien dat machine 2 (MachineY) in afdeling 1 (Aankoop) nummer 61 heeft, en diezelfde machine heeft in afdeling 2 (ingenieurs) het nummer 83

Heb je geen tabel met afdelingen dan zet je in de derde tabel in plaats van het nummer van de afdeling de naam van de afdeling, dan wordt dat:

tblMachineAfdelingNummer
manID manAfdeling manMachine manNummer
1 Aankoop 3 75
2 Aankoop 2 61
3 Ingenieurs 2 83
...

In de query gebruik je het ID nummer van de machine, niet het nummer zoals de afdelingen het gebruiken. Als je dit via een keuzelijst op een formulier moet invullen, kan je die keuzelijst baseren op de tabel tblMachineAfdelingNummer. Die geeft immers via de keuzes Aankoop+61 of Ingenieurs+83 hetzelfde machineID 2 terug.
 
Kun je niet een voorbeeldje plaatsen? Op basis van de plaatjes en je berichten kan ik er ook niet heel veel chocola van maken. En mij ontbreekt de tijd om te gaan gokken :).
 
Ja hoor. In dit invulformulier wordt alle project+machine informatie ingevuld.

Alle projectinformatie komt in de tabel projecten en alle informatie in het subform gaat naar tabel machines. Nu weet onze afdeling alleen het bijbehorende 81 nummer, dus deze vullen zij in.

Dus deze gegevens komen in de tabel met machine informatie. Wat ik nu graag wil is dat er dmv van een tabel/query (geen idee wat mogelijk is) te zien is welk project, welke machines heeft met bijbehorend 81 nummer en 64 nummer, want de sales afdeling weet alleen de 64 nummers van de machines en onze afdeling alleen de 81 nummers. Dit overzicht is namelijk van belang omdat er dan in één oogopslag kan worden gezien door beide afdeling om welke machine het gaat. Zo hoeft er niet nog ergens een vertaalslag gemaakt te worden van het 81 nummer naar het 64 nummer, of andersom.
 

Bijlagen

  • Invulformulier.PNG
    Invulformulier.PNG
    44,9 KB · Weergaven: 62
In de koppeltabel kan je de volgende data hebben:
je hebt bv. afdelingen
afdID afdNaam
1 Aankoop
2 Ingenieurs
3 AdelingX
….
tblMachines
macID macOmschrijving
1 MachineX
2 MachineY
3 MachineZ

tblMachineAfdelingNummer
manID manAfdeling manMachine manNummer
1 1 3 75
2 1 2 61
3 2 2 83
...

Dan kan je in de derde tabel zien dat machine 2 (MachineY) in afdeling 1 (Aankoop) nummer 61 heeft, en diezelfde machine heeft in afdeling 2 (ingenieurs) het nummer 83

Heb je geen tabel met afdelingen dan zet je in de derde tabel in plaats van het nummer van de afdeling de naam van de afdeling, dan wordt dat:

tblMachineAfdelingNummer
manID manAfdeling manMachine manNummer
1 Aankoop 3 75
2 Aankoop 2 61
3 Ingenieurs 2 83
...

In de query gebruik je het ID nummer van de machine, niet het nummer zoals de afdelingen het gebruiken. Als je dit via een keuzelijst op een formulier moet invullen, kan je die keuzelijst baseren op de tabel tblMachineAfdelingNummer. Die geeft immers via de keuzes Aankoop+61 of Ingenieurs+83 hetzelfde machineID 2 terug.


Dankjewel. Ik snap je voorbeeld maar hoe kom je aan de kolom ManNummer?
 
In je voorbeeld is dit voor Sales (ik heb aankoop gezet in het voorbeeld) het 84 nummer voor die machine en voor jullie afdeling het 81 nummer. Die nummers zal je eenmalig in de tabel zelf moeten invullen of via een append query aan de tabel moeten toevoegen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan