MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    [Resolvido]Sistema Travando - Senha Aleatoria (MS Access)

    Compartilhe

    DiogenesSousa
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 16
    Registrado : 29/01/2018

    [Resolvido]Sistema Travando - Senha Aleatoria (MS Access)

    Mensagem  DiogenesSousa em 9/2/2018, 01:44

    Pessoal estou com um problema, esse código abaixo é para gerar senhas aleatórias. Porém quando chega a 117 registro o sistema trava.

    Option Compare Database

    Sub geraSenha()
       Dim tamanhoSenha As Integer
       Dim codigo As Integer
       Dim soma As Integer
       Dim senha As String
       Dim booOk As Boolean
       Dim rs As Recordset
       
       tamanhoSenha = txtTamanhoSenha
       booOk = False
       senha = ""
       codigo = 0
       soma = 0
       
       Dim Letra(22)
       Letra(0) = "A"
       Letra(1) = "B"
       Letra(2) = "C"
       Letra(3) = "D"
       Letra(4) = "E"
       Letra(5) = "F"
       Letra(6) = "G"
       Letra(7) = "H"
       Letra(Cool = "I"
       Letra(9) = "J"
       Letra(10) = "K"
       Letra(11) = "M"
       Letra(12) = "N"
       Letra(13) = "O"
       Letra(14) = "P"
       Letra(15) = "Q"
       Letra(16) = "R"
       Letra(17) = "S"
       Letra(18) = "T"
       Letra(19) = "U"
       Letra(20) = "V"
       Letra(21) = "X"
       Letra(22) = "Z"
       
       Do While booOk = False
           Do While Len(senha) < tamanhoSenha
               codigo = Int(Rnd * 22) + 1
               
               If InStr(1, senha, Letra(codigo)) = 0 Then
                   soma = soma + codigo
                   senha = senha & Letra(codigo)
               End If
           Loop
           
           Set rs = CurrentDb.OpenRecordset("SELECT COUNT(codigo) AS c FROM tblSenhas WHERE soma = " & soma & "")
           
           If rs!c = 0 Then
               booOk = True
               
               Dim rs1 As Recordset
               Set rs1 = CurrentDb.OpenRecordset("tblSenhas")
               rs1.AddNew
                   rs1("senha") = senha
                   rs1("soma") = soma
               rs1.Update
               rs1.Close
               
               txtSenhaGerada = senha
               
       
           End If
           
           codigo = 0
           soma = 0
           senha = ""
       Loop
    End Sub


    Private Sub btnGerar_Click()
       Call geraSenha
       Me.contador = DCount("senha", "tblSenhas")
    End Sub


    Desda já agradeço!
    avatar
    CassioFabre
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 728
    Registrado : 18/01/2013

    Re: [Resolvido]Sistema Travando - Senha Aleatoria (MS Access)

    Mensagem  CassioFabre em 9/2/2018, 09:36

    Bom dia,

    A função rnd() não se lembra quais combinações ela fez anteriormente. Ela vai ficar randomizando até encontrar uma combinação que satisfaça o critério da soma. Então, claro, à medida que vai se gerando senhas, a quantidade de combinações disponíveis diminui. O rnd() vai gerar uma senha com a quantidade de caracteres que voce determinou, e se esses caracteres já estiverem na tabela, ele vai gerar aleatoriamente outra combinação e se acontecer a mesma coisa, ele vai gerar outra combinação... sucessivamente até achar uma que atenda. O problema é que ele nao sabe quais senhas já gerou, então ele pode fazer uma combinação AB e nao estar disponível, na segunda tentativa fazer BC e não estar disponível, na terceira fazer BA e também não vai estar, e assim sucessivamente até encontrar uma combinação. É claro ver que quando se tem poucas combinações disponíveis, esse processo pode demorar demais pra ser feito. O correto seria deixar o programa rodar até que encontre a combinação, e isso pode demorar bastante. Como alternativa, voce pode alterar a quantidade de caracteres da senha.

    Abraço.


    .................................................................................
    Só não tem código pra morte!

    DiogenesSousa
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 16
    Registrado : 29/01/2018

    Re: [Resolvido]Sistema Travando - Senha Aleatoria (MS Access)

    Mensagem  DiogenesSousa em 9/2/2018, 15:53

    Valeu CassioFabre, obrigado pela explicação!

      Data/hora atual: 19/12/2018, 16:18