Do until con .findfirst

di il
4 risposte

Do until con .findfirst

Buongiorno,

Sono nuovo alla programmazione di codice per database access e sto cercando di scrivere un codice per una maschera di inserimento utente e password (da caselle di testo) con dati da confrontare in tabella contenete utenti e password. Non riesco a capire perché non viene eseguito il ciclo do until utilizzando .findfirst. Credo che si tratti di errore di sintassi con la .findfirst ma non so come scriverlo per eseguire correttamente ciò che voglio.

Il codice è il seguente:

Private Sub comando1_click()

Dim databaselab As DAO.Database ' imposta le variabili al database
Dim dati_accesso As DAO.Recordset 'imposta le variabili alla tabella

username1 = casellausername.Value ' assegna il valore della casella di testo della username
password1 = casellapassword.Value ' assegna il valore della casella di testo della password

Set databaselab = CurrentDb ' apre il database
Set dati_accesso = databaselab.OpenRecordset("dati_accesso", dbOpenDynaset) ' apre la tabella


dati_accesso.FindFirst "[username]" = username1 and "[password]" = password1

Do Until dati_accesso.NoMatch

MsgBox ("utente non trovato")

dati_accesso.FindNext "[username]"= username1 and "[password]" = password1


Loop


MsgBox ("utente trovato")

databaselab.Close
dati_accesso.Close
Exit Sub
End Sub


Potreste indicarmi la possibile soluzione?

Grazie.

4 Risposte

  • Re: Do until con .findfirst

    A parte gli errori del codice, devi usare una SELECT con una query SQL e non un ciclo.
  • Re: Do until con .findfirst

    Innanzitutto fai una gran confusione...
    Se hai una maschera di inserimento LOGIN potrebbe bastare la verifica con Dlookup senza aprire recordset.
    Seconda cosa non devi aprire tutta la tabella e scorrerla per vedere se trovi l'utente... è una cosa assurda le query con la.where CONDITION servono a questo...
    "SELECT * FROM USERTABLE
    WHERE User='" & me!txtUser & "' Password='" & me!txtPassword & "'"
    Se vedi poi la sintassi per i campi testo richiede gli apici...
    Se il recordset aperto sulla SELECT è vuoto significa che non esiste oppure ha sbagliato...
    La DLOOKUP/DCOUNT sinusa allo stesso modo e per chi ha poca dimestichezza è piu semplice...

    Inutile dire che il tuo codice è da cancellare.
  • Re: Do until con .findfirst

    Buongiorno,

    ho rivisto il codice sopra e con il suggerimento di inserire la funzione DLookup l'ho riscritto cosi:

    Dim confronto As Variant

    username.SetFocus ' casella di testo dell'username
    password.SetFocus ' casella di testo della password

    confronto = DLookup("username", "password", "datiaccesso", "username='" & username.Text & "'" And "password='" & password.Text & "'")

    If IsNull(confronto) Then

    MsgBox ("accesso")
    Else
    MsgBox ("accesso negato")

    End If

    End Sub

    mi da l'errore alla funzione DLookup e non riesco a capire perché.
  • Re: Do until con .findfirst

    eddy1973 ha scritto:


    Buongiorno,

    ho rivisto il codice sopra e con il suggerimento di inserire la funzione DLookup l'ho riscritto cosi:
    
    Dim confronto As Variant
    
     username.SetFocus ' casella di testo dell'username
     password.SetFocus  ' casella di testo della password
     
     confronto = DLookup("username", "password", "datiaccesso", "username='" & username.Text & "'" And "password='" & password.Text & "'")
     
     If IsNull(confronto) Then
    
     MsgBox ("accesso")
     Else
    MsgBox ("accesso negato")
    
    End If
    
     End Sub
    mi da l'errore alla funzione DLookup e non riesco a capire perché.
    Hai commesso una quantità di errori che è complicato da pensare...
    La prima cosa che devi imparare è quella di mettere i TAG del codice...!!!!!!

    Poi questo non serve a NULLA:
    
     username.SetFocus ' casella di testo dell'username
     password.SetFocus  ' casella di testo della password
    Poi in Access non si usa la Proprietà Text ma la proprietà Value per le TextBox, salvo in eventi specifici..., non è questo il caso.
    Poi non sai come si concatenano le Stringhe...!!!

    Poi NON hai letto la GUIDA su come funziona la FUnzione perchè hai scritto una cosa impossibile da vedere anche avendo fantasia...!!!
    
     DLookup( espr, dominio [, criteri] )
    La guida dice per [espr] che è:
    
    Un'espressione che identifica il campo di cui si vuole che venga restituito il valore.
    Può essere un'espressione stringa che identifica un campo in una tabella o in una query oppure un'espressione che esegue un calcolo sui dati di tale campo.
    In espr è possibile includere il nome di un campo di una tabella, un controllo di una maschera, una costante o una funzione.
    Se espr include una funzione, può essere predefinita o definita dall'utente, ma non può essere un altro dominio aggregato o una funzione di aggregazione SQL.
    Tu hai messo 2 Parametri... dove lo hai letto...????

    Usa DCOUNT che è più comoda...!
    
    Dim lCount As Long
    lCount = DCount("*", "datiaccesso", "username='" & Me!username.Value & "' And password='" & Me!password.Value & "'")
    Se il valore lCount>0 l'utente esiste ed ha inserito la PWD giusta.

    Personalmente avrei diviso il controllo in 2 parti per discriminare se l'errore è nell'utente o nella pwd... ma è un dettaglio.
Devi accedere o registrarti per scrivere nel forum
4 risposte