USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  Problema com Rnd()
Ruivens
não registrado
ENUNCIADA !
Postada em 01/10/2008 01:38 hs   
Em uma certa parte do meu programa, eu tenho que pegar todos os registros de uma tabela, e de uma maneira randomica, incluí-los me uma outra tabela separando-os em grupos. O código está da seguinte forma:
 
vargrupo = 1
Do Until vargrupo = 17
    varcount = 1
    Do Until varcount = 5
        Set rscp = New ADODB.Recordset
        Set rsap = New ADODB.Recordset
        Set rsig = New ADODB.Recordset
        rscp.Open "SELECT id,nome FROM Participantes WHERE grupo = 'N'", conn, 3, 3
        Randomize
        varnum = Rnd() * rscp.RecordCount
        rscp.Move varnum
        varparticipante = rscp.Fields("id")
        Set rsig = conn.Execute("INSERT INTO Grupos (grupo,participante) VALUES (" & vargrupo & "," & varparticipante & ")")
        Set rsap = conn.Execute("UPDATE Participantes SET grupo = 'S' WHERE id = " & varparticipante)
        rscp.Close
        Set rscp = Nothing
        Set rsap = Nothing
        Set rsig = Nothing
        varcount = varcount + 1
    Loop
    vargrupo = vargrupo + 1
    DoEvents
Loop

Aparentemente está tudo bem, porém, ao executar o programa, essa parte do código funciona a princípio, inclui os registros na tabela nova, atualiza na tabela antiga, mas antes de chegar no fim dos registros, acontece o seguinte erro, normalmente bem perto do final:
 
Run-time error '3021':
 
Application-defined or object-defined error
 
Qualquer ajuda é bem vinda!!!!
   
Treze
Pontos: 2843 Pontos: 2843
SÃO VICENTE
SP - BRASIL
ENUNCIADA !
Postada em 01/10/2008 09:12 hs            
não tenho certeza mas será que não está havendo de o valor do RND estar se repetindo.
 
Pra Testar pode fazer o seguinte.
 
coloque depois de  varnum = Rnd() * rscp.RecordCount
 
msgbox varnum
 
assim você vai ver se não há repetição, o que talvez poderia causar este erro, caso seja isto poste e tentarei te ajudara nesta parte.
 
 
 
 
   
Donkey
Pontos: 2843 Pontos: 2843 Pontos: 2843 Pontos: 2843
PRESIDENTE PRUDENTE
SP - BRASIL
ENUNCIADA !
Postada em 01/10/2008 14:41 hs            
Recordcount não funciona muito bem com ADO, funcionava com DAO.

No lugar de recordcount use um select com a funcao count, assim vc tem a certeza de quantos itens tem.

Eu creio que seja isso. Para Não repetir coloque o RND no load do formulario, depois na função novamente, senão sempre que vc começar a rodar o programa ele ira sempre gerar os mesmos numeros (particularidade do rnd)
Colocando o rnd no load, vc garante que realmente nunca serão os mesmos numeros cada vez q iniciar o programa.

T+
   
Ruivens
TAGUATINGA
DF - BRASIL
ENUNCIADA !
Postada em 01/10/2008 17:30 hs            
Treze:
Não é esse o caso. Eu estou dentro de um loop, em que em cada volta eu faço a consulta ao bd, selecionando apenas os registros que tem o campo "grupo" marcado como "N". Então, com essa consulta, eu seleciono um registro randomicamente, movo o meu recordset até ele, salvo ele na nova tabela, e o atualizo na tabela antiga onde o campo "grupo" deixa de ser "N" e passa a ser "S". Quando eu executar a consulta novamente, ele não será selecionado, uma vez que eu busco somente os que tem "N" no campo "grupo".
Em outras palavras, mesmo que o Random me retorne o mesmo número, não tem problema, uma vez que em cada loop da minha estrutura de repetição, eu faço uma nova consulta, antes do Rnd.
 
Donkey:
O RecordCount tem funcionado corretamente até aki. Quando eu executo a depuração do erro, pra verificar em qual linha é o problema, é na linha varparticipante = rscp.Fields("id"). Caso seja realmente um problema do RecordCount, o que deve estar acontecendo é que ele está me fazendo chegar no EOF do RecordSet. Eu vou verficiar se é esse o caso, e testar a sua dica. Um detalhe interessante que pode ser alguma evidência disso é que normalmente o erro acontece no final. Eu tenho 64 registros, e normalmente, o erro ocorre depois do 60.
 
Obrigado Treze e Donkey. Eu vou fazer esse teste e posto aki o resultado  ^^
 
Beijo procês!!!
   
Página(s): 1/1    


Seu Nome:

Seu eMail:

ALTERAR PARA MODO HTML
Mensagem:

[:)] = 
[:P] = 
[:(] = 
[;)] = 

HTML DESLIGADO

     
 VOLTAR

  



CyberWEB Network Ltda.    © Copyright 2000-2025   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página