Kruisquerry maken

Status
Niet open voor verdere reacties.

san16

Gebruiker
Lid geworden
5 okt 2013
Berichten
34
Bedankt,

Zou iemand me kunnen helpen met het kruisquerry want ik kom er niet uit, ik wil zeg maar alle werknemers onder elkaar en dan de max 8 datums achter elkaar.
En als het kan per dag.

http://we.tl/Jq7Qcs3nSY

Alvast bedankt,

Gr. san16
 
Voor een kruistabel ga je een redelijk probleem krijgen, omdat je het datumveld vult met een Tijd. Je kunt, als je alleen de datum wilt hebben, veel beter de functie Date() gebruiken i.p.v. Now(). Want een kruistabel baseer je op rijen (rijkop Werknemer) en kolommen (bij jou kolom Tijd). Bovendien heb je de kolom [Tijd] als gegevenstype Memoveld ingesteld, en dat is sowieso een grote NONO, want een memoveld kun je bijna nergens in gebruiken, en zeker niet in een kruistabelquery. Datums en Tijden sla je uiteraard op in velden met een Datum/Tijd gegevenstype. Maar ik zou Datum en Tijd dus in ieder geval splitsen, als je de gegevens apart wilt hebben.
Je voorbeeld (ik neem aan dat het om de tabel [Inschrijflijst] gaat? bevat veel te weinig data voor 8 kolommen, dus daar is weinig mee te doen op dit moment. Graag een voorbeeldje met voldoende records (Van het juiste gegevenstype) want ik ben uiteraard geen datatypist :).
 
Is het dan niet mogelijk om met deze code: DoCmd.RunSQL "INSERT INTO Inschrijflijst(Tijd, Naam, ACTIE) VALUES (NOW(),'" & Me.Inschrijven & " ','IN')"
Eerst de naam en daarachter de datum en dan nog 8 kolommen met tijd in te vullen.
dus dat je per gebruiker per dag 8 kolommen per dag hebt waarin je de tijd kan zetten en na die dag weer opnieuw gebint ook al heb je er maar 2 vol.

Alvast bedankt
 
... dus dat je per gebruiker per dag 8 kolommen per dag hebt waarin je de tijd kan zetten en na die dag weer opnieuw gebint ook al heb je er maar 2 vol.
Hiermee geef je aan dat je db heel slecht genormaliseerd is. Althans: al de 1e normaal niet haalt. Op het moment dat je 8 velden nodig hebt voor één attribuut, dan zit je tabel verkeerd in elkaar. Attributen worden in een genormaliseerde tabel namelijk niet herhaald, maar in een eigen (gekoppelde) tabel opgeslagen. Je hebt dan dus, als je maar 2 waarden nodig hebt, dan 2 records in die gekoppelde tabel nodig, geen 8.
 
Ik snap hem niet sorry,
Maar heb je wel een oplossing om per werknemer alle tijden van die dag achter elkaar te zetten zodat de naam van de werknemer maar 1 keer voor komt op het rapport met daarachter al zijn tijden van vandaag.
 
Dat lijkt maar zo. Een kruistabel kun je in ieder geval níet maken van zo'n constructie, omdat een kruistabel één veld gebruikt. Dat veld wordt dan door Access 'uitgesplitst' over exact het aantal keren dat een waarde voorkomt. Dus als je een datumveld hebt als kolomkop, en een veld Werknemer als Rijkop, dan zie je in de kruistabel net zoveel rijen als er werknemers zijn, en net zoveel kolommen als er datums zijn. Probeer dat maar eens met jouw tabel! Gaat niet lukken...
De basis van élke goede database is, dat je geen herhalende attributen hebt. Zolang dat niet in orde is, heb je een probleem (en zul je dat altijd houden).
 
Hoe ga ik dat in mijn situatie oplossen, wat moet ik aanpassen om per werknemer alle tijden achter elkaar te zetten?
 
Kijk eens naar de titel van je vraag... Kruistabel dus. Maar alles begint bij een goed ingerichte db.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan