Errore in lettura recordset access per chiave

di il
2 risposte

Errore in lettura recordset access per chiave

Ho una form si un file excel vba con la quale devo fare login sulla tabella Users.

le credenziali sono: UserName: ***
                                Password: ***
I record sulla tabella Users del db Access sono presenti.
Inspiegabilmente esce per record non presente.
Ho fatto tutti i controlli che potevo, ma non ne vengo a capo.
Il codice che uso è il seguente:

Private Sub btnConferma_Click()

Dim myConn As ADODB.Connection
Dim rs1 As ADODB.Recordset

Set myConn = GetDBConnection(ActiveWorkbook.Path & "\Covesap.accdb")
Strsql = "SELECT users.Id_Utente, users.User_Id_Utente, users.Stato_Utente, users.Password_Utente, users.CognomeNome_Utente, users.UserLevel, T_Profilo.D_UserLevel" & _
             " FROM Users INNER JOIN T_Profilo ON T_Profilo.ID_UserLevel = users.UserLevel " & _
             " WHERE (((users.User_Id_Utente)='" & Trim(Me.txtUserName) & "' and (users.Password_Utente)= '" & Me.txtPassword & "'))"
    Set rs1 = myConn.Execute(Strsql)
    If rs1.State = 1 Then
        UserLogged = rs1("Id_Utente")
        UserLoggedProfile = rs1("UserLevel")
        Unload Me  'chiudo completamente login
        frmMain.Show
    Else
        UserLogged = 0
        MsgToEdit = "* Utente Inesistente *"
        Call sendMessage(MsgToEdit, True)
        Me.PallinoPassword.Visible = True
        Me.PallinoUserName.Visible = True
        Exit Sub
   End If

 rs1.Close
 Set rs1 = Nothing
 myConn.Close
 Set myConn = Nothing

End Sub

la query va in errore come da screnshot

Nella tabella Users del db Access il record esiste

per cercare il problema ho fatto un metodo in cui eseguivo la lettura per la solo Username e la lettura va a buon fine.

Ho creato perciò un metodo in cui faccio la lettura per la solo password e non funziona

il codice usato è il seguente:

Private Sub testPassword()

Dim myConn As ADODB.Connection
Dim rs1 As ADODB.Recordset

Set myConn = GetDBConnection(ActiveWorkbook.Path & "\Covesap.accdb")
Strsql = "SELECT users.Id_Utente, users.User_Id_Utente, users.Stato_Utente, users.Password_Utente, users.CognomeNome_Utente, users.UserLevel, T_Profilo.D_UserLevel" & _
             " FROM Users INNER JOIN T_Profilo ON T_Profilo.ID_UserLevel = users.UserLevel " & _
             " WHERE (((users.Password_Utente)='" & Trim(Me.txtPassword) & "'))"
           
    Set rs1 = myConn.Execute(Strsql)
    If rs1.State = 1 Then
        UserLogged = rs1("Id_Utente")
        UserLoggedProfile = rs1("UserLevel")
        Application.Wait DateAdd("s", 1, Now)
        Unload Me  'chiudo completamente login
        frmMain.Show
    Else
        UserLogged = 0
        MsgToEdit = "* Utente Inesistente *"
        Call sendMessage(MsgToEdit, True)
        Me.PallinoPassword.Visible = True
        Me.PallinoUserName.Visible = True
        Exit Sub
   End If


 rs1.Close
 Set rs1 = Nothing

myConn.Close
Set myConn = Nothing


End Sub

va in errore "3021" come evidenziato
Non capisco da dove nasca questo tipo di errore dato che il record è correttamente presente in db.
Come posso risolvere il problema ?

Grazie
Moreno

2 Risposte

  • Re: Errore in lettura recordset access per chiave

    Dal titolo e dalla.sezione non si capisce se stai usando access o excel...

    Quale che sia, io non so come vengono gestiti i campi password, se stai semplicemente mascherando "Pippo" con  gli asterischi o se effettivamente è una password dove scrivi Pippo (anche se mascherato da asterischi) e viene salvato "s668dh##gt789" in modo da nascondere, anche in caso di crack del db, che a questa stringa corrisponda la parola in chiaro "Pippo".

    Fatta la premessa, se ho dei record con id che vanno da 1 a infinito, se faccio una select where id= 0 oppure id=ABC ottengo un insieme vuoto (privo di elementi o record) ma quel

    26/12/2025 - morenog ha scritto:

    rs1.State = 1 Then

    Sarà comunque soddisfatto.

    Prova passo passo a controllare il codice impostando sia la pw giusta che la pw sbagliata e facci sapere se lo state cambia da 1 a 0

    Poi ne riparliamo...

  • Re: Errore in lettura recordset access per chiave

    Dulcis in fundo...

    Una ricerca dell'errore da questo:

    L'errore VBA 3021 ("No Current Record") in Microsoft Access si verifica quando il codice tenta di accedere a un record che non esiste o non è più valido, spesso perché la query non restituisce risultati

    Rs1.state è giusto perché qualsiasi insieme contiene l'insieme vuoto ma se cerchi "Pippo" non sarà mai presente in quell'insieme proprio perché vuoto.

    Cerca come gestire le password prima di utilizzarle. Credo esista una funzione apposita.

Devi accedere o registrarti per scrivere nel forum
2 risposte