RANDOMIZAR BASE DE DADOS

KAKINHO 20/04/2007 16:32:37
#213079
Olá, boa tarde, gostaria da ajuda de vocês, como faço pra randomizar uma base de dados, tem que ler e gravar outra, ou da pra ranomizar a existente ?
Preciso muito de uma rotina que faça isso, ou que alguém me ajude a fazer, sou novo de VB e não tenho a mininma idéia de como se faz isso.

Desde já agradeço
Kakinho
USUARIO.EXCLUIDOS 20/04/2007 20:52:27
#213095
kra num intendi o q vc que faze?

explica ai
KAKINHO 23/04/2007 09:53:28
#213293
Milton, obrigado pela ajuda, é assim, tenho uma cadastro de clientes certo, dai eu quero gerar um outra base em tempo de execução até ai td bem, consegui fazer, só que quero que os dados dessa base que antes era classificado pelo código e nome, seja agora classificada randomicamente, que fique embaralhada, toda vez que eu gerar essa base em tempo de execução, ele nunca fique na mesma ordem gerada anteriormente.
è como se eu embaralhasse toda vez a base.

Att,
Kakinho
USUARIO.EXCLUIDOS 23/04/2007 11:26:17
#213323
Resposta escolhida
Segue a rotina:

dim sSql as string
dim lSorteado as long
dim lTotalClientes as long

sSql = "SELECT * FROM CLIENTE ORDER BY CDIGOCLIENTE,NOMECLIENTE": lSorteado = 0

Set tbl = Banco.OpenResultset(sSql, rdOpenStatic)

If Not tbl.EOF Then lTotalClientes = tbl.RowCount

Randomize

lSorteado = Int((lTotalClientes * Rnd) + 1)

Do While Not tbl.EOF
If tbl!CodigoCliente = lSorteado Then
'Coloque seu codigo que gera a outra base
Exit Do
End If
tbl.MoveNext
Loop

tbl.Close

OBS.: Para incluir todos os registros dos clientes na nova tabela vc deve criar um outro laço(loop)
externo...Agora é com vc....Espero ter ajudado.
KAKINHO 23/04/2007 12:49:25
#213340
Ok Frau muito obrigado, vou fazer o teste depois te envio a resposta ok, só mais uma dúvida, esse código ele vai gerar para todos os clientes da base ou só para um que foi sorteado?
por que me paresce que ele está sorteado um unico cliente da base é isso?, se for, o que eu preciso na realidade é que o arquivo novo de saida fique embaralhado, ex:

arquivo original

a
b
c
d
e
f
g
h

arquivo novo

d
b
e
h
a
g
f
c

Att,

Kakinho
USUARIO.EXCLUIDOS 23/04/2007 15:15:17
#213391
Para todos clientes da base modifique:

rem lSorteado = Int((lTotalClientes * Rnd) + 1)

Do While Not tbl.EOF
If tbl!CodigoCliente = lSorteado Then
'Coloque seu codigo que gera a outra base
End If
tbl.MoveNext
lSorteado = Int((lTotalClientes * Rnd) + 1)
Loop

KAKINHO 23/04/2007 15:50:41
#213398
ah, agora entendi, antes a linha de comando " lSorteado = Int((lTotalClientes * Rnd) + 1)" ficava dentro do if, agora ela saiu para ficar guardando o registro.

Assim, não corre o risco de entrar el loop, imagine assim, uma base com 1000 registros, ele ler o registro 100, e depois de leitura 500 ele ler novamente o registro 100, ou ainda ler o ultimo registro e achar que é final de arquivo?
O comando que vc colocou randomize ele controla isso ?

Att,
Kakinho
USUARIO.EXCLUIDOS 23/04/2007 18:36:52
#213440
O comando randomize garante que nunca se repetirá o inicio
do sorteio...O comando (RND) é quem faz o sorteio e o randozime
garante que o RND nunca inicie no mesmo número.

MAS ATENÇÃO...Vc corre o risco sim no exemplo que vc citou
Citação:

uma base com 1000 registros, ele ler o registro 100, e depois de leitura 500 ele ler novamente o registro 100, ou ainda ler o ultimo registro e achar que é final de arquivo?



Apenas demonstrei a randomização.

VC precisa criar a seguinte lógica:

Verificar quando inclui na base nova se já existe o cliente se existir vc ignora (ou seja, não inclui) e depois também que se certificar se não faltou (não foi sorteado) nenhum cliente(registro) na nova base...

é meio complicado...mas não dificil, tente criar a lógica, qualquer dúvida post...
KAKINHO 23/04/2007 18:42:17
#213441
ok, muito obrigado, vou fazer o teste

att,
Kakinho
Tópico encerrado , respostas não são mais permitidas