Avatar billede longgaard_at_work Nybegynder
08. oktober 2010 - 14:01 Der er 2 kommentarer og
1 løsning

Case sensitive VBA

Jeg er ved at lave en password kontrol på et anonymt evalueringsskema.

Brugeren får udleveret et kode, som vedkommende skal indtaste for at kunne komme ind og give sin evaluering.
For at sikre at hver bruger kun giver een evaluering genereres et tilfældigt password, som bliver registeret i en tabel.

Når brugeren åbner databasen, skal passwordet bruges, hvorefter det skal slettes fra databasen, men....

Når jeg leder efter et gyldigt password bruger jeg i første omgang DCount().
Efter mange forgæves forsøg på at få den til at virke med en variabel som sammenligningskriterie, fik jeg et lidt mere positivt resultat med at henvise direkte til feltet på formen.

Koden ser således ud:
If DCount("*", "Tkoder", "[koder] = " & "Forms![FStartside].[Indentifikation]") > 0 Then
"luk brugeren ind, og slet passwordet fra listen"
Else
"Fortæl brugeren at der er noget galt"
End If

Men... Der skelnes ikke mellem store og små bogstaver. Så f.eks. "PaSSwpRd" = "password"

Har prøvet et skift fra:
Option Compare Database
til
Option Compare Binary
i Genneral, det havde nogen effekt på DCount.
(Testet direkte på to tekststrenge [if "aaa" <> "AAA"] var den case sentiv i binary mode)

Er der nogle som har et bud på hvordan jeg får DCount() gjort case sensitiv, eller hvordan jeg ellers kan lave noget tilsvarende?
Avatar billede neoman Novice
08. oktober 2010 - 16:29 #1
Du kunne omgå problemet ved at ignorere case i dit password - dcount kunne jo finde et duplikat (samme bogstaver) og så kunne du lade være med at tilbyde et password som er brugt før. I stedet for at slette det kune du flagge det som værende brugt
Avatar billede Slettet bruger
09. oktober 2010 - 00:08 #2
StrComp!~)
Avatar billede longgaard_at_work Nybegynder
07. december 2010 - 09:06 #3
Løsningen blev:

    Set rs = CurrentDb.OpenRecordset("Tkoder", dbOpenDynaset)
    Do Until rs.EOF
   
        CompareResult = StrComp(Nz(Forms![Fstartside].[Indentifikation]), CStr(rs!Koder), 0)
        KoderId = rs!id
        If CompareResult = 0 Then
            DoCmd.SetWarnings False
            DoCmd.RunSQL ("DELETE Tkoder.Koder " & _
                          "FROM Tkoder " & _
                          "WHERE (Tkoder.id)= " & rs!id)
            Exit Do
        End If
        DoCmd.SetWarnings True
        rs.MoveNext
    Loop
    rs.Close
    Set rs = Nothing
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester