Avatar billede ibnielsen Seniormester
14. maj 2004 - 12:35 Der er 14 kommentarer og
2 løsninger

knap til kodeordsrettelse i formular

jeg er ved at lave en sikret base, hvor brugerne kun ser data via formularer.
I denne base skal brugerne kunne ændre deres kodeord ved en knap på en formular, da de ikke skal slippes løs i menuen sikkerhed.
Hvordan laver jeg sådan en.
14. maj 2004 - 13:07 #1
Du kan lave 2 tekstbokse på en formular, som hedder "NyAdgangskode" og "GlAdgangkode"

På en knaps Click-hændelse skriver du:
ChancePassword Currentuser, Me!NyAdgangskode, Me!GlAdgangkode

Nedenstående kode lægges i et modul:
Public Function ChancePassword(Username As String, OldPassword As String, NewPassword As String) As Boolean
    Dim catDB As ADOX.Catalog
    Dim Usr As ADOX.User

    On Error GoTo ChancePassword_err
    Set catDB = New ADOX.Catalog
    With catDB
        .ActiveConnection = CurrentProject.Connection
        Set Usr = .Users(Username)
        Usr.ChangePassword OldPassword, NewPassword
    End With

    Set catDB = Nothing
    ChancePassword = True
    Exit Function
ChancePassword_err:
   
End Function


Inden koden virker, skal du lave en reference til ADOX (Tools->references og sæt kryds i "Microsoft ADO Ext. 2.x for DLL and security")

/Thomas
Avatar billede ibnielsen Seniormester
14. maj 2004 - 13:33 #2
Det der med referencen forstår jeg ikke, hvor ligger det
14. maj 2004 - 13:42 #3
I VBA-editoren under menuen Tools->references
Avatar billede ibnielsen Seniormester
14. maj 2004 - 13:50 #4
Og jeg fandt reverencen, men jeg er ikke skrap til visual basic, jeg tror dog jeg har fået det lavet rigtigt, men når jeg aktiverer knappen får jeg denne besked:
Microsoft Access kan ikke finde makroen "changePasswordCurrentuser, Me!Adgangskode,Me!'Gladgangskode".
Det forstår jeg ikke en lyd af?
Avatar billede ibnielsen Seniormester
14. maj 2004 - 13:58 #5
Jeg går til weekend - kigger mere på det på tirsdag
14. maj 2004 - 14:28 #6
Hmm, du skal ikke skrive linien i egenskabsarket. Koden skal stå i hændelsesproceduren.

-Slet alt hvad der står i knappens VedKlik-egenskab
-Højreklik på knappen og vælg "Generer hændelsesprocedure"
-I den fremkomne dialogboks vælges kodegenerator
-indsæt nedenstående linier:
ChancePassword Currentuser, Me!NyAdgangskode, Me!GlAdgangkode


Så skulle den gerne vær der.
Husk at kontrollere navnene på de 2 tekstbokse.
Avatar billede ibnielsen Seniormester
18. maj 2004 - 08:41 #7
Den giver stadig fejl, koden ser således ud:
Private Sub Kommandoknap21_Click()
On Error GoTo Err_Kommandoknap21_Click
    ChancePassword CurrentUser, Me!NyAdgangskode, Me!GlAdgangkode

 
Exit_Kommandoknap21_Click:
    Exit Sub

Err_Kommandoknap21_Click:
    MsgBox Err.Description
    Resume Exit_Kommandoknap21_Click
   
End Sub
18. maj 2004 - 08:51 #8
er det samme fejl?
Hvis du trykker Debug, når fejlen fremkommer, hvilken linie bliver så markeret med gult?
Avatar billede ibnielsen Seniormester
18. maj 2004 - 08:58 #9
Der kommer en dialogboks, der siger 'invalid use of null'
og jeg kommer ikke til visual basic.
hvis jeg kører koden i visual basic, kommer den med en dialogboks og efterlyser en makro, det kan være fordi jeg oprettede kommandoknappen til at køre en makro, fordi jeg ikke kunne finde ud af hvordan jeg eller s skulle oprette knappen, ligegyldig hvad jeg vælger, kommer en masse dialogbokse, hvor jeg kan vælge tabeller m.m. men ikke en hvor jeg bare selv kan skrive kode?
18. maj 2004 - 09:11 #10
hmm, det er lidt svært for mig, at gennemskue, hvad du har gjort. Så lad mig prøve at beskrive hvordan det skal se ud:

I et modul har du indsat denne funktion:

Public Function ChancePassword(Username As String, OldPassword As String, NewPassword As String) As Boolean
    Dim catDB As ADOX.Catalog
    Dim Usr As ADOX.User

    On Error GoTo ChancePassword_err
    Set catDB = New ADOX.Catalog
    With catDB
        .ActiveConnection = CurrentProject.Connection
        Set Usr = .Users(Username)
        Usr.ChangePassword OldPassword, NewPassword
    End With

    Set catDB = Nothing
    ChancePassword = True
    Exit Function
ChancePassword_err:
   
End Function

På knappens VedKilk-egenskab (altså i egenskabsarket) skal der blot stå "(Hændelsesprocedure)"
Når du herefter højreklikker på knappen og vælger Generer Hændelsesprocedure kommer du ind i VBA-editoren, hvor der nu står:

Private Sub Kommandoknap21_Click()
On Error GoTo Err_Kommandoknap21_Click
    ChancePassword CurrentUser, Me!NyAdgangskode, Me!GlAdgangkode

 
Exit_Kommandoknap21_Click:
    Exit Sub

Err_Kommandoknap21_Click:
    MsgBox Err.Description
    Resume Exit_Kommandoknap21_Click
   
End Sub

Du kan ikke køre knappen direkte fra Visual Basic, da den er Private og formularen ikke er åben (derfor spørger den efter en makro, når du prøver).
Du kan prøve at indsætte et Breakpoint på linien ChancePassword CurrentUser, Me!NyAdgangskode, Me!GlAdgangkode
Et breakpoint indsættes vha knappen som hedder "Toggle Breakpoint" på værktøjslinien i VBA og som forestiller en hvid hånd.
Når du starter formularen og klikker på knappen, vil koden blive afbrudt på denne linie, hvorefter du kan single-steppe med F8. Hvis du holder musen hen over f.eks. Me!NyAdgangskode, så kan du se værdien. Og hvis én af dem er Null, så er det her fejlen ligger.

Jeg håber, at jeg har forklaret det godt nok :o)
Avatar billede ibnielsen Seniormester
19. maj 2004 - 13:46 #11
Nu har jeg fundet fejlen, den er at man i access altid starter med et blankt kodeord, og det er derfor den kommer med fejlen med null, da feltet i tekstboksen ikke må være blankt, hvis jeg først retter kodeordet til noget anden en blank, kan jeg godt rette det fremover, bare jeg ikke bruger blank.
Kan man gøre noget så den tillader blank kodeord i glkodeord men ikke i nytkodeord. Det vil være det optimale, så kan de heller ikke blanke deres eget kodeord, men systemansvarlige kan kun blanke kodeord, og ikke give folk et nyt, så skal man ihvertfald logge på som den pågældende bruger efterfølgende og så gå til funktionen og rette brugerens kodeord uden om denne knap, men det er lidt omstændeligt, og heller ikke helt forsvarligt datasikkerhedsmæssige, da den logger brugernes adgang.
Kan det ikke lade sig gøre, vil jeg alligevel regne denne opgave for løst, så du kan få dine points.
19. maj 2004 - 13:56 #12
I dit kald, kan du prøve at lave koden om til:
ChancePassword CurrentUser, nz(Me!NyAdgangskode,""), Me!GlAdgangkode
19. maj 2004 - 14:02 #13
hvis du også vil forhindre, at du kan ændre det TIL blank, kan du ændre funktionen til:

Public Function ChancePassword(Username As String, OldPassword As String, NewPassword As String) As Boolean
    Dim catDB As ADOX.Catalog
    Dim Usr As ADOX.User

    On Error GoTo ChancePassword_err
    If NewPassword = "" then
      Msgbox "Den ny adgangskode kan ikke være blank!", vbcriticcal, "Ugyldig adgangskode!"
      Exit Function
    endif
    Set catDB = New ADOX.Catalog
    With catDB
        .ActiveConnection = CurrentProject.Connection
        Set Usr = .Users(Username)
        Usr.ChangePassword OldPassword, NewPassword
    End With

    Set catDB = Nothing
    ChancePassword = True
    Exit Function
ChancePassword_err:
   
End Function


Derved skal koden på knappen se således ud:
ChancePassword CurrentUser, nz(Me!NyAdgangskode,""), nz(Me!GlAdgangkode, "")
26. maj 2004 - 16:07 #14
hej Ib,

Fik du løst problemet?
Eller er det dig, som har givet mig en venlig Karma, hvor du skriver, at du ikke ved om spm. er lukket?

Du skal i hvert fald klikke på navnet til venstre inden du klikker på Accepter-knappen :o)
Avatar billede ibnielsen Seniormester
26. maj 2004 - 16:59 #15
tak for hjælpen, du har fortjent din karma
26. maj 2004 - 17:00 #16
Jamen, så siger tak for både karma og point :o)
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