Zoeken in tabel

Status
Niet open voor verdere reacties.

ahkleine

Gebruiker
Lid geworden
1 mei 2014
Berichten
158
Ik wil in een tabel zoeken naar een bepaalde kolom en van deze kolom alle waardes weergeven. Als voorbeeld: Ik heb de kolommen jan t/m dec. en per kolom staan een aantal kostenposten gedefinieerd. Ik wil nu alle kostenposten van een te kiezen maand weergeven en liefst als nieuwe (tijdelijke) tabel bewaren. Wie kan en wil mij helpen.
 
Laatst bewerkt:
aanvuling op mijn vraag

Heb een schermafdruk van de tabel bijgevoegd
 

Bijlagen

  • tabel.JPG
    tabel.JPG
    55,9 KB · Weergaven: 81
Ik snap je tabel niet; dit zou sowieso nooit een tabel mogen zijn, maar het resultaat van een draaitabelquery. Daar lijkt het nu niet op. Is deze tabel ook de bron van je gegevens, of heb je daar een 'normale' datatabel voor?
 
Octafish,

Bedankt voor jou snelle reactie. Deze tabel is ook de bron van mijn gegevens, Deze tabel vul ik middels een formulier Waarbij ik de mogelijkheid heb om, Als voor een bepaald budget onderdeel elke maand dezelfde kosten zijn, dit in een keer te vullen.
 
Dan nog zou je dit zo nooit mogen doen. Overigens ben ik erg benieuwd naar hoe jij in één keer invult, want dat is mij na 30 jaar Access nog steeds niet gelukt, ik behoor tot de sukkels die elk veldje apart moet invullen :).
Maar stel dat je inderdaad een simpele tabel nodig hebt waarin je één bedrag in moet vullen per maand voor één post. Dan nog heb je in jouw huidige systeem een stevig probleem, want je kunt nu nooit meer dan één jaar invullen; het volgende jaar moet je overnieuw beginnen en raak je dus de vorige cijfers kwijt. Dat is dus een hele slechte database!

Het kan dus veel simpeler, door in ieder geval je klanten apart in een tabel te zetten (middels een keuzelijst op je formulier te kiezen), en je data op te slaan met 4 gegevens:
1. KlantID
2. Jaar
3. Maand
4. Bedrag.

Met deze 4 velden maak je dan een formulier, waarbij je met een knop de cijfers voor een heel jaar kan invullen. Want dat snel invoeren kun je uiteraard wel weer programmeren. En eventueel zet je een standaardwaarde in het veld [Bedrag] zodat je ook handmatig snel kan invoeren. Door ook het jaartal toe te voegen, bouw je historie op en raak je geen gegevens kwijt. Met een filter kun je dan een overzicht per jaar maken middels een kruistabel.
En dat brengt ons dan gelijk bij het antwoord op je vraag, want naast het jaarfilter kun je natuurlijk ook een maandfilter maken. Als het je puur om de gegevens gaat, dan heb je aan een zoekformulier met daarop een keuzelijst (of getalveld, wat je makkelijker vind) voor de jaartallen, en een keuzelijst voor de maand (of maanden, dat kan ook) genoeg. M.b.v. deze keuzelijsten open je dan de kruistabel query die is gefilterd op de selectie. Dus zeker geen aparte tabel daarvoor maken, ook dat is weer een heel slecht gebruik van je database.

Overigens, als je met je huidige systeem wilt werken, dan kun je heel makkelijk een kopie maken (<Ctrl>+slepen) van je tabel, die hernoemen, openen in de ontwerpfase en alle maanden weggooien die je niet wilt hebben. Volgens mij heb je dan al wat je wilt zien. Gezien deze vraag, en werkwijze, vraag ik me trouwens af waarom je niet gewoon in Excel werkt, waar deze werkwijze eigenlijk voor is bedoeld, en waar je met slicers nóg weer veel makkelijker je resultaat kan halen.
 
Octafish,

Bedankt voor de reactie. Ik ga het uitproberen, maar ik denk dat dit niet is wat ik bedoel. het probleem is dat voor sommige kostenposten niet elke maand hetzelfde bedrag moet worden opgenomen. Bijv. vuilstort dit wordt in 4 maanden afgerekend. De bedoeling van mijn database is om de kosten en baten van een wijkgebouw bij te houden. V.w.b. in een keer vullen heb ik alles volgt gedaan: ik declareer een variabele met de naam alles. In een invoerveld geef ik het bedrag op. Na het verlaten van het veld worden alle maandvelden gevuld met de inhoud van de variabele Alles
 
Na het verlaten van het veld worden alle maandvelden gevuld met de inhoud van de variabele Alles
Dat lijkt mij onmogelijk, een variabele kan nooit uit zichzelf een veld vullen, laat staan alle velden; ik zou dat zonder programmeren niet voor elkaar krijgen! Overigens is wat ik voorstel volgens mij nu juist wél exact wat je zoekt. Met wellicht een kleine uitbreiding, die de frequentie regelt. Als ik naar je plaatje kijk, dan zie ik trouwens voor Vuilstort twee bedragen, en daar trek je het geen jaar mee. Bovendien zijn die betalingen in Maart en April, en daar zit óók geen vier maanden tussen. Dus je systeem is zeker niet 'volautmatisch' gebruikt nu. Met een doorlopend formulier (wat je in mijn optiek nodig zou hebben) kun je prima op dezelfde wijze als nu je maandbedragen invullen. Ofwel dus handmatig per maand een bedrag invullen, waarbij je dan een standaardwaarde op het bedrag kan zetten/veranderen zodat je dat zelden hoeft te veranderen, ofwel met een kleine procedure die in één keer de records voor een heel jaar genereert, al dan niet met een interval.
 
De variabele vult na verlaten van het invulveld 12 fomuliervelden die als besturingselementbron het desbetreffende veld in de tabel hebben. Aan het eind doe ik een cmdsave en een requery. V.w.b. mijn database: De vuilstort wordt 2 maal per jaar afgerekend in 2 terrmijnen. Wat moet ik me voorstellen met een kleine procdure die in een ker alle record voor een heel jaar genereert
 
Octafish,

V.w.b. een van jou opmerkingen in voorgaande reacties: Waarom niet in Excel. In Excel heb ik het geheel werkend. Maar het is voor mij een uitdaging om het ook in Acces te realiseren. Is puur een beetje hobby om iets meer van de werking van Acces te leren
 
Wat moet ik me voorstellen met een kleine procedure die in een keer alle records voor een heel jaar genereert
KIjk, dat snap ik dan weer niet; je legt iets uit wat ik totaal niet begrijp en dus ook niet kan nabouwen (een variabele vullen die in één keer 12 velden vult? Dat niet alleen: ze hebben ook nog eens hetzelfde veld in de tabel? Terwijl je volgens je plaatje 12 verschillende velden hebt voor de 12 maanden. You completely lost me! Ik wil die db wel eens zien, want ik snap hier dus niks van. En ik dacht dat ik toch wel wat kon met Access. :).
Die procedure van mij, die ik dus wél snap, maakt voor elke kostenplaats 12 records aan (volgens mijn opzet natuurlijk) en vult ze met de bij de kostenplaats opgegeven intervallen. Dus als de kostenplaats Waterleiding maandelijks wordt berekend krijg je 12 records, voor Vuilstort, die volgens jouw opzet 3 keer per jaar wordt berekend, krijg je 3 records op de volgens het interval berekende maanden. Ik zou die basisgegevens dan opnemen in de tabel Kostenplaatsen, want je wilt vermoedelijk voor elke kostenplaats apart kunnen opgeven wat het interval is.

Wat betreft je laatste opmerking: alles wat je laat zien en beschrijft, duidt er op dat je het Excel bestand één-op-één wilt overzetten naar Access. En dat is een slecht idee: Access is een database programma, geen spreadsheet. Als jij naar een restaurant gaat, kun je er gif op innemen dat je voor de soep een lepel krijgt en voor het hoofdgerecht een vork en mes. Het idee er achter is, dat elk gerecht zijn eigen optimale instrument heeft. En dat geldt voor computer programma's natuurlijk ook. Overigens ben jij niet de eerste die denkt dat een database(je) in Excel hetzelfde is als een database in Access. Dus ik heb voorlopig nog wel werk :D.
 
Octafish,

Ik leg het waarschijnlijk niet goed uit, sorry. De variabele vult 12 velden op het formulier en na de cmdsave vult hij iet 1 maar 12 velden in de tabel. Jij hebt gelijk: ik ben inderdaad aan het proberen een excel werkblad na te bouwen in Acces. In Excel heb ik een tabllad vaste kosten met 12 kolommen voor de diverse maanden, wat naar mijn mening ook eenvoudiger zou kunnen. Ik gebruik dit excelbestand al jaren. Heb ik ooit nagemaakt van een softwarepakket voor gezinsbudgettering. (ook toen was de uitdaginig om het na te maken naar mijn eigen wensen. Zo is het idee geboren om het in Acces na te bouwen. Ik klooi graag met software, maar weet er eigenlijk niet genoeg van VBA af. Ik ben er van overtuigd dat voorgestelde jou oplossing de betere oplossing is, alleen weet ik niet hoe ik dat zou moeten maken. Kun je me misschien en klein voorbeeldje geven om mij op weg te helpen. Alvast bedankt
 
zoeken

Octafish

Ik heb de door jou voorgestelde tabellen gemaakt en toegevoegd aan deze reactie
 

Bijlagen

  • database.zip
    35,3 KB · Weergaven: 32
Dat is inderdaad wel wat ik voor ogen had, maar één record is natuurlijk een beetje weinig om mee te werken. Zonder nou gelijk van luiheid te willen worden beticht, vind ik het een beetje zonde van mijn tijd om nou eerst een half uur records te moeten inkloppen, die steek ik liever in echte hulp :). Kun je wat meer data meeleveren?
 
Probeer deze query eens te plakken in een nieuwe query:
PHP:
PARAMETERS [Typ een jaar:] Text ( 255 ), [Typ een maand:] Text ( 255 );
TRANSFORM Sum(prbtabel.Bedrag) AS SomVanBedrag
SELECT posten.naam_post, prbtabel.Jaar
FROM posten INNER JOIN prbtabel ON posten.post_id = prbtabel.Post_Id
WHERE (((prbtabel.Jaar)=[Typ een jaar:]) AND ((prbtabel.Maand)=[Typ een maand:]))
GROUP BY posten.naam_post, prbtabel.Jaar
PIVOT prbtabel.Maand;
 
zoeken

Octafish,

Bedankt voor jou oplossing. Dat werkt. Nu moet ik nog uitzoek hoe je bij het invoeren van de gegevens direct 12 records aanmaakt voor de diverse maanden

Nogmaals bedankt
 
Daar kan ik de code nog wel voor aanleveren, als je er niet uitkomt. De query kan nog wel netter, maar daar had ik overdag geen tijd voor. Probeer deze variant nog maar eens:
PHP:
PARAMETERS [Typ een jaar:] Text ( 5 ), [Typ een maand:] Text ( 5 );
TRANSFORM Sum(prbtabel.Bedrag) AS SomVanBedrag
SELECT posten.naam_post, prbtabel.Jaar
FROM posten INNER JOIN prbtabel ON posten.post_id = prbtabel.Post_Id
WHERE (((IIf([Typ een jaar:] Is Null,True,[jaar]=[Typ een jaar:]))<>False) AND ((IIf([Typ een maand:] Is Null,True,[maand]=[Typ een maand:]))<>False))
GROUP BY posten.naam_post, prbtabel.Jaar
PIVOT prbtabel.Maand In ("Jan","Feb","Mrt","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Dec");
 
zoeken

Octafish,

Bedankt deze werkt perfect. Je hebt het maar druk met mij. Ik ben inmiddels bezig om in het formulier de gegevens naar een andere maand te kopiëren. Dat lukt vrij aardig, alhoewel ik denk dat ik hier te moeilijk doe. Ik heb weer een voorbeeld toegevoegd. In het formulier Lasten kan ik posten invoeren en vervolgens in het formulierveld "mnd" de gegevens per maand kan kopiëren naar een nieuw record. Dit kan denk ik veel eenvoudiger, alleen ik weet niet hoe.
 

Bijlagen

  • budget.zip
    99,4 KB · Weergaven: 33
Ik snap je nieuwe formulier niet helemaal. Dat is nu een enkelvoudig formulier dat is gebaseerd op de tabel [prbtabel]. Daarmee kun je enkele records toevoegen. Voor de maand heb je blijkbaar een tekstvak gemaakt waarin je een maand moet typen, wat fouten oplevert (er zit al een maand met de naam 'japr' in je voorbeeld). Daarnaast gebruik je variabelen die je declareert zonder type, dan kun je ze net zo goed niet declareren, dan heb je er weinig aan. Je formulier kun je openen in de <Gegevensinvoer>=Ja modus, dan hoef je dat niet met een macro te doen. Beter ook, want nu kun je één formulier starten vanaf een hoofdformulier in verschillende modi: toevoegen of raadplegen bijvoorbeeld. Met zo'n startmacro krijg je altijd een leeg record. Zou mijn keuze dus niet zijn. Verder gebruik je nergens IntelliSense, en dat maakt het maken van code een stuk lastiger. Gebruik de hulpmiddelen die VBA je biedt :).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan