Hoe een funktie "CurrentUser" niet lettergevoelig maken?

Status
Niet open voor verdere reacties.

Vuurbok

Gebruiker
Lid geworden
20 feb 2010
Berichten
65
Hoi luitjes,

Het is mij niet gelukt om de onderstaande funktie "CurrentUser" passend te maken om ervoor te zorgen dat het niet hoofdlettergevoelig is. Want het is mij opgevallen dat als er iemand bijvoorbeeld dit volgende woord "bestelgroep" of "BeStElGrOeP" in plaats van "Bestelgroep" als inlognaam intikt, dan wordt de beveiliging makkelijk omzeilt en kunnen ze doodleuk meteen door naar de database wat het niet de bedoeling is. Hoe kan ik ervoor zorgen dat al deze woorden die gewoon dezelfde zijn, herkend wordt door Access als één woord. Dus dat de funktie "CurrentUser" niet hoofdlettergevoelig is? Alvast wil ik jullie hartelijk bedanken voor jullie moeite om mij te helpen als het mogelijk is. :D :D :D

HTML:
Private Sub Form_Load()
    If Not CurrentUser = "Bestelgroep" Then
    DoCmd.Close
    DoCmd.OpenForm "frm_Antilichamendatabase", acNormal, "", "", , acNormal
    End If
End Sub

Met vriendelijke groet,

Vuurbok!
 
Zet eerst alles naar hoofdletters
Code:
If Not ucase(CurrentUser) = "BESTELGROEP" Then
 
Laatst bewerkt:
SUPER!!!! Het werkt! Bedankt, Ellasar! :D :D :D

Dus de funktie ucase staat voor het negeren van hoofdlettergevoelig? Heb ik hiervan weer van opgestoken! :D

Groeten van Vuurbok!
 
De functie Ucase staat voor het omzetten van het woord naar hoofdletters.
Zo is er ook de functie Lcase voor het omzetten van het woord naar kleine letters.

Het had dus ook zo mogen zijn:
Code:
If Not Lcase(CurrentUser) = "bestelgroep" Then
 
De functie UCASE zet tekst om naar hoofdletters, negeren speelt hierbij geen rol. Hetzelfde geldt voor LCASE (omzetten naar kleine letters).

Je kunt in je procedure op twee manieren een tekstvergelijking afdwingen:

Code:
Option Compare Text
of
Code:
Option Compare Binary
Met de eerste optie (die je bovenin je module zet) is AaA gelijk aan aAa, aAA etc. Oftwel: het maakt niet uit of je hoofd- of kleine letters gebruikt. Met deze optie heb je dus helemaal geen UCASE of LCASE nodig.

Met Option Compare Binary test je op de binaire waarde van de tekens. Daarbij is AaA kleiner dan aAa, dat weer groter is als aAA etc. Als je wilt dat gebruikers in wachtwoorden Hoofd en kleine letters mogen gebruiken, dan moet je ook Option Compare Binary gebruiken; met elke ander Option Compare maakt het niet uit of je hoofd- of kleine letters typt.
 
Hoi Allebei,

Hartelijk bedankt voor de goede uitleg wat UCASE en LCASE betekenen. Zo op het oog lijken ze wel een afkorting van uppercase en lowercase. Weer wat erbij geleerd. :D

@OctaFish:

De hexadeximale talstelsel snap ik nu helemaal na een korte studie evenals binaire en de resterende talstelsels, maar wat ik nu even niet begrijp is wat de reden is dat het volgens jou deze regel zo gaat: AaA<aAA<aAa? Staat a dan voor 16 decimaal? :confused:

Hoe pas je die funkties dan toe? Gaat het dan zo volgens de onderstaande regel als voorbeeld? :)

HTML:
Private Sub Form_Load()
    If Not Option Compare Binary(CurrentUser) = "Bestelgroep" Then
    DoCmd.Close
    DoCmd.OpenForm "frm_Antilichamendatabase", acNormal, "", "", , acNormal
    End If
End Sub
 
Ik geef slechts een tekstvoorbeeldje; in dit geval is een A inderdaad gewoon een A :) Bij binaire Compare heeft een A de ASCII waarde 65, en de letter a de waarde 97. Dus als je 3 a-tjes achter elkaar zet, dan wordt bij binair gesorteerd op 65;97,75 en bij text op 65;65;65 (ik noem maar wat; voor hetzelfde geld is het de kleine a).
De sorteervolgorde is dus: A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
Bij Text is de sorteervolgorde: (A=a) < (À=à) < (B=b) < (E=e) < (Ê=ê) < (Z=z) < (Ø=ø)
Dus hexadecimaal heeft er allemaal niet zoveel mee te maken ;)

In deze variant:
Code:
Option Compare Binary

Private Sub Form_Load()
    If Not (CurrentUser) = "Bestelgroep" Then
        DoCmd.Close acForm, Me.Form.Name
        DoCmd.OpenForm "frm_Antilichamendatabase", acNormal
    End If
End Sub
moet je letterlijk "Bestelgroep" intypen, anders krijg je de foutvariant.

Bij deze variant:
Code:
Option Compare Text

Private Sub Form_Load()
    If Not (CurrentUser) = "Bestelgroep" Then
        DoCmd.Close acForm, Me.Form.Name
        DoCmd.OpenForm "frm_Antilichamendatabase", acNormal
    End If
End Sub

mag je "Bestelgroep" intypen, "bestelgroep" of "BESTELgroep". Allemaal goed....
 
De option methode is nog mooier maar houd wel in de gaten dat dan voor de hele module die option geld. waardoor je als je "option compare text" gebruikt en je wil wel ergens anders in deze module "Hoofdlettergevoelig" vergelijken je een commando als strComp moet gebruiken.

Zie dit als "meerdere wegen naar Rome" en er is geen fout antwoord, je moet alleen kijken wat in jou programma het beste past.
 
Goeie aanvulling! En als we dan toch bezig zijn: de check op een loginnaam + wachtwoord kun je natuurlijk ook in een functie op een aparte module zetten; elke module heeft een eigen Option. Dus als je alleen voor een bepaalde handeling een bepaalde Compare Option (Binary, Text) nodig hebt, dan kun je dat oplossen met een eigen module voor die functie.
 
Hartelijk bedankt voor jullie moeite om mij stapsgewijs uit te leggen hoe en wat! :D De funktie StrComp moet ik nog kennen, want heb geen flauw idee wat die precies doet en hoe ik dit kan toepassen. Het is inderdaad waar dat ik goed moet weten welke funktie het beste is voor mij database. Het belangrijkste is dat als men in mijn database gaat inloggen, hun naam en wachtwoord gescand wordt om ze door te kunnen laten of juist blokkeren. Momenteel denk ik dat de funktie UCASE/LCASE misschien afdoende is.

Ik ben nieuwsgierig of het mogelijk is om bij een logon-schermpje een keuzevak gemaakt kan worden in het naam-tekstvakje zodat alleen de bekende namen van de personen/groepen (die reeds aangemaakt en opgeslagen zijn) te zien zijn? Dus dat men één van ze kiest en dan een bijbehorend wachtwoord intikt. Zou het dan mogelijk zijn? Of moet ik toch een apart formulier aanmaken met daarin een lijst? :confused:

P.S. Vergeef mijn vraag, maar wat is module? Ben nog niet helemaal thuis met Access-jargon. :p
 
Dat doe je simpel door een Keuzelijst met invoervak te maken. Dan kun je alleen kiezen uit bestaande personen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan