14. maj 2004 - 12:35Der 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.
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")
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?
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.
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
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?
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
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.
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.
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, "")
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.