Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1

    [VB6]username e password

    Salve a tutti

    su un database sql server ho la tabella utenti .

    In questa tabella ci sono 2 campi : "Username" e "Password"

    Vorrei fare in modo tale che all'apertura del mio programma, esca una form di richiesta di nome utente e password.

    Ovviamente devono coincidere con quelle che ho memorizzato nel database.

    Gentilmente, mi date qualche dritta su come scrivere il codice ?

    Grazie mille in anticipo

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Beh ... se chiedi una dritta per questo tipo di attivita' vuol dire che non hai molta (o quasi nessuna) esperienza con VB6 e database ...
    Per questo motivo, potresti avere dubbi su quello che ti scrivo, ma ci tento ...

    Prima di tutto devi referenziare una libreria per accedere al database. Ti consiglio ADO (ultima versione).

    Predisponi un form con due textbox per inserire le informazioni (user/password), scrivi del codice per controllare che vengano effettivamente inseriti, predisponi un pulsante di login.

    Nel codice del pulsante, ti connetti al db con un oggetto Connection, esegui la query con un Recordset (una SELECT dalla tabella Utenti e una WHERE per utente e password) e controlli i dati letti nel recordset.

    Esiste pero' il problema di utilizzare un utente e una password per la connessione al database. O usi una utenza/password conosciuta o una connessione trusted in caso di presenza di un dominio.

    In realta', una volta effettuata questo tipo di autenticazione, la gestione della tabella utenza/password sarebbe superflua ...

  3. #3
    intanto ti ringrazio per la risposta.

    E' vero, non ho molta dimistichezza con VB6 (ho iniziato da poco), ma dubbi su quello che scrivi non ne ho

    Uso ADO per la connessione al db (messo in un dominio).

    E' vero che è superfluo usare la tabella utenza/password visto che l'autenticazione la faccio prima, ma a me serve proprio questo tipo di discorso.

    Lancio il programma ;

    Richiesta utente e password *per accedere al programma* ;

    Ovviamente se l'utente e la password associata non coincidono in quelle che ho memorizzato nel db, l'utente non può usare il programma ;

    Mi aiuti ?


  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ti aiuto? Certo ... mi pare di averlo fatto ...

  5. #5
    grazie, ma :

    siccome sono un pivello richiedevo un genere di aiuto un attimino più completo di quello che mi hai dato tu ( e per questo comunque ti ringrazio).

    Volevo un esempio di codice scritto, se possibile

  6. #6
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Ciao redbluewolves,
    la routine che chiedi è un po’ lunghetta; comunque dato che ho un po’ di tempo disponibile l’ho scritta.
    In una Frm chiamata frmLogin inserisci due Txt dal Nome: TxtApriUN e TxtApriPW e due CmdButton dal Nome: cmdOK e cmdCancel. Nel progetto di prova inserisci anche una Form dal Nome FrmProva, che ti servirà per provare l’apertura del programma.
    Nel modulo della frmLogin inserisci:
    codice:
    Option Explicit
    ' Annulla Esce dall'applicazione:
    Public OK As Boolean
    Private Sub Form_Load()
        With frmLogin
            .WindowState = vbNormal
            .Top = 3045
            .Height = 2475
            .Width = 4920
        End With
    End Sub
    ' E' stato premuto Annulla:
    Private Sub cmdCancel_Click()
        OK = False
        Me.Hide
    End Sub
    'Verifica la validità della password e dell'UserName:
    Private Sub cmdOK_Click()
        
    On Error GoTo ErrHandler
        
        Dim ConSR As New ADODB.Connection
        Dim RSTctr As New ADODB.Recordset
        
        Dim sPassWord As String
        
        Dim sVpassW As String
        Dim sVUName As String
        Dim vRegNomeComp As Variant
        Dim vRegNomeUser As Variant
        Dim user As Boolean
        
        user = False
          
    'Acquisisce il Nome dell'Utente-Funzione nel Modulo:
        Dim sBuffer As String
        Dim lSize As Long
    
        sBuffer = Space$(255)
        lSize = Len(sBuffer)
        Call GetUserName(sBuffer, lSize)
        
        If lSize > 0 And Len(TxtApriUN.Text) = 0 Then
            TxtApriUN.Text = Left$(sBuffer, lSize)
        ElseIf lSize = 0 And Len(TxtApriUN.Text) = 0 Then
            TxtApriUN.Text = "admin"
        End If
          
    ' Acquisisce la pw e username digitati:
        sPassWord = TxtApriPW.Text
        sUName = TxtApriUN.Text
         
        'Esegue la connessione con il DataBase:
            With ConSR
                .ConnectionString = DataConnessione
                .CursorLocation = adUseClient   'tipo di cursore
                .Mode = adModeShareDenyNone     'nessuna limitazione
                .CommandTimeout = 15
                .Open
           End With
           
      ' Controlla se la PassWord è presente nel DB:
            RSTctr.Source = "SELECT UsernameX, PasswordX FROM TblPW WHERE UsernameX ='" & sUName & "' And PasswordX='" & sPassWord & "'"
            RSTctr.Open , ConSR
    
        Do Until (RSTctr.EOF)
            If sUName = RSTctr("UsernameX") And sPassWord = RSTctr("PasswordX") Then
                vRegNomeComp = StrComp(RSTctr("PasswordX"), sPassWord, vbTextCompare)
                vRegNomeUser = StrComp(RSTctr("UsernameX"), sUName, vbTextCompare)
                ' La PW è uguale Apre il file:
                If vRegNomeComp = 0 And vRegNomeUser = 0 Then
                    sngNuV = 0
                    Me.Hide
                    OK = True
                    user = True
                End If
                Exit Do
                Else
                user = False
            End If
            RSTctr.MoveNext
        Loop
            
        'La password o il nome utente sono errati:
        If user = False Then
            sngNuV = 1 + sngNuV
            MsgBox "La PassWord o il Nome utente non è corretto! Riprovare." & Chr(13) _
            & "Prove effettuate  " & sngNuV & "  di  4." & Chr(13) _
            & "Attenzione, alla 4^  prova il programma verrà chiuso!", vbCritical, "Prova PW"
                    TxtApriPW.SetFocus
                    TxtApriPW.SelStart = 0
                    TxtApriPW.SelLength = Len(TxtApriPW.Text)
                    If sngNuV > 3 Then
                        MsgBox "E' stata introdotta per quattro volte una PassWord non è corretta !" & Chr(13) _
                        & "Il programma verrà chiuso.", vbCritical, "Prova PW"
                        Unload frmLogin
                        Set frmLogin = Nothing
                        End
                    End If
                End If
        
            
        'Chiude e cancella il recordSet:
            If GetState(RSTctr.State) = "adStateOpen" Then
                RSTctr.Close
                Set RSTctr = Nothing
            End If
        'Chiude la connessione - TblPW:
            If GetState(ConSR.State) = "adStateOpen" Then
                ConSR.Close
                Set ConSR = Nothing
            End If
    
    ErrHandler:
        If Err.Number <> 0 Then
            MsgBox "Errore: " & Err.Number & " " & Err.Description & Chr(13) _
            & "Errore nella ricerca della password o del Nome utente." & Chr(13) _
            & "Inserire una Password/Nome utente corretti.", vbCritical, "Prova PW"
            Err.Clear
            'Chiude e cancella il recordSet:
            If GetState(RSTctr.State) = "adStateOpen" Then
                RSTctr.Close
                Set RSTctr = Nothing
            End If
            'Verifica e Chiude la connessione - TblPW:
            If GetState(ConSR.State) = "adStateOpen" Then
                ConSR.Close
                Set ConSR = Nothing
            End If
            Exit Sub
        End If
    End Sub
    'Verifica lo stato della connessione:
    Public Function GetState(intState As Integer) As String
        Select Case intState
            Case adStateClosed
                GetState = "adStateClosed"
            Case adStateOpen
                GetState = "adStateOpen"
        End Select
    End Function
    In un modulo .bas inserisci:
    codice:
    Public DataConnessione As String
    ' Acquisisce il Nome dell'Utente:
    Public Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpbuffer As String, nSize As Long) As Long
    ' Acquisisce l'UserName all'apertura del file:
    Public sUName As String
    ' Conta quante volte la pw è errata:
    Public sngNuV As Single
    ' Sub d'avvio del programma:
    Sub Main()
        
        Call DataConnessione2
    
        frmLogin.Show vbModal
        If Not frmLogin.OK Then
            'L'accesso non è riuscito, esce dall'applicazione:
            End
        End If
        ' Chiude la frmLogin:
        Unload frmLogin
        Set frmLogin = Nothing
    
        ' Apre la 1^ Frm del programma:
        FrmProva.Show
    
    End Sub
    ' Connessione con il DB:
    Public Sub DataConnessione2()
        On Error GoTo ErrHandler
    
    ' Stringa di connessione Con password:
        DataConnessione = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\ProvaPW.mdb;Persist Security Info=False;Jet OLEDB:Database Password=LMONDI;"
    
    ErrHandler:
    If Err.Number <> 0 Then
        MsgBox "Errore: " & Err.Number & " " & Err.Description & Chr(13) _
        & "Errore  nella connessione al Data Base." & Chr(13) _
        & "Riavviare il programma.", vbCritical, "Prova PW"
        Err.Clear
        Exit Sub
    End If
    
    End Sub
    La routine è funzionante, dato che l'ho provata e certamente può essere migliorata.
    PS. il DataBase utilizzato nell'esempio è ACCESS.
    LM

  7. #7
    Originariamente inviato da LMondi
    Ciao redbluewolves,
    la routine che chiedi è un po’ lunghetta; comunque dato che ho un po’ di tempo disponibile l’ho scritta... cut
    Grazie mille LMondi .

    Sei stato gentilissimo

    Appena torno a casa, la provo e ti faccio sapere.

    P.S. : per connettermi al mio sql server basta cambiare solo i parametri di connessione nel modulo .bas e cambiare il nome della tabella, vero ?

    Acora grazie mille.

    Ciao

  8. #8
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Sì, c'è da cambiare la stringa di connessione, mantenendo la possibilità di password, il nome del DB ed il nome della Tbl.
    LM

  9. #9
    Funziona!!

    Alla fine,però, ho preso spunto dal tuo codice e l'ho riscritto adattandolo alle mie esigenze (per esempio, il conteggio dei tentativi non mi serviva)

    L'ho riscritto così (se hai qualche consiglio per migliorarlo fai pure):

    codice:
    Private Sub Form_Load()
    Set conn = New ADODB.Connection
    conn.ConnectionString = "DSN=Local;"
    conn.Open
    End Sub
    
    Private Sub cmdOk_Click()
    Dim rs As ADODB.Recordset
    Dim entra As Boolean
    entra = False
    Set rs = New ADODB.Recordset
    Set rs.ActiveConnection = conn
    user = txtUser.Text
    pass = txtPass.Text
    rs.Source = "SELECT username, password FROM utenti WHERE username = '" & user & "' and password = '" & pass & "'"
    rs.Open
    If Len(Trim(txtUser.Text)) = 0 Then
       MsgBox "Inserire il nome utente!", vbCritical, "ERRORE"
       txtUser.SetFocus
    End If
    If Len(Trim(txtPass.Text)) = 0 Then
       MsgBox "Inserire la password!", vbCritical, "ERRORE"
       txtPass.SetFocus
    End If
    Do Until (rs.EOF)
           If user = rs("username") And pass = rs("password") Then
                 Me.Hide
                 start.Show
                 entra = True
                 rs.Close
                 Set rs = Nothing
                 conn.Close
                 Set conn = Nothing
                 Exit Do
                 Else
                 entra = False
           End If
    rs.MoveNext
    Loop
    If entra = False Then
    MsgBox "Nome utente e password errati!", vbCritical, "Accesso negato"
    txtUser.SetFocus
    txtUser.Text = ""
    txtPass.Text = ""
    
    End If
    End Sub
    In un modulo bas ho messo delle variabili globali che mi servono anche nel form principale del programma.

    Ancora grazie mille LMondi, sei stato gentilissimo e di grande aiuto


  10. #10
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    L'importante è che il codice d'esempio sia servito come base per soddisfare le tue esigenze.
    Ti segnalo che, di norma, accanto alla routine per accedere al prog. con PW si implementa anche quella relativa alla modifica della PW. Ora i punti di riferimento li conosci, quindi buon lavoro !
    LM

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.