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
|
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
|
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!!!
|
|
|
|