opzoeken variabele in query/tabel

  • Onderwerp starter Onderwerp starter scw
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

scw

Gebruiker
Lid geworden
5 jun 2009
Berichten
530
Hallo,

Ik heb een tabel met Namen en een tweede tabel met Maanden en Jaren. Dit zullen twee tabellen moeten blijven, want de gegevens zijn aan verandering onderhevig. Er komen natuurlijk wel eens nieuwe namen en toekomstige maanden/jaren bij.

Ik heb geprobeerd dit in een query te zetten en dat lukte naar wens. Ik had dus de volgende query:

Kolom 1: Verschillende Naam
Kolom 2: Voor iedere naam dezelfde jaartallen
Kolom 3: Voor ieder jaar alle maanden (huidige jaar tot afgelopen maand)
Kolom 4: HIER ZOU DUS HET BEDRAG BIJ MOETEN KOMEN

Wat ik zou willen bereiken is dat ik een bedrag aan iedere maand kan koppelen. Dus uiteindelijk moet er voor ieder jaar en vervolgens iedere maand een bedrag komen te staan. Helaas heb ik geen flauw idee waar ik de oplossing zou kunnen liggen.

Hoe kan ik dit bereiken? In een query of toch juist in een tabel? Mijn doel is dat Access kan opzoeken welk bedrag van toepassing is op een bepaalde datum....

Bedankt voor de hulp,

scw :thumb:
 
SCW,

De oplossing ligt dan in mijn optiek in een query waarin je heel makkelijk berekeningen kunt maken. Vooral omdat je dan geen overbodige data opslaat. 1+1 = altijd 2., dit kun je op elk gewenst moment berekenen.Omdat je geen voorbeeld hebt meegepost, maar even zo.

Je kunt in een query zelf een veld toevoegen door alsvolgt:

Uitkomst:=[veld1]*[veld2]

let op de brackets en dubbele punt achter de naam

Google is uw vriend hierop staat meer dan genoeg
 
Wat je wilt is een resultaat met een berekening, dus dan praat je zowiezo al over een Query. In een tabel kun je wel de resultaten opslaan, mocht je dat willen, maar die berekeningen komen altijd uit een query. En als de gegevens onderhevig zijn aan verandering, heb je al helemaal geen reden om ze op te slaan in een tabel, want die moet je dan bij elke wijziging bijwerken. Met weer diezelfde query...
Het lijkt er op, dat je een (kruistabel)query nodig hebt met een Totalen berekening. Daarbij gebruik je voor de berekening de functie Som, en voor het creeëren van de groepen de Group By functie (de standaard dus).

Met een Kruistabelquery kun je bijvoorbeeld de namen en jaren gebruiken als Rijkop, en de Maanden als Kolomkop. Je krijgt dan per Naam/Jaar rij 12 kolommen met de totalen.
 
Bedankt voor jullie antwoorden,

Echter volgens mij is het volgende misschien niet goed uitgelegd door mij/of goed geinterpreteerd: het bedrag wil ik graag handmatig toevoegen; er gaat dus geen berekening aan vooraf (het bedrag staat nog niet in de DB, maar wil ik erg graag aanhangen):

Dus Jantje heeft bedrag 5 in maand januari in 2010
Pietje heeft bedrag 10 in maand februari in 2009
etc.

Dit wil ik dus graag opslaan en later mee verder rekenen. Maar er komt soms nog wel eens een Klaasje bij en dan natuurlijk 2011 etc.
 
Heb je daar een formulier voor gemaakt?
 
Nee, nog niet (heb ik wel al beetje in gedachten, hoe het er uit zou moeten zien), maar moet natuurlijk wel een Recordsource hebben eerst :P Da's wel handig denk ik natuurlijk ;)
 
Ik heb een tabel met Namen en een tweede tabel met Maanden en Jaren. Dit zullen twee tabellen moeten blijven, want de gegevens zijn aan verandering onderhevig. Er komen natuurlijk wel eens nieuwe namen en toekomstige maanden/jaren bij.
Laten we eens teruggaan naar de basis, want die snap ik toch niet helemaal...
De tabel Namen bevat, laten voor het gemak zeggen, de Klantgegevens? Maar waarom een tabel met Maanden en Jaren? Je hebt toch een kalender met een datumveld als je een maand en/of een jaar wilt hebben? Ik zie daar eerlijk gezegd nog niet het voordeel van in. Nog afgezien van het feit dat je een tijdelijke tabel kunt maken met maanden en/of jaren die meeloopt met de huidige datum, als je over een vast bereik wilt kunnen beschikken...
Als je bedragen wilt vastleggen voor bepaalde personen, dan heb je daar wel een extra tabel voor nodig, die je dan kunt vullen vanuit je (nog te maken) formulier. Daarop heb je dan tekstvelden voor datum en bedrag, en (zou ik voorstellen) een keuzelijst voor de Namen. Als je een nieuwe naam wilt toevoegen, gebruik je daarvoor de NotInList procedure, waarmee je de nieuwe persoon toevoegt aan de tabel Namen, en hem gelijk kunt gebruiken.
Nogmaals: ik zie niet in waarom je een tabel nodig hebt voor de maanden en jaren. Heb je een datum opgeslagen, dan weet je die gegevens namelijk ook.
 
Dank je Michel

Ik begrijp je strekking vrijwel helemaal. Maar er wordt per maand een vast bedrag in rekening gebracht, welke dus per maand kan verschillen. Dus het lijkt mij handig om achter de Naam per maand een bedrag te zetten. Ik wil dus de basis maken om later per order inderdaad een tarief er aan te hangen. Maar Access moet dat tarief toch ergens uitpikken? Mijn inziens uit de basistabel met tarieven?

Bovendien gaat het er ook om in dit geval, dat er met terugwerkende kracht wordt gekeken: dus die order vond plaats in 2008 en welk tarief is daar aan gerelateerd in de desbetreffende maand in 2008. Dus het is niet zo dat de tarieven overschreven moeten worden, maar juist opgeslagen.

Zodoende eigenlijk.
 
Kijk, nu komen we ergens! Het gaat dus om een tabel met Tarieven, niet om een tabel met Jaren en Maanden.
Maar er wordt per maand een vast bedrag in rekening gebracht, welke dus per maand kan verschillen.
Dit snap ik dan weer niet... Ofwel je hebt een vast bedrag, dat actief is tot er een nieuw tarief wordt vastgesteld, of je hebt voor elke maand een apart tarief. Ik neig naar de opvatting dat je op een gegeven moment een tarief vaststelt, en als je dat verandert, een nieuw tarief invoert met een ingangsdatum.
Je kunt het je daarbij iets gemakkelijker maken als je in de tabel Tarieven een Begindatum en een Einddatum opneemt. Ik zou dat dan aansturen via een formulier, want logischerwijze is de Einddatum van het laatst ingevoerde record de Begindatum van het nieuwe record, en heeft het actieve record geen einddatum.
In een query kun je dan de tarieven bij de orders berekenen door het juiste tarief op te zoeken op basis van de Orderdatum in de tabel Tarieven.
 
Gelukkig komen we steeds dichterbij:

Ik zie inderdaad dat ik het een beetje ongelukkig had neergezet maar het gaat als volgt:


Jaar Maand Tarief

2008 01 5
2008 02 5
2008 03 5
2008 04 6
2008 05 6
etc.
2009 01 6
2009 02 5
etc.

M.i. lijkt het me juist onhandiger (?) te werken met data. Of is dat noodzakelijk om te 'koppelen' aan data? Dus kan Access later niet 01/05/2008 niet koppelen met maand 05?

Het gaat mij er om hoe ik dit ooit kan opslaan in Access, wanneer ik de gegevens van Naam, Maand en Jaar al heb in mijn DB. Waarom heb ik deze gegevens in mijn DB? Dit komt omdat het hoofdsysteem deze gegevens uitspuugt in een Excel bestand en zodoende staan er al ook jaartallen bij vermeld en maanden.
 
Je tabel Tarieven zou er dan zo uit moeten zien:
Code:
 BeginDatum      Einddatum     Tarief
1-1-2008          4-4-2008        5
4-4-2008          1-1-2009        6
1-1-2009          12-4-2009       5
12-4-2009                         6
etc.
Met een simpel criterium zoek je vervolgens in de tabel de juist tarieven op.
 
Ahhh OK, ik denk inderdaad ook dat dit dan de beste oplossing is. Daar moet ik uit gaan komen! :thumb: Bedankt voor dit advies!
 
nog niet helemaal

Hoi Michel...

Ik kom er toch nog niet helemaal uit. Laat ik de vraag even anders uitleggen/stellen:

Het tarief staat dus wel per maand vast. Bijvoorbeeld 5 eur voor februari of 5 eur voor maart, maar deze kan in april bijvoorbeeld zo maar 6 eur zijn. Mijn vraag, is het mogelijk (en vervolgens handig) om dit zo in Access tabel te zetten:

Jaar Maand Tarief
2010 02 5
2010 03 5
2010 04 6

Ik importeer nu een Excel bestand in een Access tabel (werkt prima). Maar dit Excel bestand wordt standaard uitgespuugd door het hoofdsysteem. Dus daar kan ik weinig in veranderen. Hierin staan dus Jaar en Maand als respectievelijk (2001) en (01) genoteerd. Uiteindelijk wil ik Access laten opzoeken: hoe vaak komt een record voor in de geimporteerde Access tabel x aantal keer tarief in Access tabel en dan heb ik een totaal voor een bepaalde maand.

Het zou mijn inziens makkelijker zijn dan wanneer ik met de datumnotatie als 01/01/2001 ga werken?? Want het is toch Access laten opzoeken als Maand 02 > Maand 02 in de andere tabel? Of zie ik hier iets over het hoofd :rolleyes:

Bovendien, zit ik nog met het volgende probleempje: Access slaat in m'n tabel geen decimalen op. wanneer ik 0,1111 neerzet, maakt Access er 0 van :( Vervolgens alles geprobeerd: Integer, lange integer, cijfer etc.. Aantal decimalen heb ik op 3 staan. Ik heb punten en komma's geprobeerd. General number, fixed en standaard maar het lukt me niet :( Hoe lukt dat wel. Ik wil dus gewoon een getal 0,012 bijvoorbeeld neerzetten. Niets meer, niets minder :D
 
toch nog gelukt!

Excuses!! Ondertussen is het me uiteindelijk toch nog gelukt! :d Ik heb de juiste velden in de query met elkaar gekoppeld en bleek het achteraf makkelijker dan gedacht... Maar toch zit ik nog even met die decimalen... dat krijg ik echt niet voor elkaar :( Hoe kan ik dus 0,020 erin zetten ???
 
Dat hangt een beetje af van hoe je de import vanuit Excel regelt. Als je alleen koppelt naar het Excel bestand, zul je denk ik een tussentabel moeten maken/gebruiken waarin je de juiste opmaak op de velden zet, en vervolgens de data uit het Excelbestand daar in importeert. Voor de decimalen moet je het getaltype op Decimal of Enkele Precisie of zo zetten. Vervolgens kun je met een conversieslag de tijdelijke tabel vullen met de gegevens uit de Excel tabel.
 
OK ik heb het gevoel dat ik er bijna ben, maar zoals je ziet nog niet helemaal... Access geeft nu nog voor iedere maand die er in staat dezelfde record, dus 12x dezelfde record met een ander tarief ofzo doet ie. Ik gebruik daarbij de volgende SQL:

Code:
SELECT tblHoofdtabel.Ordernummer, tblHoofdtabel.AantalStuks, tblTariefgegevens.Tarief, [AantalStuks]*[Tarief] AS Tariefgegevens, tblTariefgegevens.Maand
FROM tblTariefgegevens LEFT JOIN tblHoofdtabel ON tblTariefgegevens.Maand=tblHoofdtabel.Maand
ORDER BY tblHoofdtabel.Ordernummer;

Ik heb al wat zitten klikken met de relatietypes (1,2,3) en welke velden aan elkaar gekoppeld kunnen worden. Maar helaas lukt het nog niet erg; want ik kan geen ref. integriteit realiseren met de Hoofdtabel welke gekoppeld is aan een andere DB (die op z'n beurt weer Excel bestanden tot Access tabel omtoveren). Maar dat is dus niet het enige, ik weet niet precies welke velden ik aan elkaar zou moeten koppelen voor het gewenste resultaat... en vervolgens welk relatietype toe te passen. :confused:

Mogelijk hebben jullie suggesties??
 
Laatst bewerkt:
Heb je in Tariefgegevens 12 records staan, voor elke maand één? Of heb je tarieven voor jaar/Maand? Want dan moet je ook nog koppelen op jaartal. Door velden m.b.v. een criteria te matchen (met WHERE) maak je eigenlijk een Indirecte Join, wat net zo goed werkt als tabellen aan elkaar koppelen met relaties, dus daar hoeft het niet aan te liggen. Wel is het dus zo dat je één record uit tblTarieven selecteert voor de match.
 
Hoi Michel,

Het laatste is het geval, in de tabel staan per jaar de maanden. Dus heb ik ondertussen gekoppeld op jaartal.

Code:
SELECT tblHoofdtabel.Ordernummer, tblHoofdtabel.AantalStuks, tblTariefgegevens.Tarief, [AantalStuks]*[Tarief] AS Tariefgegevens, tblTariefgegevens.Maand
FROM tblTariefgegevens LEFT JOIN tblHoofdtabel ON (tblTariefgegevens.Jaar = tblHoofdtabel.Jaar) AND (tblTariefgegevens.Maand = tblHoofdtabel.Maand)
ORDER BY tblHoofdtabel.Ordernummer;

Ik denk wel ongeveer te begrijpen waar je naartoe wilt met de WHERE expressie. Echter weet ik niet welke ik dan aan elkaar zou moeten koppelen: aan de hoofdtabel kan ik geen rijen meer toevoegen (toch naar tussentabel?) en Maand en Jaar heb ik al gekoppeld?? Ik ben benieuwd...

Bedankt!
 
Misschien is het dan toch wel handig om een voorbeeldje te posten, want ik begin toch langzaam door de opties heen te geraken. Ik hoopte eigenlijk dat de combinatie Jaar-Maand een unieke prijs zou opleveren. Blijkbaar is dat niet het geval... Als een voorbeeld lastig is, dan misschien afbeeldingen van de tabellenstructuur, zodat we een idee krijgen hoe e.e.a. aan elkaar te knopen is.
Maar prima dat je 'm door begint te krijgen! :thumb:
 
Zoals je zelf al aangaf, wordt een voorbeeldje lastig. Zodoende, heb ik een opzet gemaakt in een Word document (zie bijlage). Ik hoop dat ik duidelijk en volledig genoeg geweest ben hierin, mocht dit niet zo zijn, dan hoor ik dat graag en kan ik dit aanvullen. Alvast bedankt!
 

Bijlagen

Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan