CODICE VBA PER CAMBIO PASSWORD

di il
6 risposte

CODICE VBA PER CAMBIO PASSWORD

Buonasera,
qualcuno potrebbe aiutarmi con un codice di cambio password su access?
mi servirebbe un codice che possa far cambiare la password ed aggiornare il record correlato della tabella utenti.
Ve ne sarei grata,
Grazie mille

Ho descritto il mio problema nella risposta sotto, grazie ancora.

6 Risposte

  • Re: CODICE VBA PER CAMBIO PASSWORD

    Ma di quale password parli?

    E comunque non si fornisce codice pronto all'uso... qui si discute di programmazione
  • Re: CODICE VBA PER CAMBIO PASSWORD

    Ipotizzando tu abbia diviso il FE e BE w che tu stia parlando del BE... se così non fosse devi farlo dall'esterno del tuo applicativo con uno script vbs.

    Apri da vba il database in modalità esclusiva dopo aver sconnesso qualsiasi recordset aperto.
    Sull'oggetto database puoi usare lil metodo NewPassword documentato nella guida in linea.

    Ora documentati bene e prova ad applicare facendo attenzione alla premessa fatta.
  • Re: CODICE VBA PER CAMBIO PASSWORD

    Scusate per la poca chiarezza.
    Sto lavorando su un DB Access per la gestione della manutenzione, il codice l'ho già scritto,
    chiedevo se qualcuno potesse aiutarmi a trovare l'errore.
    Nella maschera ci sono:
    - casella username che si chiama TxtCF
    - casella con Password attuale che si chiama TxtPassword
    - casella con Nuova Password che si chiama TxtNewPw
    - casella con conferma Password che si chiama TxtConfPw
    Al pulsante per salvare le modifiche chiamato CmdConferma è associato il seguente codice:


    Option Compare Database
    Option Explicit
    Private Identification As Integer
    Private Tabella As String

    Private Sub Form_Load()
    Dim LInput() As String
    Me.TxtCF.SetFocus
    Me.CmdConferma.Enabled = False
    If Not IsNull(Me.OpenArgs) Then
    LInput = Split(Me.OpenArgs, "|")
    Identification = LInput(0) 'Se esiste un argomento di apertura 'Setta la variabile Identification al valore contenuto nella variabile openarg
    Tabella = LInput(1)
    Else 'Solo per DEBUG ... Dopo andrebbe tolto
    Identification = 1
    Tabella = "UTENTI"
    End If
    End Sub

    Private Sub CmdConferma_Click()
    Dim Rs As DAO.Recordset
    Dim Query As String

    On Error GoTo ErrorLine
    Query = "SELECT Password FROM " & Tabella & " WHERE [ID] = " & Identification
    Set Rs = CurrentDb.OpenRecordset(Query)
    If Not Rs Is Nothing Then
    Rs.Edit 'Edit permette di aprire in scrittura il recordset
    Rs.Fields(0) = Me.TxtNewPw.Value
    Rs.Update
    Rs.Close
    Set Rs = Nothing
    Me.TxtPassword.Value = Me.TxtNewPw.Value
    Me.TxtNewPw.Value = ""
    Me.TxtConfPw.Value = ""
    Me.CmdConferma.Enabled = False
    MsgBox ("Password cambiata correttamente")
    Else
    MsgBox "Attenzione ! Non è stato possibile aggiornare il dato"
    End If

    ErrorLine:
    If Err.Number <> 0 Then
    MsgBox "Attenzione ! Non è stato possibile aggiornare il dato, si è verificato il seguente errore:" & Err.Number & " " & Err.Description, vbCritical, ""
    End If
    End Sub

    Private Sub CmdIndietro_Click()
    DoCmd.Close
    DoCmd.OpenForm "Login"
    End Sub

    Private Sub TxtConfPw_AfterUpdate()
    Call Activate
    End Sub

    Private Sub TxtConfPw_KeyDown(KeyCode As Integer, Shift As Integer)
    On Error Resume Next
    If KeyCode = 13 Then
    Me.CmdIndietro.SetFocus
    End If
    End Sub

    Private Sub TxtNewPw_AfterUpdate()
    Call Activate
    End Sub

    Private Sub TxtNewPw_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = 13 Then
    Me.TxtConfPw.SetFocus
    End If
    End Sub

    Private Sub TxtPassword_AfterUpdate()
    Call Activate
    End Sub

    Private Sub TxtPassword_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = 13 Then
    Me.TxtNewPw.SetFocus
    End If
    End Sub


    Public Sub Activate()
    Dim Ok As Boolean
    Dim OkPassword As String
    Ok = False
    If Me.TxtCF <> "" And Me.TxtPassword <> "" And Me.TxtNewPw <> "" And Me.TxtConfPw <> "" Then
    Ok = VerificaDati
    If Ok = False Then
    Me.TxtCF = ""
    Me.TxtPassword = ""
    Me.TxtNewPw = ""
    Me.TxtConfPw = ""
    Me.TxtCF.SetFocus
    MsgBox "Nome Utente e/o Password errati", vbCritical, "Errore"
    Else
    OkPassword = VerificaPassword
    If OkPassword <> "OK" Then
    Me.TxtNewPw = ""
    Me.TxtConfPw = ""
    Me.TxtNewPw.SetFocus
    MsgBox OkPassword, vbCritical, "Errore"
    Else
    Me.CmdConferma.Enabled = True
    End If
    End If
    End If
    End Sub

    Private Sub TxtCF_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = 13 Then
    Me.TxtPassword.SetFocus
    End If
    End Sub

    Private Function VerificaDati() As Boolean
    Dim Rs As DAO.Recordset
    Dim Query As String, Us As String, Pw As String
    Dim Result As Boolean

    Result = False

    On Error GoTo ErrorLine
    Us = Nz(TxtCF, "") 'Controlli inutili
    Pw = Nz(TxtPassword, "")
    If Not (Us = "" Or Pw = "") Then
    Query = "SELECT CodFiscale, Password FROM " & Tabella & " WHERE [ID] = " & Identification
    Set Rs = CurrentDb.OpenRecordset(Query)
    If Rs.Fields("CodFiscale") = Us And Rs.Fields("Password") = Pw Then Result = True
    End If
    Rs.Close
    Set Rs = Nothing
    VerificaDati = Result

    ErrorLine:
    If Err.Number <> 0 Then
    VerificaDati = False
    MsgBox "There was an error in the program. Please notify database administrator"
    Exit Function
    End If
    End Function
    Private Function VerificaPassword() As String
    Dim PwOk As Boolean
    Dim Pw, Pw1 As String
    PwOk = False
    Pw = Nz(TxtNewPw, "")
    Pw1 = Nz(TxtConfPw, "")
    If Pw <> Pw1 Then
    VerificaPassword = "Le due Password non coincidono"
    Else
    PwOk = CheckPw(TxtNewPw.Value)
    If PwOk = False Then
    VerificaPassword = "La password deve avere almeno 5 caratteri di cui almeno due numerici"
    Else
    VerificaPassword = "OK"
    End If
    End If
    End Function

    Il codice funziona solamente per il primo record della nostra tabella "UTENTI" che contiene i campi:
    - ID (chiave primaria) con tipo dati numerazione automatica
    - CodFiscale con tipo dati testo breve
    - Password con tipo dati testo breve
    Vi ringrazio anticipatamente
  • Re: CODICE VBA PER CAMBIO PASSWORD

    Ma queste righe ci sono ?

    Else 'Solo per DEBUG ... Dopo andrebbe tolto
    Identification = 1
    Tabella = "UTENTI"
    End If
  • Re: CODICE VBA PER CAMBIO PASSWORD

    Come da regolamento devi usare i TAG code (ed indentare il codice)
  • Re: CODICE VBA PER CAMBIO PASSWORD

    Private Sub TxtPassword_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = 13 Then
    Me.TxtNewPw.SetFocus
    End If
    End Sub
    questo è inutile, ti basta settare l'ordine di tabulazione, idem per le altre uguali

    fai uso spropositato di richiami ad un sacco di eventi e funzioni ... io semplificherei il tutto.
    Lascia attivo tutto (pulsante di conferma compreso)
    Intanto da quello che scrivi sembra che questa form sia solo per il cambio password quando potresti facilmente usarla sia per il login che per il cambio password ... ma da quello che intuisco immagino tu abbia sdoppiato le cose duplicando fondamentalmente una form quasi uguale ed appesantendo il programma.

    EDIT: scorrendo il codice ...
    questa
    Query = "SELECT CodFiscale, Password FROM " & Tabella & " WHERE [ID] = " & Identification
    Set Rs = CurrentDb.OpenRecordset(Query)
    If Rs.Fields("CodFiscale") = Us And Rs.Fields("Password") = Pw Then Result = True
    End If
    Rs.Close
    ha secondo me + senso fare il controllo nella select, anzi potresti usare un DCount
    
    OK=dcount(1,"tuaTabella","CodFiscale='" & us & "' and password='" & pw & "'"
    o ancora meglio
    
    OK=dcount(1,"tuaTabella","CodFiscale='" & replace$(nz(us,vbnullstring),"'","''") & "' and password='" & replace(nz(pw,vbnullstring),"'","''") & "'"
    per evitare errori
Devi accedere o registrarti per scrivere nel forum
6 risposte