SORTEANDO NUMEROS
Estou usando o Randonize para sortear 1000 números de 1 a 1000
Estes numeros estão em um banco de dados que contem 1000 nomes cadastrados cada vez que clico em sortear ele sorteia um número e pega o nome correspodente no banco de dados.
O problema é que para não repetir os números estou gravando temporariamente em outra parte do banco os números sorteados Ex Sorteados 01- 10 - 15 - 20
E quando faço um novo sorteio ex [Ô]16[Ô] ele verefica esse número se existe na tabela se não existir ele busca o nome correspodente no banco e se existir ele fará uma nova busca até achar um numero que não foi sorteado.
O problema é que quando a tabela de números sorteados está perto de 980 dados já sorteado ele demora quase um minuto para achar um número que não foi sorteado
Teria uma maneira mais facil fazer isso.
Estes numeros estão em um banco de dados que contem 1000 nomes cadastrados cada vez que clico em sortear ele sorteia um número e pega o nome correspodente no banco de dados.
O problema é que para não repetir os números estou gravando temporariamente em outra parte do banco os números sorteados Ex Sorteados 01- 10 - 15 - 20
E quando faço um novo sorteio ex [Ô]16[Ô] ele verefica esse número se existe na tabela se não existir ele busca o nome correspodente no banco e se existir ele fará uma nova busca até achar um numero que não foi sorteado.
O problema é que quando a tabela de números sorteados está perto de 980 dados já sorteado ele demora quase um minuto para achar um número que não foi sorteado
Teria uma maneira mais facil fazer isso.
qual a sintaxe sql utilizada?
experimenta sortear antes de chamar o bd
Dim lista As Variant
Dim possorteio(1000) As Integer
Private Sub Command1_Click()
ReDim lista(1000) As Integer
k = 999
For i = 1 To 1000
Randomize (k)
x = Int(Rnd * (k) + 1)
possorteio(i) = lista(x)
Label1.Caption = i
Label2.Caption = x
Select Case x
Case 1
For j = 1 To k
lista(j) = lista(j + 1)
Next j
Case k
Case Else
For j = x + 1 To k
lista(j - 1) = lista(j)
Next j
End Select
k = k - 1
Next i
End Sub
o array possorteio tem a sequencia sorteada ...
Dim lista As Variant
Dim possorteio(1000) As Integer
Private Sub Command1_Click()
ReDim lista(1000) As Integer
k = 999
For i = 1 To 1000
Randomize (k)
x = Int(Rnd * (k) + 1)
possorteio(i) = lista(x)
Label1.Caption = i
Label2.Caption = x
Select Case x
Case 1
For j = 1 To k
lista(j) = lista(j + 1)
Next j
Case k
Case Else
For j = x + 1 To k
lista(j - 1) = lista(j)
Next j
End Select
k = k - 1
Next i
End Sub
o array possorteio tem a sequencia sorteada ...
Eu estou tentando é fazer que o randonize fasse tipo assim:
Estou sorteando 10 números todos eles entre 1 a 10.
Os números 5 - 2 - 3 já foram sorteados
Eu gostaria que o randomize sorteasse apenas os numeros que faltarem sem precisar sortear o 5 e verificar se já foi sorteado
Se por exemplo - eu tenho 100.000 numeros e já foram sorteados 99.999 e falta apenas 1 se eu for sortear com o randomize e foi verificar se ele já foi sorteado até achar o numero que falta pode demorar muito tempo.
Mas irei tentar o código que o PH1959 disse pois é um pouco diferente que o meu.
Estou sorteando 10 números todos eles entre 1 a 10.
Os números 5 - 2 - 3 já foram sorteados
Eu gostaria que o randomize sorteasse apenas os numeros que faltarem sem precisar sortear o 5 e verificar se já foi sorteado
Se por exemplo - eu tenho 100.000 numeros e já foram sorteados 99.999 e falta apenas 1 se eu for sortear com o randomize e foi verificar se ele já foi sorteado até achar o numero que falta pode demorar muito tempo.
Mas irei tentar o código que o PH1959 disse pois é um pouco diferente que o meu.
é porisso q existe este código q postei....
a variavel K é a qtde de numeros q será sorteada -1....
para o exemplo o total de numeros a ser sorteado seria 1.000.
Com este código o sorteio é feito baseado na quantidade de numeros q NÃO foram sorteados...
a cada sorteio, o numero sorteado, é ELIMINADO da lista de numeros a sortear..
à medida que vai sorteando os numeros, o valor de k vai reduzindo .... ou seja, a velocidade do sorteio vai aumentando...SEM REPETIÇÕES, e SEM a necessidade de verificar se já foi sorteado
a variavel K é a qtde de numeros q será sorteada -1....
para o exemplo o total de numeros a ser sorteado seria 1.000.
Com este código o sorteio é feito baseado na quantidade de numeros q NÃO foram sorteados...
a cada sorteio, o numero sorteado, é ELIMINADO da lista de numeros a sortear..
à medida que vai sorteando os numeros, o valor de k vai reduzindo .... ou seja, a velocidade do sorteio vai aumentando...SEM REPETIÇÕES, e SEM a necessidade de verificar se já foi sorteado
Vc deverá fazer o sorteio via sql mesmo. Se vc já possui uma tabela com os números sorteados, vc passa como parâmetro na sql que não possua os registros com o id igual ao id da tabela temporária. Então, vc faz o sorteio via sql.
Do jeito que vc está fazendo, o banco chega a fazer até 900 e poucos sorteios pra descobrir um dos 980 que ainda não foi sorteado. O sistema fica fazendo sorteio e consultas ao banco sucessivos, por isso a demora.
Do jeito que vc está fazendo, o banco chega a fazer até 900 e poucos sorteios pra descobrir um dos 980 que ainda não foi sorteado. O sistema fica fazendo sorteio e consultas ao banco sucessivos, por isso a demora.
Tópico encerrado , respostas não são mais permitidas