tekst naar kolommen of zoiets

Status
Niet open voor verdere reacties.

jwaque

Verenigingslid
Lid geworden
16 aug 2006
Berichten
443
Misschien kunnen jullie mij helpen met het volgende probleem. Ik krijg een bestand aangeleverd dat er als volgt uitziet:

rij1: documentnaam
rij2: documentnr
rij3: betrokken functies. de verschillende functies staan echter in een veld gescheiden door een puntkomma. bv functie1; functie2; functie5

Nu heb ik ook een tabel met personen.
klaas functie1
piet functie2
peter functie 1 en functie 5

Nu wil ik per persoon weten welk document van toepassing is. Nu gaat dat me wel lukken
iets van als de functie van klaas voorkomt in het veld functie then...

maar wat als iemand twee functies vervuld zoals peter.

Neem ik hem dan 2 keer op in mijn personen tabel? of is er een beter optie?
 
jwaque,

Je maakt een klassieke fout, je database is niet genormaliseerd.
Wat je zou moeten doen is het maken van een tabel met personen en een tabel met functies.
Verder heb je een derde tabel nodig voor de koppeling tussen de personen en de functies met ook bijvoorbeeld begin en einddatum.
Dus nee als iemand twee functies heeft neem je hem niet twee keer op in de tabel personen. Ook als een functie drie keer
voor komt neem je hem niet op in de tabel functies. Je maakt gebruik van de koppelingstabel om deze relaties vast te leggen.

Veel Succes
 
Als je een veld met meerdere waarden gebruikt, dan is de tabel nog wel genormaliseerd, want Access gebruikt een interne tabel voor dat type veld. Dat betekent dat je de gegevens er gesplitst uit kunt halen. Staat alles in een normaal tekstveld, dan heb je een normalisatie probleem, en dat zou ik dan eerst oplossen.
 
Inderdaad is het probleem dat meerdere info van de functies in een veld staat. Ik krijg de data echter zo aangeleverd dus daar kan ik niets aan doen. Kunnen jullie tips geven hoe ik het functieveld kan splitsen in 3 (of meerdere records?) De functies zijn altijd wel gescheiden door een puntkomma maar het aantal verschild. Ik zou dus iets moeten doen waarbij ik zoek naar de puntkomma en dan een nieuw record aanmaken.
 
Als je in 2010 werkt, kun je een veld toevoegen aan je tabel dat je dan instelt voor meerdere waarden. Dat veld kun je dan met een bijwerkquery vullen vanuit het tekstveld dat nu de verzamelde functies bevat. Het resultaat is dan dat je in dat veld een keuzelijst kunt uitklappen met de opties. In een query kun je dan gesplitste records laten zien op basis van dat veld. Dus als een persoon 3 functies heeft, zie je in de query ook 3 rijen. Of, ook mogelijk, je ziet per persoon één rij, met daarin de functies zoals je ze nu ook ziet. Het verschil zit 'm in de manier waarop je het veld in je query zet.
Veld: MederwerkerID + NieuweFunctie --> 1 rij met gegevens en Functies in één veld, gescheiden door puntkomma's.
Veld: MederwerkerID + NieuweFunctie.Value --> gesplitste rijen met gegevens en één Functie in een veld.
Het hangt er dus vanaf hoe je het multivalue veld gebruikt wat je ziet.

Het mooiste is natuurlijk een aparte tabel gebruiken voor je functies, zodat de functienamen genormaliseerd zijn. Die tabel kun je dan (op basis van de tweede optie) maken door een TabelMaak query te gebruiken op basis van het veld NieuweFunctie.Value. Dat je dan wel groepeert op dat veld, om te voorkomen dat je dubbele records maakt. Volgende stap is dan een tabel Persoon_Functie, zoals Elsendoorn ook al aangaf, waarin je per persoon voor elke functie een apart record aanmaakt. Kun je in eerste instantie doen met een tekstveld. Ook daar gebruik je een Tabelmaak query voor, waarbij je nu dus PersoneelID en NieuweFunctie.Value gebruikt, zodat voor elke functie/persoon combinatie een apart record wordt gemaakt.
Heb je die tabel, dan kun je aan die tabel een numeriek veld toevoegen, dat je met een bijwerkquery vult met de ID's uit de tabel Functies. Die werk je dan bij doordat je de Functieomschrijving uit Functies kunt koppelen aan het veld Functie uit de tabel Persoon_Functie. Als je nu PersoneelID en FunctieID hebt gevuld, kan het tekstveld weg. En ook de velden uit je importtabel. Inclusief dus NieuweFunctie. Want die is dan ook niet meer nodig.
 
Michel bedankt voor je stappenplan. ik ga er eens mee aan de slag.
 
wat een geweldige oplossing. Werkt perfect. precies wat ik zocht. het werkt ook in access2007. Wederom super bedankt.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan