RANDOMIZAR BASE DE DADOS
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
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
kra num intendi o q vc que faze?
explica ai
explica ai
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
è como se eu embaralhasse toda vez a base.
Att,
Kakinho
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.
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.
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
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
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
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
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
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
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
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...
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...
ok, muito obrigado, vou fazer o teste
att,
Kakinho
att,
Kakinho
Tópico encerrado , respostas não são mais permitidas