Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

mr_ph

Problema do movenext

Recommended Posts

Estou com um problema quando uso o movenext, ele move para o proximo registro, mas só faz isso uma fez, se quero avançar mais que 1 registro, não consgo e tbm não da nenhum erro, simplesmente não faz nada. meu recordse está assim.

 

Em um modulo declare:

Public db As New ADODB.ConnectionPublic rs As New ADODB.RecordsetNo form load:db.Provider = "microsoft.jet.oledb.4.0."db.ConnectionString = "data source = ..."db.OpenSet rs.ActiveConnection = db

para buscar os registros

tabela.Open cmdsqlonde cmdsql = "select * from tabgraf where fldjn2 = " & txtjn2

E quando usou o moveprevious da o seguinte erro:

Run time error '3021'

Either BOF or EOF is true, or the current record has been deleted. Requested operation requires a current record.

 

Será que alguem saberia come me ajudar???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou com um problema quando uso o movenext, ele move para o proximo registro, mas só faz isso uma fez, se quero avançar mais que 1 registro, não consgo e tbm não da nenhum erro, simplesmente não faz nada. meu recordse está assim.

Verifica qts dados seu RecordSet está retornando. Devido a definição do WHERE no seu SELECT, pode haver apenas um registro.

E quando usou o moveprevious da o seguinte erro:Run time error '3021'Either BOF or EOF is true, or the current record has been deleted. Requested operation requires a current record.

Esse erro provavelmente ocorre pq você está no primeiro registro e força um comando para voltar. Como ele não encontra nenhum registro antes do primeiro gera a exceção.OK..!!?? T+...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ainda não consigui resolver, tem mais de 100 registros, tanto que o movenext até funciona, mas passa só um registro, se quero avançar mais um não consigo...E em relaçào ao moveprevious da o erro em qualquer registro, posso estar no segundo ou no ultimo que ela da o mesmo erro, mesmo tendo registro anteriores.... Obrigado pela ajuda, mas ainda continuo com o problemaGrato

Compartilhar este post


Link para o post
Compartilhar em outros sites

O codigo para buscar de registro:

Dim cmdsql As Stringcmdsql = "select * from tabgraf where fldjn2 = " & txtjn2.rsOpen cmdsql, conexao, adOpenKeysetIf rs.EOF = True ThenMsgBox "Folder doesn't exist", vbCritical, "Erro"rs.CloselimparExit SubEnd Ifligacaors.Close

O codigo do botão está

rs.openif rs.eof = true thenrs.movefirstloadrec 'function para carregar os registros nas textelsers.movenextloadrecend ifrs.close
Grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que percebi agora que é muito estranho, e que qnd estou no registro 1, e uso o move next ele vai para o registro 2 e qnd estou no registro 99, que seria o ultimo ele volta para o registro 2. Não sei se isso ajuda em alguma coisa, mas não custa nada postar

Compartilhar este post


Link para o post
Compartilhar em outros sites

[...]

[...]rsOpen cmdsql, conexao, adOpenKeyset[...]
[...]
Tenta utilizar os parametros dos cursores como 3 e 3:

 

rsOpen cmdsql, conexao, 3, 3
OK..!!?? T+...

 

PS: Sempre utilize a TAG

 na postagem de códigos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

acredito que o motivo de sempre voltr para o regirtro 2 é por você estar sempre abrindo o recordset antes de fazer esta operação, e fechando-o em seguida, com isso acredito que ele esta sempre voltando para o primeiro registro, dai você move para o proximo, o segundo....tenta retirar os rs.open e rs.close, e deixe para fazer isso somente quando for sair do progama, isso irá alocar um pouco mais de memoria, mas acredito que resolverá.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O codigo do botão está

rs.openif rs.eof = true thenrs.movefirstloadrec 'function para carregar os registros nas textelsers.movenextloadrecend ifrs.close
O Fernando tem razão. Se você abrir e fechar o RecordSet dentro do evento do botão, sempre vai acessar o mesmo registro.Pois o seu RecordSet, vai inicializar no mesmo ponto toda vez que você acionar o evento do botão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se eu retirar o rs.open e o rs.close, funciona perfeitamente, mas ai e crio outro problema, pq np codigo em que faço a busca dos registro e retiro o rs.close tbm, mas quando vou fazer uma outra busca sem fechar o rs, aparece o seguinte erro:Run time error '3705'Operation is not allowed when the object is openOu seja, teria que fechar o rs para poder realizar uma nova consulta... o problema agora é como fechar o rs sem afetar os botões de navegação.obrigado pela ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas como utilizarei do recordset, um para navegação e ou para pesquisa, se tenho que dar as instruções de navegação do redordset em que foi feito a pesquisa ????Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você tem duas pesquisas simultâneas tem que utilizar dois RecordSet's.Se vai utilizar os dados recuperados na navegação não precisa abrir e fechar novamente o RecordSet.E se precisar realizar algumas pesquisa baseada em um dado da navegação é só passar o valor atual da navegação como parâmetro para aconsulta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas se eu fizer sso, vo cair no mesmo erro anterior, pos terei q deixar um recordset aberto, e quando irei fazer uma nova pesquisa vai cair do mesmo erro. Run time error '3705'Operation is not allowed when the object is open. A não ser que eu entendi errado o q você quis explicar vagner, se entendi errado peço desculpas.obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

vamos ver se eu entendi corretamente o que você quer fazer.você fez uma pesquisa e usou uma forma para navegar dentro dos resultados, e agora você quer fazer uma outra pesquisa que será mostrada na mesma tela. ou seja irá refazer a pesquisa?bom se for isso acredito que você pode fazer algo como abrir um recordset com os dados (rs.open etc..) dai faça um set rs_navegar = rscom isso você tem um recodset identico ao outro e não precisa fechar para refaze-lo, e você pode fechar tranquilamente o rs (original) para quando for fazer uma nova pesquisa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não precisa se desculpar... mas o esquema é o seguinte:Ele da erro pq você tenta abrir um RecordSet, que ja está aberto. Se você utilizar dois RecordSet, não vai gerar erro!O fato de manter um deles abertos para puxar um parâmetro como refrência não causa uma exceção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ao invés de utilizar dois recordsets, somente abra-o no form load do programa. O que acontece é que você está tentando abrir um recordset que já está aberto. Se colocá-lo no form_load, isso não acontecerá, tanto quando você usar o evento da busca, ou da navbegação, usará o mesmo recordset aberto.Ai é só tirar todos os outros .close e .open.Tenta fazer isso.Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ainda estou com o problema.......... pois se usou 2 recordset e coloco:set rs2 = rs1ate ai nenhum problema, mas quando eu feco o rs1 que uso para a pesquisa ele tbm facha o rs2.A susgetão do Claudio eu já tinha tentado antes, da o seguinte erro: Run-time error -2147217908Command text was not set for the command object.Mas vlw ai pessoal pela ajuda, mas to quase, mudando o esquemo do projeto para usar o objeto ADO....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ainda estou com o problema.......... pois se usou 2 recordset e coloco:set rs2 = rs1ate ai nenhum problema, mas quando eu feco o rs1 que uso para a pesquisa ele tbm facha o rs2.A susgetão do Claudio eu já tinha tentado antes, da o seguinte erro: Run-time error -2147217908Command text was not set for the command object.Mas vlw ai pessoal pela ajuda, mas to quase, mudando o esquemo do projeto para usar o objeto ADO....

Se está dando esse erro, o problema está em outro lugar, pois deveria funcionar, é o que sempre faço.Já que estão fechando os dois juntos fazendo rs2 = rs1, faça diferente, faça:rs2 = "select * from modelo"rs1 = "select * from modelo"Vai repitir a Query, mas isso não fechará os dois ao mesmo tempo.Mas vamos ao erro que deu.Primeira coisa, declare de forma diferente, eu não havia prestado atenção nisso.Tiro o new da declaração da variável, deixe apenas:Publica cn as adodb.connectionPublic rs as adodb.recordsetNo Form_load você faz:set cn = new adodb.connectionset rs = new adodb.recordset.O que acontece? Da forma que você declarou, toda vez que ele ler a variável, ira declarar uma nova conexão, e dará sempre um erro ou outro.Tente fazer desse jeito e e abrir apenas no form_load, com certeza dará certo.Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.