Newsgroup: it.comp.appl.access
Titolo: Ciclo per password

Access 2000
Ho una maschera con un controllo testo, maschera inmput a password, ed un
pulsante.
Sul click del pulsante ho questa procedura:
Private Sub cmdPass_Click()
For i = 1 To 4
    If Me.Testo3 = "entra" Then
        Exit For
        DoCmd.Close ' chiude la maschera di digitazione password
        DoCmd.OpenForm "mascCerca" 'apre una maschera del database
    Else
    MsgBox "La password non č esatta", vbCritical, "Attenzione"
    Me.Testo3.SetFocus
    Me.Testo3.Text = ""
    End If
Next i
    End Sub
Vorrei che ad ogni immissione sbagliata della password appaia il messaggio,
come nel codice, e al quarto tentativo sbagliato il messaggio appaia tipo
"ultimo tentativo il db verrą chiuso"e quindi il database si chiuda.
Solo che con quello che ho fatto se sbaglio password, appare il messaggio,
ma ogni volta che faccio click su ok del messaggio questo rimane visibile e
solo al quarto click scompare.
Ciao Franco


Ciao,
puoi raggiungere il tuo obiettivo nel seguente modo
-----------------------------------------------
-) dichiari 3 variabili nella sezione generale
 Option Compare Database
  Dim i, j, x As Integer
----------------------------------------------
-) inizializzi le variabile in fase di apertura del form
       i = 1
       j = 1
       x = 0
-----------------------------------------------------------
-) All'interno dell'evento click del pulsante puoi utilizzare il costrutto 
condizionale (if...then...end if) incrementando le variabili...
Private Sub cmdPass_Click()
     If x = 1 Then
       If Me.Testo3 = "entra" Then
          DoCmd.Close ' chiude la maschera di digitazione password
          DoCmd.OpenForm "mascCerca" 'apre una maschera del database
       Else
          MsgBox "chiudo il db"
        End If
      End If
   If i < 4 Then
      If j < 4 Then
         If Me.Testo3 = "entra" Then
          DoCmd.Close ' chiude la maschera di digitazione password
          DoCmd.OpenForm "mascCerca" 'apre una maschera del database
       Else
          MsgBox "La password non è esatta", vbCritical, "Attenzione"
          Me.Testo3.SetFocus
          Me.Testo3.Text = ""
          j = j + 1
         End If
     End If
    End If
     If i = 4 Then
       MsgBox "Ultimo tentativo il db verrà chiuso", vbCritical, 
"Attenzione"
       Me.Testo3.SetFocus
       Me.Testo3 = ""
       x = 1
     End If
    i = i + 1
End Sub
--------------------------------------------
Notte
Gaspare 


Ciao,
pardon...puoi ridurre le variabili a 2...il sonno si fà sentire :-)
Option Compare Database
Dim i, x As Integer
Private Sub cmdPass_Click()
     If x = 1 Then
       If Me.Testo3 = "entra" Then
          DoCmd.Close ' chiude la maschera di digitazione password
          DoCmd.OpenForm "mascCerca" 'apre una maschera del database
       Else
          MsgBox "chiudo il db"
        End If
      End If
   If i < 4 Then
         If Me.Testo3 = "entra" Then
          DoCmd.Close ' chiude la maschera di digitazione password
          DoCmd.OpenForm "mascCerca" 'apre una maschera del database
       Else
          MsgBox "La password non è esatta", vbCritical, "Attenzione"
          Me.Testo3.SetFocus
          Me.Testo3.Text = ""
        End If
    End If
     If i = 4 Then
       MsgBox "Ultimo tentativo il db verrà chiuso", vbCritical, 
"Attenzione"
       Me.Testo3.SetFocus
       Me.Testo3 = ""
       x = 1
     End If
    i = i + 1
End Sub
Private Sub Form_Load()
i = 1
x = 0
End Sub 

 ha scritto nel messaggio
news:MhY8e.796244$b5.35...@news3.tin.it...

Ma anche ad una.
Private intLogonAttempts As Integer 'questa la dichiari a livello di form
Private Sub cmdPass_Click()
intLogonAttempts = intLogonAttempts + 1
If intLogonAttempts > 2 Then
            MsgBox "Non hai l'autorizzazione per accedere a questo
programma.", vbCritical
            Application.Quit
    End If
    If Me.Testo3 = "entra" Then
        DoCmd.Close ' chiude la maschera di digitazione password
        DoCmd.OpenForm "mascCerca" 'apre una maschera del database
        Exit  sub
    Else
    MsgBox "La password non è esatta", vbCritical, "Attenzione"
    Me.Testo3.SetFocus
    Me.Testo3.Text = ""
   End If
SunRex

 Ciao Franco
Credo ci sia qualche errore anche di concetto:
 Private Sub cmdPass_Click()
  Static Ntentativi as integer 
  If Ntentativi>3 then
     MsgBox "Hai ultimato i tentativi"
     Docmd.Close
  Else
     If Me.Testo3 = "entra" Then
         Exit For
         DoCmd.Close ' chiude la maschera di digitazione password
         DoCmd.OpenForm "mascCerca" 'apre una maschera del database
         Ntentativi=0
     Else
        MsgBox "La password non è esatta" & vbCrLf & _
               "Tentativo n° " & Ntentativi+1, vbCritical, "Attenzione"
        Me.Testo3.SetFocus
        Me.Testo3.Text = ""
        Ntentativi=ntentativi+1
     End If
 Next i
End Sub
Penso sia la soluzione più semplice.
Ciao
@Alex
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Purtroppo aprendo oggi il NG non vedo le risposte che mi hanno dato
Gaspare , Sun rex e  Alessandro Baraldi, e che ho trovato cercando su
Google.
Ringrazio tutti per le soluzioni
 A quella di Alessandro ho tolto un  Exit for  e un Next i (forse rimasti
copiando il mio codice) e aggiunto un End if, e funziona . Funziona anche
quella di Gaspare. Quella di Sun Rex mi sembra non esca dal ciclo,
riproverņ.  Poi  vedrņ quale utilizzare.
Grazie di nuovo
Franco

 Franco
Perfetto erano rimasti per errore.
Saluti.


 Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG
Ciao,
ovviamente la "migliore" (dal punto di vista "sintattico") č quella di Alex 
:-) 

 ha scritto nel messaggio 
news:MeR9e.808620$b5.35...@news3.tin.it...

Ciao,


 :-)
E' solo più compatto, forse non mi conosci a sufficienza,
ma io meno scrivo e più sono soddisfatto del mio codice.
Alcune volte non è un bene, potrebbe diventare troppo criptico
e dare luogo a dubbi nei mesi a venire....!
Ciao


 ha scritto nel messaggio 
news:66ba89b806aac5221f...@mygate.mailgate.org...

Ciao Alex,
sei un "perfezionista" -> non è un male anzi...perchè sprecare righe di 
codice invano? Nei tempi passati si economicizzava e sulle variabili per via 
della memoria allocata e cmq nella fattispecie, a mio parere, hai ragione tu 
in quanto è anche un problema di concetto :-)
Ma quali dubbi? Commenti abbastanza il tuo codice e nei casi in cui non lo 
fai si commenta da sè ;-)
Buona serata
Gaspare 

 ha scritto nel messaggio 
news:ALS9e.1271577$35.46...@news4.tin.it...

E cmq non mi di "litigare" per queste cose... ;-)