Jump to content
Fórum Script Brasil
  • 0

Movimentação de registro atual


ViaPocket

Question

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 to comment
Share on other sites

15 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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!

Edited by ViaPocket
Link to comment
Share on other 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 to comment
Share on other 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.

Edited by ViaPocket
Link to comment
Share on other 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

Edited by 1980coelho
Link to comment
Share on other 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.

Edited by ViaPocket
Link to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...