Olá,
Estou tentando criar uma combinação de letras e números, aleatoriamente, e encontrei um código que até faz isso, mas ele gera todas as possibilidades, enquanto eu gostaria que ele gerasse até encontrar um código novo, e parasse ali.
A usabilidade será gerar um código aleatório para um produto.
Não quero um número sequencial, quero algo de fato aleatório, com um comprimento fixo de caracteres.
Assim, por exemplo, podemos ter:
P00AAA
Onde a letra P seria de produto
00 uma combinação de 2 números (de 0 a 9)
AAA uma combinação de 3 letras (de A a Z)
Assim terei em um campo curto (6 dígitos) uma quantidade razoável de possibilidades
Encontrei o seguinte código, e venho testando em uma tabela para inserir os resultados.
No entanto, a fórmula executa TODAS as possibilidades, enquanto eu quero que ela PARE de executar assim que encontrar um valor novo.
Por exemplo, se na tabela produtos já existir o produto P00AAA, ele continua gerando, e vai para o P00AAB por exemplo.
Aí ele vê que o P00AAB não existe na tabela produto, retorna essa string para eu usar, e sai da função.
Estou tentando criar uma combinação de letras e números, aleatoriamente, e encontrei um código que até faz isso, mas ele gera todas as possibilidades, enquanto eu gostaria que ele gerasse até encontrar um código novo, e parasse ali.
A usabilidade será gerar um código aleatório para um produto.
Não quero um número sequencial, quero algo de fato aleatório, com um comprimento fixo de caracteres.
Assim, por exemplo, podemos ter:
P00AAA
Onde a letra P seria de produto
00 uma combinação de 2 números (de 0 a 9)
AAA uma combinação de 3 letras (de A a Z)
Assim terei em um campo curto (6 dígitos) uma quantidade razoável de possibilidades
Encontrei o seguinte código, e venho testando em uma tabela para inserir os resultados.
No entanto, a fórmula executa TODAS as possibilidades, enquanto eu quero que ela PARE de executar assim que encontrar um valor novo.
Por exemplo, se na tabela produtos já existir o produto P00AAA, ele continua gerando, e vai para o P00AAB por exemplo.
Aí ele vê que o P00AAB não existe na tabela produto, retorna essa string para eu usar, e sai da função.
- Código:
Option Compare Database
Option Explicit
'C(n, p) = n! / ((n-p)! * p!)
'nPermutações a ser definido, seria o 'p' da fórmula acima
Dim h(1 To 10)
Public Function PopularArranjo(nElementos As Long, nPermutações As Long)
' Dim lElementos As Long
'Popula vetor de elementos
h(1) = "A"
h(2) = "B"
h(3) = "C"
h(4) = "D"
h(5) = "E"
h(6) = "F"
h(7) = "G"
h(8) = "H"
h(9) = "I"
h(10) = "J"
'C(n, p) = n! / ((n-p)! * p!)
'lElementos seria o 'n' da fórmula acima
nElementos = UBound(h) - LBound(h) + 1
'Inicia recursão:
Combinação nElementos, nPermutações, 1
End Function
Public Function Combinação(n As Long, p As Long, k As Long, Optional s As String)
Dim checkStr As String
If p > n - k + 1 Then Exit Function
If p = 0 Then
If IsNull(DLookup("[arranjo]", "[tblArranjosss]", "[arranjo] = '" & s & "'")) Then
DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO tblArranjosss (arranjo) values ('" & s & "')"
DoCmd.SetWarnings True
End If
Exit Function
End If
'Recorre novamente:
Combinação n, p - 1, k + 1, s & v(k)
'Recorre novamente a partir do elemento anterior:
Combinação n, p, k + 1, s
End Function