MS Access vragen en antwoorden database

Status
Niet open voor verdere reacties.

michielkuiper

Gebruiker
Lid geworden
30 dec 2010
Berichten
11
Goedemiddag,
Ik wil graag een Access-database maken waarin dossiers gecontroleerd worden.
De bedoeling is dat er dossiers aangemaakt worden met daaronder een 12-vragen.
Deze 12 vragen worden een tweetal maal ingevuld; bij aanvang en na een x-aantal weken.
Dus; Elk dossier heeft twaalf vragen en elke vraag heeft twee antwoorden (vrije antwoorden).

In eerste instantie ben ik bezig geweest normaliseren. Vervolgens ben ik gaan rommelen in Access.
Helaas loop ik nu tegen het volgende probleem;

Tabellen:
Tabel: Dossier
Velden: DossierID, Naam, DossierAanmaakdatum

Tabel: Vragen
Velden: VraagID, VraagOmschrijving, VraagVraag

Tabel: Antwoorden
Velden: AntwoordID, DossierID, VraagID, AntwoordOmschrijving, Antwoord01Antwoord, Antwoord02Antwoord

Nu wil ik graag deze tabellen koppelen, maar kom er niet helemaal uit.
Ik krijg wel de 12 vragen onder elk dossier door middel van een koppeltabel (Tabel: Vraaggroep met de volgende velden:VraaggroepID, VraagID)
Door aan de tabel Dossier het veld vraaggroepID toe te voegen krijgt elk dossier de 12 vragen.
Helaas kom er bij de volgende stap: het koppelen van de antwoorden niet helemaal uit.
Het antwoord dient namelijk gekoppeld te worden aan het Dossier en aan de Vraag (DossierID en VraagID).
Maar omdat er nog geen antwoorden in de database staan (deze worden immers later pas gevuld) is er ook geen AntwoordID.
Eigenlijk zou denk ik ergens een stap tussen moeten zitten waarbij elke dossier voorzien wordt van antwoordregels.

Zouden jullie mij hier misschien mee kunnen helpen, ik kom er namelijk niet helemaal uit.
Eventueel andere mogelijke oplossingen zijn uiteraard ook welkom.

Ieder geval alvast heel erg bedankt,
Michiel
 
Laatst bewerkt:
Je tabel Antwoorden is volgens mij al een prima koppeltabel tussen Dossier en Vraag. In die tabel zou je voor elk dossier 12 records moeten hebben, waarbij de combinatie DossierID en VraagID uniek is, omdat elke vraag maar 1 keer bij een dossier mag worden gezet. In de tabel Antwoorden kun je dus met een functie of macro alle vragen toevoegen als je een Dossier toevoegt. De tabel Antwoorden zet je dan als subformulier op Dossier, zodat je per dossier de 12 vragen ziet, en de 24 antwoorden. Wat het veld Antwoordomschrijving in je tabel doet is mij overigens een raadsel; je hebt immers al een Vraag (VraagVraag? rare veldnaam...) en een toelichting op die vraag. Een toelichting op een antwoord lijkt mij overbodig (Vul hiernaast het antwoord in?)
 
Top, dank je wel.
Met het volgende stukje ga ik even rommelen: ' In de tabel Antwoorden kun je dus met een functie of macro alle vragen toevoegen als je een Dossier toevoegt '
Als het gelukt is zal ik dit even aanvullen voor eventueel andere informatiebehoeftige.

ps. de rare veldnamen heb ik aangepast.
 
Helaas krijg ik het nog niet helemaal voor elkaar.
De situatie is nu als volgt:
Ik heb drie tabellen
Tabellen.JPG

Als in de tabel Dossier een nieuw record aangemaakt word dan wil ik graag dat in de tabel Antwoorden er records aangemaakt worden.
De records die aangemaakt worden zijn de koppeling tussen een dossier en een vraag, namelijk het antwoord.

Ik heb een macro gemaakt die gebaseerd is op de actie Tabel Dossier naar nieuw record gaan, alleen de vervolg stappen kom ik nog niet helemaal uit.
Hier zou ik dus iets willen hebben dat er in de tabel Antwoorden de records aangemaakt worden met de koppeling naar alle vraag ID's uit de tabel Vragen en een koppeling naar de tabel Dossier.

Hopelijk heb ik het duidelijk kunnen uitleggen.
 
Gaat je met een macro niet lukken denk ik. Je hebt in ieder geval een toevoegquery nodig die alle VraagID's kopieert naar de tabel [Antwoorden] en in het veld [DossierID] gelijkertijd het [DossierID] uit de tabel [Dossier] invult. Kan misschien trouwens wel met een macro, maar aangezien macro's mij totaal niet boeien, ga ik daar geen tijd in steken :).
 
Beste Michel,
Dank je wel voor je reactie. Ondertussen ben ik wel al een kleine stap verder met de volgende toevoegquery:

INSERT INTO Antwoorden ( DossierID, VraagID )
SELECT Dossier.DossierID, Vragen.VraagID
FROM Dossier, Vragen

Deze query doet eigenlijk wat ik wil, behalve dat hij stomweg alle dossierID en VraagID aanmaakt (ook als deze al bestaan).
Graag zou ik de query willen aanpassen zodat hij alleen een nieuw dossier en bijhorende vragen aanmaakt als deze nog niet bestaat in de antwoorden tabel.
Dit zou ik ook graag met de VraagID's uit de tabel vragen willen.

Via onderstaand toevoegquery lukt dat voor de DossierID's:

INSERT INTO Antwoorden ( DossierID )
SELECT Dossier.DossierID
FROM Dossier LEFT JOIN Antwoorden ON Dossier.DossierID = Antwoorden.DossierID
WHERE Antwoorden.DossierID IS NULL;

Ik zou binnen dezelfde query graag willen opnemen dat hij het volgende doet als ik de query aanmaak:
Maak in de tabel Antwoorden de volgende records aan:
Uit de tabel vragen dient elke vraag (vraagID) een aparte record te worden met het DossierID (uit de tabel Dossier).

Als de tabel vragen 18 record bevat dien bij het uitvoeren van de query dus 18 records aangemaakt te worden met daarin de VraagID en het DossierID.

Hopelijk is mijn vraag duidelijk en alvast bedankt,
 
Ik snap je vraag niet helemaal. Je tweede query voegt alleen records toe met een DossierID. Geen VraagID. En mij lijkt juist de combinatie nodig. Dus waarom alleen DossierID's toegevoegd? Nu kun je (als je wel het juiste aantal records erbij krijgt) alleen met een bijwerkquery werken om de VraagID's toe te voegen. En dat gaat denk ik lastig worden, omdat je geen referentie meer hebt.
 
In verband met consistentie heb ik momenteel drie tabellen:
Tabelnaam: Dossier
Velden: DossierID, Dossiernummer, Naam
Tabelnaam: Vragen
Velden: VraagID, Vraag
Tabelnaam: Antwoorden:
Velden: AntwoordID, DossierID, VraagID, Antwoord

deel1.jpg
In de afbeelding hierboven heb ik het even uitgetekend.
De tabel Vragen bevat een aantal records met vragen die in elk dossier terug moeten komen, zie rode 2 in de afbeelding.
Zodra ik een nieuw dossier aanmaak (nieuw record in de tabel Dosier) dan dient het dossier voorzien te worden van deze vragen.
Uiteindelijk wordt de tabel Antwoorden dus aangevuld gevuld met een koppeling naar de vragen en het dossier, zie bovenstaande afbeelding de rode 3.

Hopelijk heb ik wat duidelijker kunnen maken.

En momenteel krijg ik dit wel via de toevoegquery voor elkaar, alleen kijkt deze niet of de records die toegevoegd worden in de Antwoorden tabel al bestaan.
Elke keer worden gewoon nieuwe records toegevoegd.

De volgende toevoeg query die kijkt of de tabel Antwoorden al records heeft met het dossiernummer. Als deze er niet zijn dan wordt een nieuw record aangemaakt.
INSERT INTO Antwoorden ( DossierID, VraagID )
SELECT Dossier.DossierID, Vragen.VraagID
FROM Dossier, Vragen

Echter gaat niet alleen om de Dossiers maar ook om de vragen die toegevoegd meoten worden.
Dit krijg ik helaas (nog) niet voor elkaar.

Hopelijk kunnen jullie mij helpen.
 
Beste OctaFish,
Dank je wel voor je ondersteuning!
Ondertussen ben ik eruit;
De tabel Antwoorden heb ik aangevuld met een extra kolom, nl. Combikey.
Dit is een combinatie van Dossier.DossierIS & Vragen.VraagID
Deze heb ik nodig om reeds bestaande dossiers en vragen niet nog een keer aan te maken.

Vervolgens heb ik het formulier Dossier gemaakt waar alle dossiergegevens ingevoerd worden.
Als het dossier volledig ingevoerd is dan heb ik een macro gemaakt met de volgende instructie:

INSERT INTO Antwoorden ( DossierID, VraagID, CombiKey )
SELECT Dossier.DossierID, Vragen.VraagID, Dossier.DossierID & Vragen.VraagID AS CombiKey
FROM Dossier, Vragen
WHERE ((([Dossier].[DossierID] & [Vragen].[VraagID]) Not In (SELECT CombiKey FROM Antwoorden)));

Hier worden in de tabel Antwoorden nieuwe records aangemaakt; voor het betreffende dossier wordt een koppeling gemaakt met het vraagId.

gr. Michiel
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan