query maken met een deel van een tekstveld

Status
Niet open voor verdere reacties.

pvdlee

Gebruiker
Lid geworden
4 feb 2013
Berichten
74
Ik heb een bestand met lidmaten van een kerk uit de 18e eeuw
4 maal in het jaar werd de stand van die lidmaten bijgewerkt in maart juni september en december
ik heb de datums ingevoerd als een tekstveld in de vorm van YYYY-MM-DD
Maar nu wil ik een query maken waarbij ik alleen het jaargedeelte gebruik.
Hoe kan ik dat opgeven in de query?

Peter
 
Waarom niet als datumveld? Access heeft daar geen enkel probleem mee... Vanuit een tekstveld kun je met Left([datumveld];4) de eerste 4 tekens uitlezen.
 
Het wil me nog niet lukken
zie attachment, deze query levert 0 records op
Zet ik het statement verkeerd?

query.jpg

Peter
 
de functie gebruik je om het jaar uit de datum te halen; het criterium is dan waar je dat jaar op wilt filteren. Je kunt zelf dus een jaartal intypen, of met een parameter opvragen. Je vraag is daar ook niet duidelijk over.
 
OK ik heb het nu dus in twee stappen gedaan.
Eerst een veld jaar toegevoegd, en dan kan de query via dat veld uitgevoerd worden.
PS. ik heb een tekstveld gebruikt voor de datum omdat er ook datums zoals 1762-00-00 ed voorkomen.
Maar zo werkt het dus ook

Bedankt
 
Een veld toegevoegd? Lijkt mij niet nodig; met je query kun je dat er namelijk dus al prima uithalen. Tenzij je natuurlijk juist dat formuleveld bedoelt :).
 
Ik begrijp je niet helemaal denk ik
het doel van mijn query is, dat ik wil weten hoeveel mensen er belijdenis gedaan hebben in een bepaald jaar.
En daarvoor heb ik dus het jaar nodig en niet maand en dag.
Voor zover ik constateerde werkte de "group by" niet goed op een funktie left([datumveld]; 4)
met die funktie kon ik wel een veld vullen via een bijwerkquery
Maar misschien is dat een omweg?
 
Ik denk dat we langs elkaar heen babbelen, want nu begrijp ik jou niet meer.
het doel van mijn query is, dat ik wil weten hoeveel mensen er belijdenis gedaan hebben in een bepaald jaar.
Als je dat wilt weten, dan heb je dus het jaartal nodig dat je uit het datumveld haalt met de eerder gegeven functie die dus wél werkt. In het criterium van dat veld zet je dan een parameterveld. Iets als:
[Typ het jaartal dat je wilt zien.]. Op dezelfde regel dus als waar je de andere criteria hebt staan. Wellicht dat je een probleem krijgt omdat je een tekstveld hebt en daar een numeriek criterium op zet. Zou kunnen. In dat geval moet je de functie numeriek maken: CInt(Left([AVDM Datum];4)). Je criterium zal dan goed werken. Uiteraard zie je niks als je een verkeerd jaar invult :).
 
Misschien helpt als ik laat zien wat ik nu heb
query2.jpg

Met deze query krijg ik een mooie lijst met aantallen, naar die aantallen zijn nu verdeeld over 4 gebeurtenissen per jaar, Pasen, pinksteren, "ergens in september" en Kerst.
Wat ik nu wil is dat ik die aantallen per jaar krijg door het weglaten van "MM-DD" maand en dag aanduiding.
Zodat het resultaat een tabel is met JAAR en AANTAL.
Nu heb ik een tabel met YYYY-MM-DD en AANTAL

We komen er vast wel uit :)

peter
 
Dan blijf ik dus gewoon beweren dat je de eerder gegeven functie (al dan niet als getal) moet gebruiken als veld, en niet je datumveld.

Overigens zie ik totaal de noodzaak niet van een tabelmaak query, dit soort vragen is perfect op te lossen met een selectiequery. Extra tabellen maken de db alleen maar nodeloos zwaar en groot. Bovendien is het resultaat met een query dynamisch; als je een record toevoegt blijft je query het juiste resultaat laten zien. Je tabel moet je dan opnieuw maken.
 
De crux zit 'm denk ik in jouw formulering "de functie gebruiken als veld" daar uit trok ik de conclusie dat ik een extra veld in de tabel moest maken.
Maar ik moet dat dus anders opvatten.
Mbv de functie creeer ik een waarde die ik moet gebruiken.
Maar dan ontbreekt mij de kennis op welke manier ik dat kan realiseren.
 
Als je een query maakt, zet je velden in het raster. Als je de functie daarnaast zet, krijg je automatisch een nieuw veld, dat Access dan Expr1 noemt Daar zijn queries voor :). Die naam kun je uiteraard veranderen door het deel voor de dubbele punt te vervangen.
 
Er begint iets te dagen, maar het wil me nog niet helemaal lukken.
De query die ik nu gemaakt heb geeft nog geen goed resultaat, in het resultaat staat de expressie in plaats van een Jaartal, waar ik op hoopte

De query ziet er zo uit
query.jpg

en het resultaat

resultaat.jpg

Heb je weer een hint?
 
Het resultaat dat je nu hebt is logisch; je hebt van de formule een tekststring gemaakt en dat is dus het resultaat dat je nu ziet. De functie zou prima moeten werken als je de quootjes weghaalt. de functie Aantal(*) kun je beter vervangen door Aantal(1) of Aantal(ID). Nu tel je nodeloos veel velden, en dat maakt de query (in beginsel) trager.
 
Gelukt !!!
:d
Bedankt, weer wat geleerd !

Maar nu heb ik nog een vraag,
Je suggereerde om bij Aantal(*) te wijzigen in Aantal(1) of Aantal(ID), dat heb ik gedaan.
Maar, wat is de betekenis/functie van die waarde tussen de haakjes in dit geval?

Peter
 
Niet. D.w.z.: als je iets telt, moet je wel iets te tellen hebben. Feitenlijk voeg je met Aantal(1) een tijdelijk veld toe met de inhoud "1" en tel je het aantal keer dat "1" voorkomt. Iets vergelijkbaars doe je met Aantal([ID]). Dan tel je het aantal keer dat ID voorkomt. De functie AANTAL is dus een beetje tricky, want als je die functie gebruikt op een veld dat niet altijd gevuld is, zoals [Tussenvoegsel], krijg je een verkeerde uitkomst. Daarom pak ik of altijd het sleutelveld, of, nog makkelijk ook, Aantal(1).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan