SORTEANDO NUMEROS

RONIPASETTO 01/04/2010 15:01:04
#338375
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.
MKING 01/04/2010 15:21:04
#338376
qual a sintaxe sql utilizada?
PH1959 01/04/2010 17:34:31
#338386
Resposta escolhida
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 ...
RONIPASETTO 02/04/2010 08:53:33
#338418
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.

PH1959 02/04/2010 13:14:14
#338428
é 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
RICART 02/04/2010 16:21:48
#338434
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.
Tópico encerrado , respostas não são mais permitidas