none
Como criar um botão que gere uma senha alfanumerica de 8 digitos?

    Question

  • Pessoal, tenho um botao que gera senhas de 8 digitos inteiros, faz a checagem no banco de dados (pra ver se o codigo ja existe) e da o display da mensagem.

     

    Preciso da mesma coisa, exatamente como no codigo abaixo porem em vez de 8 numeros preciso que o botao gere um codigo com numeros e letras.

     

    Qualquer ajuda é bem vinda.

     

    Segue o codigo:

     

     Private Sub ButtonGerarCodigoProfessor_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonGerarCodigoProfessor.Click
        Dim numCodigo As Double
        ' gera um aleatório para o número da matrícula
        numCodigo = Int((100000000 * Rnd()) + 1)
        ' atribui o aleatório a um label (para testar depois o valor)
        TextBoxCodigoProfessorCadastro.Text = numCodigo
        ' dá um refresh no método de randomizar
        Randomize()
        ' próximas linha usada só para os testes -> descartar do código
        'labelNumeroMatricula.Text = 11838102 -> matrícula existe (1ª mensagem)
        'labelNumeroMatricula.Text = 66666667 -> matrícula não existe (2ª mensagem)
    
        '******************************************
        Dim strConn As String = My.Settings.escola_dbConnectionString.ToString()
        Dim strSQL As String = "Select * from tblProfessor Where codigoProfessor = " & TextBoxCodigoProfessorCadastro.Text
        Dim dr As SqlDataReader
        Dim con As New SqlConnection(strConn)
        Dim cmd As New SqlCommand(strSQL, con)
        Try
          con.Open()
          dr = cmd.ExecuteReader
          If (dr.HasRows) Then
            dr.Read()
            ' aqui executa se a query retornar 1 linha
            If dr("codigoProfessor").ToString = CStr(TextBoxCodigoProfessorCadastro.Text) Then
              MsgBox("Codigo ja em uso!" & Chr(13) & Chr(13) & " Por favor, tente novamente", MsgBoxStyle.Exclamation, "Atenção!")
            End If
            ' else do PRIMEIRO If -> executa se a query não encontrar matrícula
            ' com o aleatório gerado, que é o mais provável  
          Else
            MsgBox("Codigo gerado com sucesso!", MsgBoxStyle.Information, "")
            ' muda de Tab
            'TabControlAlunos.SelectedTab = TabCadastrarAluno
            ' ESCREVE o aleatório gerado no campo do número da matrícula
            ' joga o foco para o controle onde vai o nome
            'TextBoxMatriculaAlunoCadastro.Text = TextBoxMatriculaAlunoCadastro.Text
          End If
          '******************************************
          'Catch ex As Exception
          'MsgBox("Erro ao obter dados dos clientes. Erro : " & ex.Message)
        Finally
          con.Close()
        End Try
      End Sub
    

    Thursday, September 23, 2010 9:58 AM

Answers

  • Mas ai ele diz que a variavel codigoProfessor não esta declarada

    Se voce declara como public no to do form acho que resolve o teu problema.

    Em relacao ao erro, isto porque voce estava a usar mais parametros do que deverias, apenas aceita 2 e nao 4 ou mias do que dois. E por isso que tinhas este erro.

    A melhor forma de programar seria usar um private sub e depois chamar dentro do click botao, como voce fez. Assim fucniona de uma outra forma vai dar erro.

     


    Just Be Humble Malange!
    Friday, September 24, 2010 7:42 PM

All replies

  • Thursday, September 23, 2010 11:07 AM
  • Desculpe mas embora eu entenda inglês, seu link não foi de muita ajuda.

     

    Consegui encontrar um algoritimo que gera os 8 digitos alfanumericos, porem o problema esta em fazer a verificação no VB.NET

    O VB.NET exibe o seguinte erro:

    Incorrect Syntax near 'F13P33I'

     

    Sendo que F13P33I é o codigo gerado pelo algoritimo.

    Então achei que deveria passar o SELECT usando @Parametro e não concatenando o TextBox.

    Substitui o Select com concatenação por:

    Dim strSQL As String = "Select * from tblProfessor Where codigoProfessor = @prmCodigoCheck"
    cmd.Parameters.AddWithValue("@prmCodigoCheck", codigoProfessor)
    
    

    Mas ai acontece que ele diz que a variavel codigoProfessor não foi declarada.

    Muito bem, tentei então colocar

    Dim codigoProfessor As String

    Porem ele da um erro dizendo que a variavel pode nunca estar sendo usada antes de ter um valor atribuida a ela e isso pode gerar um erro em runtime.

    Tentei então passar o paramentro dentro do Private Sub da seguinte forma:

    Private Sub ButtonGerarCodigoProfessor_Click(ByVal codigoProfessor As String, ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonGerarCodigoProfessor.Click
    

    Porem da o seguinte erro:

    Error	1	Method 'Private Sub ButtonGerarCodigoProfessor_Click(codigoProfessor As String, sender As Object, e As System.EventArgs)' cannot handle event 'Public Event Click(sender As Object, e As System.EventArgs)' because they do not have a compatible signature.

     

    Segue codigo com textbox concatenada no SELECT porem que esta gerando erro de syntaxe invalida:

     

    Private Sub ButtonGerarCodigoProfessor_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonGerarCodigoProfessor.Click
    
        Dim rand As New Random()
        Dim allowableChars() As Char = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".ToCharArray()
        Dim final As String = String.Empty
    
        For i As Integer = 0 To 8 - 1
          final += allowableChars(rand.Next(allowableChars.Length - 1))
    
        Next
    
        TextBoxCodigoProfessorCadastro.Text = final
    
    
    
    
    
    
        Dim strConn As String = My.Settings.escola_dbConnectionString.ToString()
        Dim strSQL As String = "Select * from tblProfessor Where codigoProfessor = " & TextBoxCodigoProfessorCadastro.Text
        Dim dr As SqlDataReader
        Dim con As New SqlConnection(strConn)
        Dim cmd As New SqlCommand(strSQL, con)
    
        Try
          con.Open()
          dr = cmd.ExecuteReader
          If (dr.HasRows) Then
            dr.Read()
    
            If dr("codigoProfessor").ToString = CStr(TextBoxCodigoProfessorCadastro.Text) Then
              MsgBox("Codigo ja em uso!" & Chr(13) & Chr(13) & " Por favor, tente novamente", MsgBoxStyle.Exclamation, "Atenção!")
            End If
    
          Else
            MsgBox("Codigo gerado com sucesso!", MsgBoxStyle.Information, "")
    
          End If
    
        Finally
          con.Close()
        End Try
      End Sub
    

    Qualquer ajuda é bem vinda.

     

    Att

     

    Rodrigo

    Thursday, September 23, 2010 11:23 AM
  • Acho que consegui contornar o problema, alguem pode me dizer se fiz certo?

    Fiz uma Private Sub, e chamei ela atravez de outra Private Sub do botão

     

    Segue codigo do botão

     

     Private Sub ButtonGerarCodigoProfessor_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonGerarCodigoProfessor.Click
    
    
    
        Call GeradorDeCodigos(TextBoxCodigoProfessorCadastro.Text)
    
    
      End Sub
    
      
    

     

    Agora o codigo da private sub que gera o codigo de 8 digitos e verifica no SQL

     

     Private Sub GeradorDeCodigos(ByVal codigoProfessor As String)
        Dim rand As New Random()
        Dim allowableChars() As Char = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".ToCharArray()
        Dim final As String = String.Empty
    
        For i As Integer = 0 To 8 - 1
          final += allowableChars(rand.Next(allowableChars.Length - 1))
    
        Next
    
        TextBoxCodigoProfessorCadastro.Text = final
    
    
    
    
    
    
        Dim strConn As String = My.Settings.escola_dbConnectionString.ToString()
        Dim strSQL As String = "Select * from tblProfessor Where codigoProfessor = @codigoProfessorCheck"
        Dim dr As SqlDataReader
        Dim con As New SqlConnection(strConn)
        Dim cmd As New SqlCommand(strSQL, con)
        cmd.Parameters.AddWithValue("@codigoProfessorCheck", TextBoxCodigoProfessorCadastro.Text)
    
        Try
          con.Open()
          dr = cmd.ExecuteReader
          If (dr.HasRows) Then
            dr.Read()
    
            If dr("codigoProfessor").ToString = CStr(TextBoxCodigoProfessorCadastro.Text) Then
              MsgBox("Codigo ja em uso!" & Chr(13) & Chr(13) & " Por favor, tente novamente", MsgBoxStyle.Exclamation, "Atenção!")
            End If
    
          Else
            MsgBox("Codigo gerado com sucesso!", MsgBoxStyle.Information, "")
    
          End If
    
        Finally
          con.Close()
        End Try
      End Sub
    

    Aparentemente esta tudo funcionando corretamente.

     

    Queria muito saber se esta correto pois nem sei como consegui.

     

    Att

     

    Rodrigo Morelli

    Thursday, September 23, 2010 12:22 PM
  • Nao vejo nada de errado.

     


    Just Be Humble Malange!
    Friday, September 24, 2010 12:33 PM
  • Sabe dizer porque não consegui implementar tudo num unico botão?

    Tive que criar uma private sub e chama-la pelo botão.

    Friday, September 24, 2010 2:20 PM
  • Sabe dizer porque não consegui implementar tudo num unico botão?

    Tive que criar uma private sub e chama-la pelo botão.

    O que voce fez, usar um private sub com o codigo, e a melhor forma de programar. Esta bem escrito o teu codigo neste Private sub. Eu pessoalmente usaria uma funcao. Esta funcao seria do tipo verdadeira ou false. 

    Isto e uma questao pessaol. Faz logica por que voce quer retornar true ou false. True se existe e false se nao existe a tal password gerada.

    A pesquiza esta a ser feita na base de dados. 

    Em relacao a tua pergunta, que tipo de erro era gerado?

     


    Just Be Humble Malange!
    Friday, September 24, 2010 2:54 PM
  • OS ERROS:

     

     

    Consegui encontrar um algoritimo que gera os 8 digitos alfanumericos, porem o problema esta em fazer a verificação no VB.NET

    O VB.NET exibe o seguinte erro:

    Incorrect Syntax near 'F13P33I'

     

    Sendo que F13P33I é o codigo gerado pelo algoritimo.

    Então achei que deveria passar o SELECT usando @Parametro e não concatenando o TextBox.

    Substitui o Select com concatenação por:

    Dim
     strSQL As
     String
     = "Select * from tblProfessor Where codigoProfessor = @prmCodigoCheck"
    
    cmd.Parameters.AddWithValue("@prmCodigoCheck"
    , codigoProfessor)
    
    

    Mas ai acontece que ele diz que a variavel codigoProfessor não foi declarada.

    Muito bem, tentei então colocar

    Dim codigoProfessor As String

    Porem ele da um erro dizendo que a variavel pode nunca estar sendo usada antes de ter um valor atribuida a ela e isso pode gerar um erro em runtime.

    Tentei então passar o paramentro dentro do Private Sub da seguinte forma:

    Private
     Sub
     ButtonGerarCodigoProfessor_Click(ByVal
     codigoProfessor As
     String
    , ByVal
     sender As
     System.Object, ByVal
     e As
     System.EventArgs) Handles
     ButtonGerarCodigoProfessor.Click
    

    Porem da o seguinte erro:

    Error	1	Method 'Private Sub ButtonGerarCodigoProfessor_Click(codigoProfessor As String, sender As Object, e As System.EventArgs)' cannot handle event 'Public Event Click(sender As Object, e As System.EventArgs)' because they do not have a compatible signature.

     

    Friday, September 24, 2010 4:33 PM
  • o click event apenas aceita dois parametros. e nao 4.

    o teu codigo teria de ficar assim:

     

    Private Sub ButtonGerarCodigoProfessor_Click(sender As  Object, e As  System.EventArgs) Handles ButtonGerarCodigoProfessor.Click


    Just Be Humble Malange!
    Friday, September 24, 2010 7:14 PM
  • Mas ai ele diz que a variavel codigoProfessor não esta declarada
    Friday, September 24, 2010 7:28 PM
  • Mas ai ele diz que a variavel codigoProfessor não esta declarada

    Se voce declara como public no to do form acho que resolve o teu problema.

    Em relacao ao erro, isto porque voce estava a usar mais parametros do que deverias, apenas aceita 2 e nao 4 ou mias do que dois. E por isso que tinhas este erro.

    A melhor forma de programar seria usar um private sub e depois chamar dentro do click botao, como voce fez. Assim fucniona de uma outra forma vai dar erro.

     


    Just Be Humble Malange!
    Friday, September 24, 2010 7:42 PM
  • Valeu malange! Bom saber que fiz certo!

    Você tem msn?

    se quiser, por favor me adicione rodrigopmorelli@gmail.com

     

    Obrigado pela força!

    Friday, September 24, 2010 9:07 PM