Ir para conteúdo

POWERED BY:

Arquivado

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

gabrielsor

Paginação com filtro

Recommended Posts

Salve galera...tenho uma página onde o usuário preenche um campo(empresa) e a partir desse campo são exibidos os resultados encontrados, por serem vários resultados tive que fazer uma paginação e para isso utilizei o código abaixo(que a maioria de vcs já deve ter visto pela net) mas...a paginação só funciona corretamente na primeira página, onde a consulta sql funciona normal (select * from cadastro where... fiz o teste dando um response.write) mas qdo eu aperto no próximo, ele perde o filtro e o sql passa a ser (select * from cadastro).

 

No começo da página de paginação eu tenho uma verificação que pega o valor do campo "empresa" da página anterior e a partir dai faz a pesquisa no banco...caso esse campo não tenha sido preenchido ai eu mando ele executar o select*from cadastro...

acredito que o problema esteja nessa parte...pois quando ele muda para a página 2 ele perde o request.form...tentei colocar o comando sql em querystring a cada página que ele muda eu puxo o sql completo e mando executar...mas não deu certo...queria saber se esse é realmente o caminho, ou se tem alguma forma mais fácil de fazer isso...

 

Se precisar posto o códico completo...só não postei pq ta gigante e bem bagunçado(css, etc)

 

Por enquanto é isso...

Espero que possam me ajudar!

:D

 


<%
'Efetuando a conexão com a base de dados criada -----------------------
Set Conn = Server.CreateObject("AdoDb.Connection")
Conn.provider="Microsoft.Jet.OLEDB.4.0"
Conn.connectionstring=Server.Mappath("/coluna_asp/db /clientes.mdb")
Conn.open
'--------------------------------------------------------------------------

'Vamos criar o objeto Record Set -> neste caso é necessário declará-lo,
'pois vamos utilizar algumas funções deste objeto
Set RS = Server.CreateObject("adodb.recordset")

RS.PageSize = 5 'quantidade de registros por página. Você pode alterar sem conforme precise.

'Vamos fazer a busca na tabela contatos
SQL = "select * from contatos"
RS.Open SQL,Conn,3,3

'Vamos agora verificar exceções do tipo “fim de arquivo” (EOF), se a página atual é menor
'que zero, se é maior que o número total de páginas, etc.
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
'Fim das verificações de exceções

'Usamos a propriedade AbsolutePage para dizer ao RS que página ele esta
RS.AbsolutePage=intpagina

' Inicia o contador que vai controlar os registros mostrados
intrec=0

'Enquanto o contador for menor que a quantidade de registros mostrados ou
' não for o final do arquivo
While intrec < RS.PageSize and not RS.EOF
'------------------- AQUI VEM TUDO O QUE SEÁ PAGINADO -----------------------
  response.write RS("nome") & " - " & RS("telefone") & " - " & RS("email") & "<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
%>
  <a href="paginacao.asp?pagina=<%=intpagina + 1%>">Próxima</a>
<%
END IF
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Funciona mais ou menos assim:

Através de um campo de formulário, você envia o valor para a página de pesquisa, e teoricamente recupera o valor assim: Request.Form("campo");

Quando entrar na paginação (paginas seguintes), o valor deve continuar a ser informado, só que agora não mais por formulario e sim por QueryString;

Então como você precisa de duas formas de recuperação, resuma as requisições utilizando apenas: Request("campo");

E no link da paginação: paginacao.asp?valor_campo=xxx&pagina=yyy

 

Att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se o problema é porque a 2 página em diante não recebe o valor do filtro, você deverá colocar o valor do filtro na url, e recupera-la com querystring.

'verifica se é a primeira página ou não
variavel=request.querystring("variavel")
if variavel="" then
select .... where ...
else
select ... where ... ="&variavel

 

algo nesse sentido

Compartilhar este post


Link para o post
Compartilhar em outros sites

vlww pelas respostas, tive um avanço...masss ainda não funcionou...

 

a primeira página continua exibindo corretamente...ai na segunda em diante estou trazendo o valor do sql da primeira, mas não ta vindo mto formatada e ACHO que por isso não está mais trazendo nenhum dado do bd...

 

COM DATA

Select * from cadastro WHERE mes Like '' and ano LIKE ' 10' order by autonum desc

 

CAMPO EMPRESA

Select * from cadastro WHERE empresa Like 'ATLAS' order by autonum desc

 

CAMPO INSTRUMENTO

Select * from cadastro WHERE instrumento Like 'torquimetro' order by autonum desc

 

 

Segue uma parte do código:

 

if request.QueryString("pagina")>0 then

    sql=cstr(request.QueryString("pesquisa"))

else

    if request.Form("data")="" and request.Form("empresa")="empresa" and request.form("instrumento")="" then
       Sql = "Select * from cadastro WHERE empresa Like '%" & Request.Form("empresa2") & "%' order by autonum desc"
    end if

[...]

    if request.Form("data")="" and request.Form("empresa")="" and request.form("instrumento")="" then
      Sql = "Select * from cadastro order by autonum desc"
    end if

end if



[...]

   'Criamos as Validações para a navegação "Anterior" e "Próximo"  
   if intpagina>1 then
   %>
       <a href="relatorio.asp?pagina=<%=intpagina-1%>&pesquisa=<%=sql%>">Anterior</a>
       <%
   end if
   if StrComp(intpagina,objRS.PageCount)<>" " then  
   %>
       <a href="relatorio.asp?pagina=<%=intpagina + 1%>&pesquisa=<%=sql%>">Próximo</a>  
       <%
   end if
   objRS.close
   BdWeb.Close
   Set objRS = Nothing
   %>

 

ainda não consegui...''/

ninguém ai pra me ajudar? :ermm:

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.