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

(Resolvido) Paginação


Alberto Mota

Pergunta

Prezados colegas, depois de muito pesquisar, todos os exemplos só funcionam

se não houver nenhum filtro afetando a tabela. Se uso um filtro do form,

Assim como no resumo do código:

Dim filtro
filtro = Request.Form("txttipo")
Sql = "SELECT * FROM Pessoais where tipo='"&  filtro & "'"
só aparece a primeira pagina, o link de proximo me devolve uma pagina de registro não localizado. Mas com certeza há mais registros. Desde já agradeço Eis o código completo
<%@LANGUAGE="VBSCRIPT" %>
<%
'Option Explicit
Dim registros, paginas
registros = 4
pagina = Request.QueryString("pagina")
If pagina = "" Then
pagina = 1
End If

Dim filtro
filtro = Request.Form("txttipo")
%>

<%
Dim BdWeb
Set BdWeb = Server.CreateObject("ADODB.Connection")
BdWeb.Open = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("data/artefato.mdb")
Dim Sql
Sql = Session("Sql")
Sql = "SELECT * FROM Pessoais where tipo='"&  filtro & "'"

Dim WebRs
Set WebRs = Server.CreateObject("ADODB.Recordset")
WebRs.PageSize = registros

WebRs.Open Sql, BdWeb, 3
If WebRs.EOF Then %>

Nenhum registro localizado! 

<%Else
WebRs.MoveFirst
WebRs.AbsolutePage = pagina%>

<%Do While Not WebRs.EOF AND x < WebRs.PageSize
Dim x
x = x + 1 %>
<div align="center">
<center>
<table width="95%" height="50" border="1" style="border-collapse: collapse" bordercolor="#CCCCCC" cellpadding="0" cellspacing="0">
<tr bordercolor="#CCCCCC">
<td width="5%" rowspan="3">&nbsp;</td>
<td width="95%" height="10" bordercolor="#CCCCCC"><span class="style6"><b>Nome: </b><%=WebRs.Fields("Nome")%></span></td>
</tr>
<tr>
<td height="10" bordercolor="#CCCCCC"><span class="style6"><b>Email: </b><%=WebRs.Fields("E-mail")%></span></td>
</tr>
<tr>
<td height="10" bordercolor="#CCCCCC"><span class="style6"><b>Cidade: </b><%=WebRs.Fields("Cidade")%></span></td>
</tr>
</table>
</center>
</div>
</h2>
<span class="style6">
<%WebRs.MoveNext

Loop
Dim anterior, pagina, proxima, ultima, primeira, ultm2
anterior = pagina - 1
proxima = pagina + 1
ultima = WebRs.PageCount
primeira = 1
ultm2 = FormatNumber(WebRs.PageCount - 1,0)
If pagina <> 1 Then
Response.Write " <a href=resultado_busca.asp?pagina="&primeira&">Primeira Página</a></b> "
End If
If pagina > 1 AND pagina <> 2 Then
Response.Write "<a href=paginacao10.asp?pagina="&anterior - 1&">"&anterior - 1&"</a> "
End If
If pagina > 1 Then
Response.Write " <a href=paginacao10.asp?pagina="&anterior&">"&anterior&"</a> "
End If
Response.Write "<b> ["&pagina&"]</b> "
If Not WebRs.EOF Then
Response.Write " <a href=paginacao10.asp?pagina="&proxima&">"&proxima&"</a> "
End If
If Not WebRs.EOF AND pagina <> ultima AND pagina <> ultm2 Then
Response.Write " <a href=paginacao10.asp?pagina="&proxima + 1&">"&proxima + 1&"</a> "
End If
If Not WebRs.EOF Then
Response.Write "<a href=paginacao10.asp?pagina="&ultima&">Ultima Pagina</a> "

End If
End If
%>
</span>
<center>
<table width="200" border="0" align="center">
<tr>
<td>
<center>
<a href="todos.asp" class="style2">Retorna</a>
</center>
</td>
</tr>
</table>
</center>

<%
WebRs.Close
Set WebRs = Nothing
BdWeb.Close
Set BdWeb = Nothing

%>

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Alberto, aonde é que está o Request.Form("txttipo") ?

Se estiver numa pagina anterior, realmente nas proximas paginas não vai funcionar porque está perdendo o valor. Ou seja, ele só terá essa variavel no primeiro momento que chegar na pagina.

Voce pode confirmar isso passando o mouse sobre as outras pagina, vendo se o valor dessa variavel aparece.

Se for isso mesmo, jogue o valor do txttipo no link aqui:

Response.Write " <a href=paginacao10.asp?pagina="&proxima + 1&">"&proxima + 1&"</a> "

Link para o comentário
Compartilhar em outros sites

  • 0

Andreia estou tentando atraves de session, parece ser o correto

Pego o session do form

<%
Session("tipo") = Request.Form("txttipo")
tipo = Session("tipo")
%>
Ele me filtra a primeira pagina. Quando clico no proximo surge essa mensagem. Se puder me orientar, agradeço. Microsoft JET Database Engine (0x80040E14) Erro de sintaxe (operador faltando) na expressão de consulta 'tipo='. /omega/paginacao.asp, line 19 Onde linha 19 é:
strBuscaProdutos = "SELECT * FROM Pessoais where tipo=" & tipo
Segue o código completo:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>

<%
Session("tipo") = Request.Form("txttipo")
tipo = Session("tipo")
%>
<%
'Abrimos a Conexão com o Banco
Dim caminho
Dim conexao 
caminho = Server.MapPath("data/artefato.mdb")
Set conexao = Server.CreateObject("ADODB.Connection")
conexao.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&caminho&";"

        'Selecionamos todos os Produtos da Tabela
Set rsBuscaProdutos = Server.CreateObject("ADODB.Recordset")
strBuscaProdutos = "SELECT * FROM Pessoais where tipo=" & tipo

        rsBuscaProdutos.open strBuscaProdutos, conexao, 3, 3

'Definimos o Numero de Paginas com a propriedade "PageSize" do objeto Recordset
rsBuscaProdutos.PageSize = 20

'Criamos as Validações
if rsBuscaProdutos.eof then
   Mensagem = "Nenhum Registro Encontrado"
   Response.End 
else
   'Definimos em qual pagina o visitante está
   if Request.QueryString("pagina")="" then 
      intpagina = 1
   else
      if cint(Request.QueryString("pagina"))<1 then
intpagina = 1
      else
if cint(Request.QueryString("pagina"))>rsBuscaProdutos.PageCount then  
    intpagina = rsBuscaProdutos.PageCount
         else
    intpagina = Request.QueryString("pagina")
end if
      end if    
   end if   
        end if
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Tutorial de Paginação</title>
<style>
/*
Criei estas CSSs somente para melhorar o 
layout da Tabela de Paginação. Vocês podem modificar
ao seus gostos... usem e abusem...:)
*/
.TProdutos{
border: 1px solid #666666;
margin: 2px 0px 2px 0px;
background: #FFFFFF;
border-collapse:collapse;
width: 500px;
text-align:center;
}

.TProdutos td {
border: 0px solid #666666;
border-collapse:collapse;
}

.TProdutos td#Titulo {
border: 0px solid #666666;
font: 7pt Verdana, Arial, Helvetica;
height: 17px;
background: #063d97;
color:#FFFFFF;
}

.TProdutos td#Dados {
border: 1px solid #CCCCCC;
font: 7pt Verdana, Arial, Helvetica;
height: 18px;
background: #EAEFFF;
color: #666666;
}
</style>
</head>
<body>
<table border="0" align="center" class="TProdutos">
  <tr>
    <td width="190" id="Titulo">Nome</td>
    <td width="134" id="Titulo">Email</td>
    <td width="160" id="Titulo">Cidade</td>
  </tr>
  <%
   'Iniciamos o Loop
    rsBuscaProdutos.AbsolutePage = intpagina 
    intrec = 0
    While intrec<rsBuscaProdutos.PageSize and not rsBuscaProdutos.eof  
  %>
  <tr>
    <td id="Dados"><div align="left"><%=rsBuscaProdutos("Nome")%></div></td>
    <td id="Dados"><div align="left"><%=rsBuscaProdutos("E-mail")%></div></td>
    <td id="Dados"><%=rsBuscaProdutos("Cidade")%></td>
  </tr>
  <%
    rsBuscaProdutos.MoveNext
    intrec = intrec + 1
    if rsBuscaProdutos.eof then 
       response.write " " 
    end if   
    Wend  
  %>
  <tr>
    <td colspan="2"  id="Dados"><div align="left"><%=Session("tipo")%></div></td>
    <td id="Dados">
    <% 
    'Criamos as Validações para a navegação "Anterior" e "Próximo"  
    if intpagina>1 then 
    %> 
    <a href="paginacao.asp?pagina=<%=intpagina-1%>">Anterior</a> 
    <% 
    end if
    if StrComp(intpagina,rsBuscaProdutos.PageCount)<>0 then   
    %>
    <a href="paginacao.asp?pagina=<%=intpagina + 1%>">Próximo</a>  
    <%
    end if
    'rsBuscaProdutos.close
    'Set rsBuscaProdutos = Nothing
    %>    </td>
  </tr>  
</table>
</body>
</html>

Link para o comentário
Compartilhar em outros sites

  • 0

Alberto, não sei porque você preferiu usar session nesse caso porque uma hora pode ocorrer a perda da sessao e consequentemente o erro aparecerá. Isso acaba pedindo uma verificação de session (se ela existe) para não gerar erro.

Acabei reparando que eu não postei o codigo completo (acho que a cabeça tava longe rsss) tenta assim:

Neste trecho mude:

Dim filtro
filtro = Request("txttipo")
Neste trecho mude:
Response.Write " <a href=paginacao10.asp?pagina="&proxima + 1&"&tipo="&filtro&">"&proxima + 1&"</a> "

testa agora

Link para o comentário
Compartilhar em outros sites

  • 0

Andreia desculpe a demora por retornar. Segui sua sugestão e deu um novo erro

Tipo de erro:

Erro de compilação do Microsoft VBScript (0x800A03FB)

'Loop' esperado

/omega/paginacao10.asp, line 111

É nesse trecho:

<%

rsBuscaProdutos.MoveNext

'Loop

intrec = intrec + 1

if rsBuscaProdutos.eof then

response.write " "

end if

Wend

%>

Tive que mudar o código que você me deu para este abaixo pois aparecia o numero 1 e não Proxima.

E tanto este quanto o seu surge a mensagem de erro acima. Mais uma vez obrigado por me ajudar.

<% Response.Write " <a href=paginacao10.asp?pagina="&proxima + 1&"&tipo="&filtro&">Proxima</a>" %>

Esse é o seu:

Response.Write " <a href=paginacao10.asp?pagina="&proxima + 1&"&tipo="&filtro&">"&proxima + 1&"</a> "

Envio novamente o código completo:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>

<%

Dim filtro

filtro = Request("txttipo")

%>

<%

'Abrimos a Conexão com o Banco

Dim caminho

Dim conexao

caminho = Server.MapPath("data/artefato.mdb")

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

conexao.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&caminho&";"

'Selecionamos todos os Produtos da Tabela

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

strBuscaProdutos = "SELECT * FROM Pessoais where tipo=" & filtro

rsBuscaProdutos.open strBuscaProdutos, conexao, 3, 3

'Definimos o Numero de Paginas com a propriedade "PageSize" do objeto Recordset

rsBuscaProdutos.PageSize = 20

'Criamos as Validações

if rsBuscaProdutos.eof then

Mensagem = "Nenhum Registro Encontrado"

Response.End

else

'Definimos em qual pagina o visitante está

if Request.QueryString("pagina")="" then

intpagina = 1

else

if cint(Request.QueryString("pagina"))<1 then

intpagina = 1

else

if cint(Request.QueryString("pagina"))>rsBuscaProdutos.PageCount then

intpagina = rsBuscaProdutos.PageCount

else

intpagina = Request.QueryString("pagina")

end if

end if

end if

end if

%>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>Tutorial de Paginação</title>

<style>

/*

Criei estas CSSs somente para melhorar o

layout da Tabela de Paginação. Vocês podem modificar

ao seus gostos... usem e abusem...:)

*/

.TProdutos{

border: 1px solid #666666;

margin: 2px 0px 2px 0px;

background: #FFFFFF;

border-collapse:collapse;

width: 500px;

text-align:center;

}

.TProdutos td {

border: 0px solid #666666;

border-collapse:collapse;

}

.TProdutos td#Titulo {

border: 0px solid #666666;

font: 7pt Verdana, Arial, Helvetica;

height: 17px;

background: #063d97;

color:#FFFFFF;

}

.TProdutos td#Dados {

border: 1px solid #CCCCCC;

font: 7pt Verdana, Arial, Helvetica;

height: 18px;

background: #EAEFFF;

color: #666666;

}

</style>

</head>

<body>

<table border="0" align="center" class="TProdutos">

<tr>

<td width="190" id="Titulo">Nome</td>

<td width="134" id="Titulo">Email</td>

<td width="160" id="Titulo">Cidade</td>

</tr>

<%

'Iniciamos o Loop

rsBuscaProdutos.AbsolutePage = intpagina

intrec = 0

While intrec<rsBuscaProdutos.PageSize and not rsBuscaProdutos.eof

%>

<tr>

<td id="Dados"><div align="left"><%=rsBuscaProdutos("Nome")%></div></td>

<td id="Dados"><div align="left"><%=rsBuscaProdutos("E-mail")%></div></td>

<td id="Dados"><%=rsBuscaProdutos("Cidade")%></td>

</tr>

<%

rsBuscaProdutos.MoveNext

'Loop

intrec = intrec + 1

if rsBuscaProdutos.eof then

response.write " "

end if

Wend

%>

<tr>

<td id="Dados"><div align="left">

</div>

</td>

<td id="Dados"><% Response.Write " <a href=paginacao10.asp?pagina="&proxima + 1&"&tipo="&filtro&">Proxima</a>" %></td>

<td id="Dados">

<%

'Criamos as Validações para a navegação "Anterior" e "Próximo"

if intpagina>1 then

%>

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

<%

end if

if StrComp(intpagina,rsBuscaProdutos.PageCount)<>0 then

%>

<%

end if

'rsBuscaProdutos.close

'Set rsBuscaProdutos = Nothing

%> </td>

</tr>

</table>

</body>

</html>

Link para o comentário
Compartilhar em outros sites

  • 0

Andreia tentei de várias formas e surge esse erro:

Tipo de erro:

Microsoft JET Database Engine (0x80040E14)

Erro de sintaxe (operador faltando) na expressão de consulta 'tipo='.

/omega/paginacao.asp, line 22

Que é essa aqui:

SQL = "SELECT * FROM Pessoais where tipo="& filtro
No navegador acima na barra de endereços aparece http://localhost/omega/paginacao.asp?pagina=2&tipo=2 Agradeço a paciência e mais uma vez obrigado. Eis o código completo:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<%
Dim filtro
filtro = request("txttipo")
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Paginação</title>
</head>
<body>
<% 
Set Conn = Server.CreateObject("AdoDb.Connection") 
Conn.provider="Microsoft.Jet.OLEDB.4.0" 
Conn.connectionstring=Server.Mappath("data/artefato.mdb") 
Conn.open 
Set RS = Server.CreateObject("adodb.recordset")
RS.PageSize = 3 

SQL = "SELECT * FROM Pessoais where tipo="& filtro 

RS.Open SQL,Conn,3,3
IF RS.EOF then 
   Response.Write "nenhum registro encontrado"
   Response.End 'paramos o programa
ELSE
   'Definindo em qual pagina o visitante está
   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 RS("Nome") & " - " & RS("E-mail") & " - " & RS("tipo") & "<BR>"
'---------------------------------------------------------------------------------------------
   RS.MoveNext

   ' Acrescenta +1 ao contador
   intrec=intrec+1 
   'Se for EOF (fim de arquivo), imprimir branco na tela
   IF RS.EOF then 
      response.write " " 
   END IF
Wend 'fim do loop
'Vamos verificar se não é a página 1, para podermos colocar o link “anterior”. 
IF intpagina > 1 then 
%> 
<a href="paginacao.asp?pagina=<%=intpagina-1%>">Anterior</a> 
<% 
END IF
'Se não estivermos no último registro contado, então é mostrado o link p/ a próxima página 
IF strcomp(intpagina,RS.PageCount) <> 0 then
Response.Write "<a href=paginacao.asp?pagina="&intpagina + 1&"&tipo="&filtro&">Próxima</a>"
%>
<%
END IF
%>
</body>
</html>

Link para o comentário
Compartilhar em outros sites

  • 0

Alberto você precisa usar os mesmos nomes de variaveis. Na pagina você usa txttipo só q você quer resgatar o valor chamando tipo

Deixe todos com o mesmo nome, ou txttipo ou tipo. Se você estiver chamando esse campo de uma pagina anterior à da paginação, veja qual o nome que está la tb, tem que ser todos iguais (o do filtro)

Link para o comentário
Compartilhar em outros sites

  • 0

(Resolvido). Andreia, muito obrigado!!!

você tinha razão. Mudei para:

Response.Write "<a href=paginacao.asp?pagina="&intpagina + 1&"&txttipo="&filtro&">Próxima</a>"

Funcionou. Sua ajuda foi inestimável. Há mais ou menos 2 anos você me ajudou no Insert Into que estava tendo problemas.

E agora com esse problemão.

Ia te pedir ajuda como ordenar também, mas resolvi me dedicar um pouco e consegui.

Segue o código ok para quem precisar. Até a próxima!

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<%
Dim filtro
filtro = request("txttipo")
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Paginação</title>
</head>
<body>
<% 
Set Conn = Server.CreateObject("AdoDb.Connection") 
Conn.provider="Microsoft.Jet.OLEDB.4.0" 
Conn.connectionstring=Server.Mappath("data/artefato.mdb") 
Conn.open 
Set RS = Server.CreateObject("adodb.recordset")
RS.PageSize = 3 

SQL = "select * from Pessoais where tipo="& filtro &" order by nome"


RS.Open SQL,Conn,3,3
IF RS.EOF then 
   Response.Write "nenhum registro encontrado"
   Response.End 'paramos o programa
ELSE
   'Definindo em qual pagina o visitante está
   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 RS("Nome") & " - " & RS("E-mail") & " - " & RS("tipo") & "<BR>"
'---------------------------------------------------------------------------------------------
   RS.MoveNext

   ' Acrescenta +1 ao contador
   intrec=intrec+1 
   'Se for EOF (fim de arquivo), imprimir branco na tela
   IF RS.EOF then 
      response.write " " 
   END IF
Wend 'fim do loop
'Vamos verificar se não é a página 1, para podermos colocar o link “anterior”. 
IF intpagina > 1 then 

 Response.Write "<a href=paginacao.asp?pagina="&intpagina - 1&"&txttipo="&filtro&">Anterior</a>"
 %>
<% 
END IF
'Se não estivermos no último registro contado, então é mostrado o link p/ a próxima página 
IF strcomp(intpagina,RS.PageCount) <> 0 then
Response.Write "<a href=paginacao.asp?pagina="&intpagina + 1&"&txttipo="&filtro&">Próxima</a>"
%>
<%
END IF
%>
</body>
</html>

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...