Problemen met hoofdlettergevoeligheid in queries

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

C4th

Gebruiker
Lid geworden
31 mei 2006
Berichten
10
Hallo,

Ik heb een gegevensbestand met plaatsnamen.
In die namenlijst staan "Deventer" naast "DEVENTER" idem voor "Apeldoorn" en "APELDOORN".
In de query filter ik de plaatsnamen en daarnaast tel ik hoe vaak de plaatsnaam voorkomt.

Het is voor de output heel belangrijk dat DEVENTER apart geteld wordt van Deventer.
Dus mijn gewenste output ziet er zo uit:
Plaats Aantal
APELDOORN 12
Apeldoorn 8
DEVENTER 19
Deventer 4

Momenteel is de output :
Plaats Aantal
APELDOORN 20
DEVENTER 23

Uiteraard zijn dit voorbeeldaantallen, in het echt gaat het om veel meer records.
Ik hoop dat er iemand is die me hier verder mee kan helpen.
 
Helaas is access niet standaard case sensitive. Er is wel de strcomp() functie. Je moet dan echter de query 2x doen, 1 voor de lowercase en 1 voor de uppercase.

Misschien dat er een betere methode bestaat, maar ik ken er geen waarmee je beiden in een enkele query kunt stoppen.
 
Dank, ik ben al met de StrComp aan het stoeien geweest.

Mijn oorspronkelijke query was:
SELECT (S20.WNPLTSNM) AS Woonplaatsnaam, Count(S20.WNPLTSNM) AS Aantal
FROM S20
GROUP BY (S20.WNPLTSNM);

Dit leverde dus op:
PLAATS
DEVENTER 10380
APELDOORN 9996

Daarnaast heb ik de StrComp geprobeerd.
De query zag er zo uit:
SELECT S20.WNPLTSNM, Count(S20.WNPLTSNM) AS CountOfWNPLTSNM1
FROM S20
WHERE (((StrComp(UCase([WNPLTSNM]),[WNPLTSNM],0))=-1))
GROUP BY S20.WNPLTSNM;

Dit leverde het volgende op:
PLAATS
Deventer 2
Apeldoorn 1

Waar ik dus eigenlijk hoop op:
PLAATS
DEVENTER 10378
Deventer 2
APELDOORN 9995
Apeldoorn 1

Maar ja, dat zij twee losse queries, die ik dus eigenlijk gecombineerd moet zien te krijgen...
 
Je kan wel 2 selects doen en een outer join in een enkele query, maar dat is eigenlijk nog steeds 2 queries met cheaten
 
2 selects met een outer join klinkt wel goed. Hoe doe ik zoiets dan?
Ik ben niet zo heel handig met Access en queries. Bovenstaand verhaal heeft me zonder overdrijven al bijna 3 uur gekost, dus enige hulp zou welkom zijn.
 
Twee Queries kun je met een Union query samenvoegen. Zet de eerste in SQL weergave, haal de ; weg, maak een nieuwe regel, typ UNION en dan de hele Select... van de tweede query.
 
Hoi OctaFish,

Hartelijk dank voor je tip, nu ben ik er bijna.

Mijn huidige (met UNION) query levert op:
PLAATS Aantal
DEVENTER 10380
Deventer 2
APELDOORN 9996
Apeldoorn 1

Kortom: Ik ben al een heel stuk verder, alleen de telling klopt (nog) niet.
Het eerste deel van de query (voor de UNION) telt alle voorkomens van Deventer en Apeldoorn, de tweede telt alleen de afwijkingen.
Kortom: De Kleine letters worden dubbel geteld.

Heb je daar misschien ook nog een oplossing voor?
 
De query is niet hoofdlettergevoelig, dus die telt alles. Je tweede query test je specifiek op hoofdletters. Ik zou zeggen: test je eerste query ook op specifieke notatie.
 
Hmmm, daar heb je een punt, dat zou moeten kunnen werken.
Dan blijft er maar één vraag over: Hoe test ik op een InitCap-schrijfwijze in MsAccess?
Alles hoofdletters en alles kleine letters gaat me lukken, maar eerste letter hoofdletter en rest kleine letters.... Dat weet ik ehct niet.
 
Met Left en Mid moet je een eind kunnen komen. Zelf zou ik overigens de hele procedure met een Recordset op een formulier doen; een formulier kun je namelijk wèl hoofdlettergevoelig maken.
 
Recordset op formulier? Hmmm... ik moet toch die Acces cursus die ik hier op het forum ergens zag staan maar eens gaan volgen denk ik.

Morgen ga ik wel stoeien met Left en Mid. Voor nu: Bedankt voor je hulp en goede nacht.
 
Access kent een optie die ervoor zorgt dat teksten die in die module worden verwerkt als letterlijke tekst wordt verwerkt: Option Compare Text. Als je een Recordset maakt die de tabel opent, kun je matrixvariabele vullen die alle unieke waarden telt. Uniek is in dit geval dus de letterlijke schrijfwijze.
 
Ik denk dat ik er zo wel uit ga komen.
Hartelijk dank voor de hulp.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan