Datum uitkomst in een tabel plaatsen

Status
Niet open voor verdere reacties.

jelleruben

Gebruiker
Lid geworden
11 nov 2006
Berichten
443
Hallo Allemaal,

Ik heb voor mijn Database nog een vraa.

In een tabel heb ik een veld aan_datum daarnaast heb ik nog een veld aan_telaat.

In het eerste veld zet ik een datum neer, en nu wil ik in het datum te laat een som hebben. datum + 35.

In een formulier lukt me wel om een tekstveld te maken, met de formule =[aanv_dd_datum]+35. Dit zel ik
bij de Besturingselementbron. Echter zal hij dus de uitkomst niet opslaan. Dit zou ik graag wel willen.
Omdat ik dan later een query kan draaien die dan te laat zijn.

Kan iemand me vertellen hoe ik dit het beste aan kan pakken?
 
Omdat ik dan later een query kan draaien die dan te laat zijn.
Gegevens die afhankelijk zijn van een ander, sla je in beginsel niet op in je database, dat levert alleen maar dataredundantie op. Bij Microsoft weten ze dat niet, want ze hebben tegenwoordig een berekend veld in de tabelstructuur zitten, en daar zou je het mee kunnen oplossen. Maar ik zou dat dus niet eens doen, want zoals je zelf al zegt: die datum kan je al uitrekenen. Dus opslaan is totaal niet nodig. En in je query waarmee je de records wilt laten zien die te laat zijn, kun je gewoon met dat berekende veld werken.
 
Alleen maar even om wat Michel gezegd heeft te benadrukken, het is "not done" om (makkelijk) berekenbare informatie op te slaan.
 
@ OctaFish ik zal eens kijken hoe dat dan gaat met een query.

@namliam Sorry maar dat kan ik ook wel uit het bericht lezen. ;)

EDIT: Ik merkte dat ik even op de goede pad moest gezet worden. Maar het werkt
 
Laatst bewerkt:
Niet iedereen gelooft de "mening" van een persoon, die wil nog wel eens "ja dat is jou mening" worden weggeveegd.... vandaar dat ik dit soort dingen vaak even bekrachtig zodat het niet "een mening is van een persoon"
 
Okay, ik snap je bedoeling. Bedankt voor het ter verduidelijking. Ik bedoelde het ver ook niet kwaad.
 
En ik maar denken dat ik met volkomen neutrale, goed beargumenteerde argumenten aan kom zetten...
 
Ja, ik weet het soms denk ik te ingewikkeld. En dan vraag ik te snel. Komt misschien ook door dat men (die de database willen) in mijn nek zitten

Maar dat jullie mijn de goede richting op drukken. En helpen Vindt ik alleen erg aardig. Daarom bedankt.
 
Toch even een vervolg.

Nu dat ik de query heb, wekt ook goed (met die formule) Echter weet ik zo niet hoe ik een selectie kan maken, voor een specifieke datum dan. Als ik een Criteria in vul, is de uitkomst steeds 0. terwijl er wel resulaten moeten zijn.Bekijk bijlage 201381

Naamloos.jpg
 
is de aanv_dd_datum wel van het type Datum? En niet (per ongeluk) tekst?
 
De bijlage is niet helemaal jofel; mag je nog een keer proberen :) Datumfilters kun je het beste in de Parameters vastleggen, dan werken ze beter.
 
@namliam dat is idd waar ik snel naar heb gekeken, en staat inderdaad op datum/tijd.

@OctaFish Parameters, daar zal ik eens in moeten gaan verdiepen, hoe dat werkt..
 
Werk je met 2007/2010? Dan is het simpel. Zie plaatje.
 

Bijlagen

  • Parameters.jpg
    Parameters.jpg
    98,5 KB · Weergaven: 50
Op mijn werk is het 2007, maar zag ook dat ik parameters in 2007 kan instellen. Echter als ik het invul, komt het niet bij "Criteria" te staan.

Alleen een vraagje van je afbeelding, die Start- en Einddatum waar worden die naar verwezen?
 
Laatst bewerkt:
Parameters worden nooit automatisch in de Criteriaregels ingevuld, want dat zou ook helemaal niet kunnen. Parameters moet je zien als definities van gegevensvelden. Standaard is een parameter in een criterium (alles wat tussen rechte haken staat is dus een parameter) van het type Tekst. Je legt dus in het Parameters venster vast welk soort gegeven je wilt filteren in het criterium. De feitelijke filtervraag maak je daarna zelf. Parameters zijn ook niet verplicht om op deze manier vast te leggen, maar het biedt wel aanzienlijke voordelen.

Een filtering als Between [Startdatum] And [Einddatum] werkt ook zonder parameterdefinities, maar zonder die definities herkent Access de parameters niet als een datumveld. De filtering is dus gebaseerd op een Tekststring (of twee in het voorbeeld), en zoals je weet, kun je een datum niet met een tekststring filteren, je moet de datum opmaken als Datum. Daarom zet Access uit zichzelf de datum die je intypt al tussen ##. Typ je in een datumveld de tekst '5-1' (zonder quootjes natuurlijk) dan maakt Access er dit van: #5-1-2014#. De hekjes geven dus aan dat de tekst ertussen een datum is. Net zoals "" aangeeft dat de ingesloten tekst een tekstveld is.

Wat is dus het probleem van het criterium Between [Startdatum] And [Einddatum] zonder parameter definities? Als je de query zonder meer uitvoert, en bij Startdatum 5-1 invult, en bij Einddatum 12-1, dan is het resultaat leeg. De ingevoerde waarden zijn namelijk geen datum, maar tekst. Door de parameters vast te leggen zoals in het plaatje, zijn het wél datumvelden, en kun je de datums invullen als 5-1 en 12-1. Deze verkorte wijze zorgt er overigens wel voor dat Access het huidige jaartal gebruikt, dus als je vorige jaren wilt filteren, dan moet je de volledige datums invullen. Maar dan nog is het handig om de parameters goed vast te leggen.

Laatste aandachtspuntje: als je een criterium op pak 'm beet Plaatsnaam maakt, en dat ziet er zo uit: [Typ de plaatsnaam die je wilt filteren:], en je wilt een parameter vastleggen voor die vraag, dan moet die letterlijk worden overgenomen. Zou je de parameter vastleggen als: [Typ de plaatsnaam die je wilt filteren] dan werkt hij al niet meer, omdat de teksten verschillen. Feitelijk heb je dan twee verschillende parameters in gebruik. Zo'n datumfilter maak ik, om de vragen wat vriendelijker te houden, dus meestal zo:
Parameterdefinities:
[Typ de Startdatum:] - Datum/Tijd
[Typ de Einddatum:]
- Datum/Tijd
En het criterium wordt dan:
Between [Typ de Startdatum:] And [Typ de Einddatum:]
Hoop dat het zo wat duidelijker is!
 
Beter (nog) ... IMNSHO, is om als je complexe(re) filteringen wil doen, deze te doen door een "filter by form" principe.
Je hebt dan een aantal velden op een formulier staan en een knop, achter die knop heb je wat code dat dynamisch een where clausule opbouwd...
Zo kan je dus makkelijk(er) switching tussen
EenDatum > #01-01-2014#
EenDatum < #01-01-2014#
EenDatum Between #01-01-2013# and #01-01-2014#

en ook nog eventueel AND en OR constructies inbouwen
Bovendien ziet een formulier er toch meestal mooier uit dan dat je 2 of misschien wel 10 popups krijgt van een query parameter, zeker als je er 10 krijgt en er maar 2 wil gebruiken.

OctaFish zei:
meer uitvoert, en bij Startdatum 5-1 invult, en bij Einddatum 12-1, dan is het resultaat leeg. De ingevoerde waarden zijn namelijk geen datum, maar tekst.
Ben het hier niet helemaal met je eens, als je tekst invult in een between op een datum veld kunnen er (ad random) 2 dingen gebeuren, beide impliciete conversies.
Of het datum veld word een text veld OF de tekst word een datum, hoe dan ook moet access er (impliciet) iets mee doen om er uberhaubt kaas van de kunnen maken.

In beide gevallen kan het zo zijn dat de resulterende recordset leeg is, echter hoeft dit lang niet zo te zijn.... Het resultaat kan zelfs (per ongeluk) goed zijn als/wanneer access de goede gok maakt. Maar ik 99+% van de gevallen is er uiteindelijk wel een verkeerd resultaat
 
Het wordt zo wel een erg technisch verhaal. En daarbij is je conclusie dan ook nog dat in 99+% de uitkomst fout is. Wat overigens inderdaad ook mijn ervaring is. Vandaar dat ik die 0,001% maar niet benoemd heb. Hou het simpel voor de TS, want die moet het ook nog snappen :)
 
Mannen bedankt, voor de informatie. Ik zal eens gaan kijken en puzzelen. Zal daarom deze topic, nog niet op opgelost zetten.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan