Ir para conteúdo
Fórum Script Brasil
  • 0

Movimentação de registro atual


ViaPocket

Pergunta

Seguinte. Quero saber qual o caminho para que devo seguir para que eu faça uma "paginação" de registro único.

Imagine que estou visualizando determinado registro cujo ID foi capturado da URL.

Quero que, ao clicar num elemento, o regsitro atual salte para o próximo ou anterior.

To tentando me virar aqui com algo como rs.Movenext...mas ainda nada de funcionar.

Um help por caridade.

Link para o comentário
Compartilhar em outros sites

15 respostass a esta questão

Posts Recomendados

  • 0

Você pode usar uma paginação mesmo exibir de 1 em 1 registro (verifique os tópicos fixos ai em cima que tem exemplos ótimos),

ou use sempre top 1 registros...

exemplo

id atual=950, o anterior dele é 900 e o próximo é 1000

botão anterior manda um id=949, o sql fica algo do tipo

top 1 id from tabela where id<=949

ou ainda usar os 3 ultimos registros sempre... onde você sabera qual o anterior e qual o proximo

Link para o comentário
Compartilhar em outros sites

  • 0

Ok Bareta. Obrigado pelas sugestões.

No meu caso o ID não é ordenado...então não posso "confiar" em colocar para Anterior algo como ID atual-1 e Próximo o ID atual +1.

Achei que fosse só colocar um rs.Next e rs.Previous (ou algo equivalente). Para movimentar, o recordset tem que estar com vários registros Isso não acontece porque o select trás somente um registro (tem um WHERE na query).

Vou dar uma fuçada no fórum. Se tiver algo na agulha posta ai.

valeu!

Editado por ViaPocket
Link para o comentário
Compartilhar em outros sites

  • 0
use a propriedade PageSize do recordeset definido para 1 registro

abaixo link do tópico com uma paginação

http://scriptbrasil.com.br/forum/index.php?showtopic=12549

estou com o mesmo problema.. uma pagina ue estou fazendo sobre videogames, me lista o top10 games e ao clicar em um dos 10 da lista que me vem as informacoes do ID correspondente da lista queria avancar para o proximo ou voltar ao anterior e ficar entre os 10 itens somente.. não estou conseguindo, pelo que estou vendo paginacao que falam e diferente se pega todos itens da tabela, nesse caso pelo que entendo e tipo so avancar ou retroceder pelo ID chamado como foi citado acima, +1 ou -1 no ID..

Link para o comentário
Compartilhar em outros sites

  • 0

Olá amigos. Testei a paginação do link acima. Perfeita!

Mas minha necessidade é de navegar por um registros por vez.

Se eu usar o código o código do link acima para navegar por um registro por vez as opções Prox, Anterior, Primeiro, Último e etc ficam desabilitadas.

Isso ocorre porque no meu caso usa um WHERE na consulta. Então o recordset sempre será igual 1 (um). E sendo assim o código entendo que não faz sentido exibir os links de navegação. Entendo que a lógica esteja correta.

No meu caso o id do registro não tem ordem, é aleatório no BD. Então não dá pra usar a lógica "mova para rs +1 ou rs -1. Pois se meu id for igual a 5 talvez não exista no banco o item 6 nem o item 4.

Por outro lado, se eu usar WHERE Campo <= '"&meu_id&"' também não funciona porque deste modo a consulta não trará o item que eu quero.

Se alguém puder dar uma luz ficarei muito grato.

Editado por ViaPocket
Link para o comentário
Compartilhar em outros sites

  • 0
Olá amigos. Testei a paginação do link acima. Perfeita!

Mas minha necessidade é de navegar por um registros por vez.

Se eu usar o código o código do link acima para navegar por um registro por vez as opções Prox, Anterior, Primeiro, Último e etc ficam desabilitadas.

Isso ocorre porque no meu caso usa um WHERE na consulta. Então o recordset sempre será igual 1 (um). E sendo assim o código entendo que não faz sentido exibir os links de navegação. Entendo que a lógica esteja correta.

No meu caso o id do registro não tem ordem, é aleatório no BD. Então não dá pra usar a lógica "mova para rs +1 ou rs -1. Pois se meu id for igual a 5 talvez não exista no banco o item 6 nem o item 4.

Por outro lado, se eu usar WHERE Campo <= '"&meu_id&"' também não funciona porque deste modo a consulta não trará o item que eu quero.

Se alguém puder dar uma luz ficarei muito grato.

ve se entendi e se esse codigo te resolve:

<%

Set adoCon = Server.CreateObject("ADODB.Connection")

src = Server.MapPath("produtos.mdb")

sConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & src

adoCon.Open sConnStr

strID = Clng(Request.Querystring("ID"))

Set rs = Server.CreateObject("ADODB.Recordset")

strSQL = "SELECT [iD], [category], [name], [info] FROM tblGames"

rs.open strSQL, adoCon, 3, 3

rs.PageSize = 1

If rs.EOF Then

Mensagem = "Nenhum Registro Encontrado"

Response.End

Else

If Request.QueryString("pagina")="" Then

intpagina = 1

Else

If cint(Request.QueryString("pagina"))<1 Then

intpagina = 1

Else

If cint(Request.QueryString("pagina"))>rs.PageCount Then

intpagina = rs.PageCount

Else

intpagina = Request.QueryString("pagina")

End If

End If

End If

End If

rs.AbsolutePage = intpagina

intrec = 0

While intrec<rs.PageSize And NOT rs.EOF

Response.Write ("<font size='3'>")

Response.Write (rs("Name"))

Response.Write ("<br>")

Response.Write ("<font size='2'>")

Response.Write (rs("Info"))

Response.Write ("</font>")

Response.Write ("<br>")

rs.MoveNext

intrec = intrec + 1

If rs.EOF Then

response.write " "

End If

Wend

If intpagina>1 Then

%>

<a href="_paging.asp?pagina=<%=intpagina-1%>">Anterior</a>

<%

End If

If StrComp(intpagina,rsViewTop10game.PageCount)<>0 Then

%>

<a href="_paging.asp?pagina=<%=intpagina + 1%>">Próximo</a>

<%

End If

Set rs = Nothing

Set adoCon = Nothing

%>

se tiver duvidas fale.. abraco

Editado por 1980coelho
Link para o comentário
Compartilhar em outros sites

  • 0

Olá 1980coelho! Primeiramente agradeço pela ajuda.

Olha, é quase isso.

Imagina o cenário. O cara clica num item da página A (página que lista os itens) e vai para a página B (página que trás os detalhes do item). O parâmetro é passado pela URL.

Imagine que o ID passado pela URL seja 20. Então ao carregar a página B será exibido detalhes do item com ID igual a 20. Certo?

Até aqui nada de novidade.

O que preciso é que na página B tenha os botões (ou links) de navegação para navegar para outros itens na página B.

Então tem que ser um esquema que passe o parâmetro (ID) para a própria página B. Ai tem que pegar no recordset o ID do item anterior e item posterior para servir como parâmetro para mandar para a URL.

Outra possibilidade seria assim.

Ter uma condição que, se o parâmetro da URL for null ele roda a consulta (sem parâmetro). O código que postou está perfeito para isso, caso contrário roda a consulta usando um WHERE CampoID= var_da_URL, ou seja, com parâmetro da URL.

Isso eu montei. Desativei O IF do os links de navegação. Até que funcionou, dá pra navegar do jeito que preciso (com ou sem parâmetro na URL).

Mas tem um pequeno inconveniente. Como desativei o IF dos navegadores o link Próximo fica aparecendo mesmo quando é o último registro e o link Anterior fica aparecendo mesmo quando é o primeiro registro.

Como faço para contornar isso?

valeu.

Editado por ViaPocket
Link para o comentário
Compartilhar em outros sites

  • 0

bom vamos ver se entendi e consigo ajudar, na linha:

strSQL = "SELECT [iD], [category], [name], [info] FROM tblGames"

você tem então que definir aonde sera sua paginacao no caso exemplo;

strID = Clng(Request.Querystring("ID"))

strSQL = "SELECT [iD], [category], [name], [info] FROM tblGames WHERE = ID =" & strID

ou

strSQL = "SELECT [iD], [category], [name], [info] FROM tblGames WHERE = ID =" & rs("NOME_DA_COLUNA")

---

aguardo contato..

Link para o comentário
Compartilhar em outros sites

  • 0

certo... retirei a oaginação fixa ali em cima... http://scriptbrasil.com.br/forum/index.php...ost&p=60707

bom uma paginação consiste na exibição de x registros e em controles de navegação entre eles certo?

temos a exibição de 1 registro por página

RS.PageSize = 1
logo a quantidade de registros é a quantidade de páginas, e logo a ultima página é também a quantidade de registros e a primeira página é 1 independente so o id do primeiro item for 5000000
TotalPages = RS.PageCount
o registro atual é numero da página atual... logo a página 10 pode equivaler ao registro id 200
RS.AbsolutePage = PagAtual
isso é definido no inicio da paginação... registros próximo e anterior são pagina atual +1 e -1, logo deve ser tratado no caso de a pagina atual for a primeira ou a ultima Agora é so montar a navegação
IF PagAtual > 1 THEN 
      
      Response.Write("<a href='pagina.asp?PagAtual=" &  1 & "'>")
      Response.Write("Primeira") 
      Response.Write("</a>&nbsp;")
      
      Response.Write("<a href='pagina.asp?PagAtual=" & PagAtual - 1 & "'>")
      Response.Write("Anterior") 
      Response.Write("</a>&nbsp;")

  Else

      Response.Write("Primeira&nbsp;") 
      Response.Write("Anterior&nbsp;") 

End If

IF PagAtual <> TotalPages THEN 

      Response.Write("<a href='pagina.asp?PagAtual=" & PagAtual + 1 & "'>")
      Response.Write("Próxima")
      Response.Write("</a>&nbsp;") 

      Response.Write("<a href='pagina.asp?PagAtual=" & TotalPages & "'>")
      Response.Write("Ultima")
      Response.Write("</a>&nbsp;")        

 Else

      Response.Write("Próxima&nbsp;") 
      Response.Write("Ultima&nbsp;") 

End If

basicamente isso... a orden dos registros você define na SQL

Link para o comentário
Compartilhar em outros sites

  • 0

Hmmm...bom, vou testar.

Mas ainda estou meio cético porque a página roda uma consulta assim:

SELECT [sisMunCod], [sisMunCodEstado], [sisMunDesc] FROM SIS_MUNICIPIOS WHERE SisMunCod = '"&strID&"'

Este WHERE é quem diz qual registro será selecionado. Se eu pressionar o link Próximo não haverá um valor para passar pela URL para satisfazer consulta. E é justamente a partir deste ponto que a coisa pega porque se não houver parâmetro haverá erro. Não?

Então você pode pensar "bom, basta informar o parâmetro no link de navegação...algo como

<a href='pagina.asp?PagAtual=" & TotalPages & "' &ID='"&rs("campo_pk")&"'>

Creio que não funcionará porque rs("campo_pk") será resultado da consulta acima. Então se o select foi feito tendo como parâmetro o ID 100 o valor da variável do link ( o recordset rs("campo_pk) ) será exatamente o mesmo e a navegação não sairá do lugar.

Mas vou reler seus comentários para ver se não estou escrevendo bobagem e fazer mais testes.

Obrigado meu caro!

Link para o comentário
Compartilhar em outros sites

  • 0
Hmmm...bom, vou testar.

Mas ainda estou meio cético porque a página roda uma consulta assim:

SELECT [sisMunCod], [sisMunCodEstado], [sisMunDesc] FROM SIS_MUNICIPIOS WHERE SisMunCod = '"&strID&"'

Este WHERE é quem diz qual registro será selecionado. Se eu pressionar o link Próximo não haverá um valor para passar pela URL para satisfazer consulta. E é justamente a partir deste ponto que a coisa pega porque se não houver parâmetro haverá erro. Não?

Então você pode pensar "bom, basta informar o parâmetro no link de navegação...algo como

<a href='pagina.asp?PagAtual=" & TotalPages & "' &ID='"&rs("campo_pk")&"'>

Creio que não funcionará porque rs("campo_pk") será resultado da consulta acima. Então se o select foi feito tendo como parâmetro o ID 100 o valor da variável do link ( o recordset rs("campo_pk) ) será exatamente o mesmo e a navegação não sairá do lugar.

Mas vou reler seus comentários para ver se não estou escrevendo bobagem e fazer mais testes.

Obrigado meu caro!

Pelo que eu entendi do que vi e do que tu falou eu usaria o q postei... lógico que pode ter falhas ... heheehhehehe..

mais vamos por partes... num primeiro ponto destaco que se existe uma navegação de registros existem vários registros, logo existe um próximo e um anterior.

O AbsolutePage não tem nada a ver com chave primária... se você exibe 10 registros por página e registro de ID 100 vai estar na página 10 e não na 100, isso sem falar dos registros que já não fazem parte desse mundo...

Se SisMunCod for uma categoria que pode contemplar mais de um registro, irá funcionar... se for o ID do registro ai vai ter que mudar... ai pode ser criada uma solução baseada em MoveFirst e MoveNext,

Tava digitando aqui lembrei de uma outra solução no caso da navegação baseada no registro atual, você pode informar no link o id atual e uma informação de para onde ir (anterior ou proximo) e usar select top pegando o 1 registro antes ou depois do atual...

Link para o comentário
Compartilhar em outros sites

  • 0
Hmmm...bom, vou testar.

Mas ainda estou meio cético porque a página roda uma consulta assim:

SELECT [sisMunCod], [sisMunCodEstado], [sisMunDesc] FROM SIS_MUNICIPIOS WHERE SisMunCod = '"&strID&"'

Este WHERE é quem diz qual registro será selecionado. Se eu pressionar o link Próximo não haverá um valor para passar pela URL para satisfazer consulta. E é justamente a partir deste ponto que a coisa pega porque se não houver parâmetro haverá erro. Não?

Então você pode pensar "bom, basta informar o parâmetro no link de navegação...algo como

<a href='pagina.asp?PagAtual=" & TotalPages & "' &ID='"&rs("campo_pk")&"'>

Creio que não funcionará porque rs("campo_pk") será resultado da consulta acima. Então se o select foi feito tendo como parâmetro o ID 100 o valor da variável do link ( o recordset rs("campo_pk) ) será exatamente o mesmo e a navegação não sairá do lugar.

Mas vou reler seus comentários para ver se não estou escrevendo bobagem e fazer mais testes.

Obrigado meu caro!

Pelo que eu entendi do que vi e do que tu falou eu usaria o q postei... lógico que pode ter falhas ... heheehhehehe..

mais vamos por partes... num primeiro ponto destaco que se existe uma navegação de registros existem vários registros, logo existe um próximo e um anterior.

O AbsolutePage não tem nada a ver com chave primária... se você exibe 10 registros por página e registro de ID 100 vai estar na página 10 e não na 100, isso sem falar dos registros que já não fazem parte desse mundo...

Se SisMunCod for uma categoria que pode contemplar mais de um registro, irá funcionar... se for o ID do registro ai vai ter que mudar... ai pode ser criada uma solução baseada em MoveFirst e MoveNext,

Tava digitando aqui lembrei de uma outra solução no caso da navegação baseada no registro atual, você pode informar no link o id atual e uma informação de para onde ir (anterior ou proximo) e usar select top pegando o 1 registro antes ou depois do atual...

me tira uma duvida os registros que você quer passar para o proximo ou voltar um, você quer movimentar pelo ID deles ou outro RS?

se for pelo id e facil e so:

<a href="main.asp?ID=<%= strID - 1 %>">Anterior</a>

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...