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

Coluna com paginação


(!_Odisséa_!)

Pergunta

Olá.

Eu procurei no forum e achei dúvidas iguais a minha mas nenhuma solução, o pessoal que dava as dicas ou mandava um link para paginação ou mandava um link para como colocar o resultados em colunas, muito bem! Eu tentei adaptar um código que divide os resultados em duas colunas com um código de paginação, se eu separar os dois códigos eles funcionam normalmente, mas uando tento uni-lo ta erro. Eu quero saber como faço pra fazer uma página que divide o resultado em duas colunas com no máximo 6 resultados por página, caso tenha mais um link, anterior e próximo.

Segue o código que divide o serultado em duas colunas

<% Set ra_Bd=Server.CreateObject("ADODB.Recordset")
               colunas=2
             sql="SELECT DISTINCT p_refe, p_clas, p_cate FROM produto WHERE p_clas = 1 AND p_cate = 1 ORDER BY p_refe"
             ra_bd.open sql, con_db
                if not ra_bd.eof then

                coluna=1
                response.write "<table><tr><td bgcolor=#00FF66 align=left width=100>"
                while not ra_bd.eof%>
                
                
                <a href="teste_sapato_p.asp?referencia=<% response.write ra_bd("p_refe")%>"><%=ra_bd("p_refe")&".jpg"%></a>

                <% if coluna=colunas then
                response.write "</td></tr><tr><td bgcolor=#00FF66 align=left width=100>"
                coluna=1
                else
                response.write "</td><td>"
                coluna=coluna+1
                end if

                ra_bd.movenext
                wend
                response.write "</td></tr></table>"
                end if
                ra_bd.close
                set ra_bd=nothing %>

Eu não sei se adapto o código de paginção no código da coluna, ou se o da coluna na paginação.

Algum poderia me ajudar.

Muito Obrigado desde já.

Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0

Olá "Odisséia", tudo bem.

Estou aqui para te auxiliar. Não sei se vou conseguir ajudar, afinal eu já tive um monte de dúvidas sobre isso anteriormente, nos primórdios do meu aprendizado em ASP, por isso quero compartilhar o conhecimento.

1. Olha é um pouco complicado montar estas colunas em tempo de execução pos isso faça uma função para poder te devonver o grid inteiro.

Function getGridColunas(Celula1,Celula2,Celula3,Celula4,Celula5,Celula6)

    Dim temp
    temp = "<tr>"
    temp = temp & "<td>"
    temp = temp & Celula1
    temp = temp & "</td>"
    temp = temp & "<td>"
    temp = temp & Celula2
    temp = temp & "</td>"
    temp = "</tr>"
    temp = "<tr>"
    temp = temp & "<td>"
    temp = temp & Celula3
    temp = temp & "</td>"
    temp = temp & "<td>"
    temp = temp & Celula4
    temp = temp & "</td>"
    temp = "</tr>"
    temp = "<tr>"
    temp = temp & "<td>"
    temp = temp & Celula5
    temp = temp & "</td>"
    temp = temp & "<td>"
    temp = temp & Celula6
    temp = temp & "</td>"
    temp = "</tr>"
            
    getGridColunas = temp
    
End Function
2. Com a função pronta você já pode colocar a sua paginação em dia. Faça a conexão ao banco de dados e exiba os dados.
Set RS = Server.CreateObject("ADODB.RecordSet")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="& server.MapPath("db/SEU.BANCO.mdb")
RS.Open "SELECT * FROM Tabela", DSN, 3 ,3

    rs.AbsolutePage = strPagAbsoluta
    rs.PageSize = strTamanhoDaPagina

Dim val(6)
For x = 0 to (rs.RecordCount - 1)

    val(x) = rs("CAMPO.TABELA)
    
Next

resultadoGrid = getGridColunas(val(0),val(1),val(2),val(3),val(4),val(5),val(6))

Response.Write resultadoGrid

Eu utilizei o RecordSet porque ele me retorna o número de registros. Depois que eu tenho este número eu posso pegar cada posição e colocar dentro de um array. Depois só chamo o array e pronto.

Espero ter ajudado.

Qualquer dúvida, posta aí.

Marcos Oliveira.

Link para o comentário
Compartilhar em outros sites

  • 0

Olá, marcos_804.

Valeu pelas dicas, mas... ta dando um erro. Eu fiz o que você me falou, mas não funcionou.

Eu fiquei todo este tempo tentando intender o erro ou achear algo paracecido para conseguir resolver essa situação, mas o que achei foi que esse erro, dá porque ele retorna um numero que não foi achado no banco.

o erro que da é esse:

Erro de tempo de execução do Microsoft VBScript erro '800a0009'

Subscrito fora do intervalo: 'x'

/teste_sapato2.asp, line 70 --> val(x) = rs("p_refe")
o código que estou utilzando é esse:
<!--#INCLUDE virtual="acessa.asp"-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>
<style type="text/css">
<!--
-->
</style>
</head>

<body>
<%
Function getGridColunas(Celula1,Celula2,Celula3,Celula4,Celula5,Celula6)

    Dim temp
    temp = "<tr>"
    temp = temp & "<td>"
    temp = temp & Celula1
    temp = temp & "</td>"
    temp = temp & "<td>"
    temp = temp & Celula2
    temp = temp & "</td>"
    temp = "</tr>"
    temp = "<tr>"
    temp = temp & "<td>"
    temp = temp & Celula3
    temp = temp & "</td>"
    temp = temp & "<td>"
    temp = temp & Celula4
    temp = temp & "</td>"
    temp = "</tr>"
    temp = "<tr>"
    temp = temp & "<td>"
    temp = temp & Celula5
    temp = temp & "</td>"
    temp = temp & "<td>"
    temp = temp & Celula6
    temp = temp & "</td>"
    temp = "</tr>"
            
    getGridColunas = temp
    
End Function

pagina = Request.QueryString("p")
if pagina = "" then
pagina = 1
end if
'Seta a variavel pagina como a página em questão na paginação

registros = 6
'Seta o número de registros por pagina

set RS = Server.Createobject("AdoDB.RecordSet")
set RS.ActiveConnection = con_db
RS.cursortype = 3
RS.pagesize = registros

StrSQL = "SELECT DISTINCT p_refe, p_cate, p_clas FROM produto WHERE p_clas = 1 AND p_cate = 1"
RS.Open StrSQL, con_db

    rs.AbsolutePage = 2
    rs.PageSize = 6

Dim val(6)
For x = 0 to (rs.RecordCount - 1)

    val(x) = rs("p_refe")
    
Next

resultadoGrid = getGridColunas(val(0),val(1),val(2),val(3),val(4),val(5),val(6))

Response.Write resultadoGrid

if RS.EOF then
%>
<%
else
RS.absolutepage = pagina
if RS.EOF then
%>
<%
fim = 1
end if
xx = 0
While NOT RS.EOF AND xx < RS.pagesize
xx = xx + 1%>
<%=RS("p_refe")%>
<%
RS.MoveNext
Wend
end if

if fim = "" then

anterior = pagina - 1
proxima = pagina + 1

if anterior <> 0 then
%>
<a href="<%=request.servervariables("script_name")%>?p=<%=anterior%>">Anterior</a> -
<%
end if

%>
<a href="<%=request.servervariables("script_name")%>?p=<%=proxima%>">Próxima</a>
<%

end if

RS.Close
con_db.Close
%>
</body>
</html>

Pô cara se você puder continuar me ajudando.... valeu mesmo.

Link para o comentário
Compartilhar em outros sites

  • 0

Cara é assim, quando eu declarei "Dim val(6)" eu queria um array dentro do intervalo de 0 e 6.

O fato é que não me lembro muito bem destas conexoes

Tente mudar "Dim val(6)" para "Dim val(10)", assim você reserva 10 espaços dentro do array.

E olha para você ver realmente o que está se passando no loop faça o seguinte. Coloque a atribuição como comentário depois coloque para imprimir "x", assim:

For x = 0 to (rs.RecordCount - 1)

    'Imprima a variável de X assim você ver se ele está mesmo indo somente de 0 a 6.
    Response.Write( x &"<br>")

    'Coloque esta linha como comentário
    'val(x) = rs("p_refe")
    
Next

'Pare a execução do código nesta linha
Response.End
Vai postando o resultado aí que vamos analisar... OOOOOOOOOOPPPPPPPPPSSSS! Cara faz o seguinte...
'Deixe o espaço para 10 posições
Dim val(10)

'Aqui você só precisa ir de 0 até 5
For x = 0 to 5

    'Nesta linha você verifica se ainda há dados do banco, se não houver ele sai do laço
    if rs.EOF then exit for

    'Atribui
    val(x) = rs("p_refe")
    
Next

Link para o comentário
Compartilhar em outros sites

  • 0

E ai, cara.

Eu alterei o código e deixei ele assim:

Dim val(6)
For x = 0 to 6
    val(x) = rs("p_refe")
Next
resultadoGrid = getGridColunas(val(0),val(1),val(2),val(3),val(4),val(5))
Response.Write resultadoGrid

Se você reparar eu tirei uma val(x), no caso a val(6)... porque estava dando erro.

Bom ele me retorna os resultados que eu quero, mas... não coloca ele dentro do grid que você fez a função. ele me retorna assim:

000001111122222333334444455555

Quando ele deveria me responder assim:

00000 11111

22222 33333

44444 55555

Valeu, pela ajuda.

Marcelo Campos

Link para o comentário
Compartilhar em outros sites

  • 0

Marcelo,

Tinha percebido isso antes, mas só agora tive tempo.

O problema é na função que gera a tabela

Atual está assim:

Function getGridColunas(Celula1,Celula2,Celula3,Celula4,Celula5,Celula6)

    Dim temp
    temp = "<tr>"
    temp = temp & "<td>"
    temp = temp & Celula1
    temp = temp & "</td>"
    temp = temp & "<td>"
    temp = temp & Celula2
    temp = temp & "</td>"
    temp = "</tr>"
    temp = "<tr>"
    temp = temp & "<td>"
    temp = temp & Celula3
    temp = temp & "</td>"
    temp = temp & "<td>"
    temp = temp & Celula4
    temp = temp & "</td>"
    temp = "</tr>"
    temp = "<tr>"
    temp = temp & "<td>"
    temp = temp & Celula5
    temp = temp & "</td>"
    temp = temp & "<td>"
    temp = temp & Celula6
    temp = temp & "</td>"
    temp = "</tr>"
            
    getGridColunas = temp
    
End Function
Tente usar assim:
Function getGridColunas(Celula1,Celula2,Celula3,Celula4,Celula5,Celula6)

    Dim temp
    temp = "<table cellpadding='2' cellspacing='2' border='1'>"
    temp = temp & "<tr>"
    temp = temp & "<td>"
    temp = temp & Celula1
    temp = temp & "</td>"
    temp = temp & "<td>"
    temp = temp & Celula2
    temp = temp & "</td>"
    temp = temp & "</tr>"
    temp = temp & "<tr>"
    temp = temp & "<td>"
    temp = temp & Celula3
    temp = temp & "</td>"
    temp = temp & "<td>"
    temp = temp & Celula4
    temp = temp & "</td>"
    temp = temp & "</tr>"
    temp = temp & "<tr>"
    temp = temp & "<td>"
    temp = temp & Celula5
    temp = temp & "</td>"
    temp = temp & "<td>"
    temp = temp & Celula6
    temp = temp & "</td>"
    temp = temp & "</tr>"
    temp = temp & "</table>"
            
    getGridColunas = temp
    
End Function

Na primeira função em algumas partes do código eu não concatenava a variável, por isso não aparecia.

Tente aí... qualquer coisa dá um grito aí...

E olha passa o HTML gerado.

falou.

PS.: Aguardo 10 minutinhos

Link para o comentário
Compartilhar em outros sites

  • 0

Fala, cara!

Eu ia responder em 10 minutinhos, mas é que acabou a luz aqui em casa e não consegui. hehehehe

Acredito que estamos quase chegando no resultado. Ele monta uma tabela mas com o primeiro resultado da página que eu colocar na "rs.AbsolutePage =" e mostra os resultados embaixo da tabela.

Por exemplo, se eu colocar "rs.AbsolutePage = 1" ele vai completar os dados da tabela com o primeiro resultado página 1, se eu colocar "rs.AbsolutePage = 2" ele vai preencher a tabela com o primeiro resultado da página 2, e assim por diante.

Antes de postar esse tópico eu tentei de diversas maneiras colocar os resultados dentro da tabela, mas como asp não é muito a minha práia não tive sucesso :(

HTML Gerado:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>
<style type="text/css">
<!--
-->
</style>
</head>

<body>
<table cellpadding='2' cellspacing='2' border='1'><tr><td>02008</td><td>02008</td></tr><tr><td>02008</td><td>02008</td></tr><tr><td>02008</td><td>02008</td></tr></table>010080100901010010110200402007

<a href="/teste_sapato2.asp?p=2">Próxima</a>

</body>
</html>
Código ASP:
<%
Function getGridColunas(Celula1,Celula2,Celula3,Celula4,Celula5,Celula6)

    Dim temp
    temp = "<table cellpadding='2' cellspacing='2' border='1'>"
    temp = temp & "<tr>"
    temp = temp & "<td>"
    temp = temp & Celula1
    temp = temp & "</td>"
    temp = temp & "<td>"
    temp = temp & Celula2
    temp = temp & "</td>"
    temp = temp & "</tr>"
    temp = temp & "<tr>"
    temp = temp & "<td>"
    temp = temp & Celula3
    temp = temp & "</td>"
    temp = temp & "<td>"
    temp = temp & Celula4
    temp = temp & "</td>"
    temp = temp & "</tr>"
    temp = temp & "<tr>"
    temp = temp & "<td>"
    temp = temp & Celula5
    temp = temp & "</td>"
    temp = temp & "<td>"
    temp = temp & Celula6
    temp = temp & "</td>"
    temp = temp & "</tr>"
    temp = temp & "</table>"
            
    getGridColunas = temp
    
End Function

pagina = Request.QueryString("p")
if pagina = "" then
pagina = 1
end if
'Seta a variavel pagina como a página em questão na paginação

registros = 6
'Seta o número de registros por pagina

set RS = Server.Createobject("AdoDB.RecordSet")
set RS.ActiveConnection = con_db
RS.cursortype = 3
RS.pagesize = registros

StrSQL = "SELECT DISTINCT p_refe, p_cate, p_clas FROM produto WHERE p_clas = 1 AND p_cate = 1"
RS.Open StrSQL, con_db

    rs.AbsolutePage = 2
    rs.PageSize = 6

Dim val(6)
For x = 0 to 6
    val(x) = rs("p_refe")
Next
resultadoGrid = getGridColunas(val(0),val(1),val(2),val(3),val(4),val(5))
Response.Write resultadoGrid

if RS.EOF then
%>
<%
else
RS.absolutepage = pagina
if RS.EOF then
%>
<%
fim = 1
end if
xx = 0
While NOT RS.EOF AND xx < RS.pagesize
xx = xx + 1%>
<%=RS("p_refe")%>
<%
RS.MoveNext
Wend
end if

if fim = "" then

anterior = pagina - 1
proxima = pagina + 1

if anterior <> 0 then
%>
<a href="<%=request.servervariables("script_name")%>?p=<%=anterior%>">Anterior</a> -
<%
end if

%>
<a href="<%=request.servervariables("script_name")%>?p=<%=proxima%>">Próxima</a>
<%

end if

RS.Close
con_db.Close
%>

Editado por (!_Odisséa_!)
Link para o comentário
Compartilhar em outros sites

  • 0

Veja se isso resolve:

Mude de:

For x = 0 to 6
    val(x) = rs("p_refe")
Next
Para:
For x = 0 to 6

     'SAI DO LOOP SE JÁ TIVER CHEGADO AO FIM DO NÚMERO DE REGISTROS
     if rs.EOF then exit for
    
    val(x) = rs("p_refe")

     'MOVE PARA O PROXIMO REGISTRO DO RESULT SET
     rs.MoveNext
Next

Testa aí e diz o resultado

Link para o comentário
Compartilhar em outros sites

  • 0

Fala cara. Então funcionou perfeitamente....

Mas eu acho que mexi em alguma coisa que estragou o código da paginação. Ele não para de aparecer o botão "próximo" e não tem fim.....

vou colocar o códigoaqui, pois acho que tem algo errado.

Muito obrigado, pela ajuda.

<!--#INCLUDE virtual="acessa.asp"-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>
<style type="text/css">
<!--
-->
</style>
</head>

<body>
<%
Function getGridColunas(Celula1,Celula2,Celula3,Celula4,Celula5,Celula6)

    Dim temp
    temp = "<table cellpadding='2' cellspacing='2' border='1'>"
    temp = temp & "<tr>"
    temp = temp & "<td>"
    temp = temp & Celula1
    temp = temp & "</td>"
    temp = temp & "<td>"
    temp = temp & Celula2
    temp = temp & "</td>"
    temp = temp & "</tr>"
    temp = temp & "<tr>"
    temp = temp & "<td>"
    temp = temp & Celula3
    temp = temp & "</td>"
    temp = temp & "<td>"
    temp = temp & Celula4
    temp = temp & "</td>"
    temp = temp & "</tr>"
    temp = temp & "<tr>"
    temp = temp & "<td>"
    temp = temp & Celula5
    temp = temp & "</td>"
    temp = temp & "<td>"
    temp = temp & Celula6
    temp = temp & "</td>"
    temp = temp & "</tr>"
    temp = temp & "</table>"
            
    getGridColunas = temp
    
End Function

pagina = Request.QueryString("p")
if pagina = "" then
pagina = 1
end if
'Seta a variavel pagina como a página em questão na paginação

registros = 6
'Seta o número de registros por pagina

set RS = Server.Createobject("AdoDB.RecordSet")
set RS.ActiveConnection = con_db
RS.cursortype = 3
RS.pagesize = registros

StrSQL = "SELECT DISTINCT p_refe, p_cate, p_clas FROM produto WHERE p_clas = 1 AND p_cate = 1"
RS.Open StrSQL, con_db

    rs.AbsolutePage = pagina
    rs.PageSize = 6

Dim val(6)
For x = 0 to 6

     'SAI DO LOOP SE JÁ TIVER CHEGADO AO FIM DO NÚMERO DE REGISTROS
     if rs.EOF then exit for
    
    val(x) = rs("p_refe")

     'MOVE PARA O PROXIMO REGISTRO DO RESULT SET
     rs.MoveNext
Next

resultadoGrid = getGridColunas(val(0),val(1),val(2),val(3),val(4),val(5))

Response.Write resultadoGrid

if RS.EOF then
%>
<%
else
rs.absolutepage = pagina
if RS.EOF then
%>
<%
fim = 1
end if
xx = 0
While NOT RS.EOF AND xx < RS.pagesize
xx = xx + 1%>
<%'=RS("p_refe")&"<br>"%>
<%
RS.MoveNext
Wend
end if

if fim = "" then

anterior = pagina - 1
proxima = pagina + 1

if anterior <> 0 then
%>
<a href="<%=request.servervariables("script_name")%>?p=<%=anterior%>">Anterior</a> -
<%
end if

%>
<a href="<%=request.servervariables("script_name")%>?p=<%=proxima%>">Próxima</a>
<%

end if

RS.Close
con_db.Close
%>
</body>
</html>

Link para o comentário
Compartilhar em outros sites

  • 0

E ai cara, desculpe a demora.

Bom o HTML gerado é esse:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>
<style type="text/css">
<!--
-->
</style>
</head>

<body>
<table cellpadding='0' cellspacing='0' border='0'><tr><td width='110' height='105' align=left bgcolor='#FF0000'><img src=img_base/19002.jpg width='105' height='105'></td><td width='105' height='105' align=left bgcolor='#FF0000'><img src=img_base/ width='105' height='105'></td></tr><tr><td width='110' height='105' align=left bgcolor='#FF0000'><img src=img_base/ width='105' height='105'></td><td width='105' height='105' align=left bgcolor='#FF0000'><img src=img_base/ width='105' height='105'></td></tr><tr><td width='110' height='105' align=left bgcolor='#FF0000'><img src=img_base/ width='105' height='105'></td><td width='105' height='105' align=left bgcolor='#FF0000'><img src=img_base/ width='105' height='105'></td></tr></table>
<a href="/teste_sapato2.asp?p=3">Anterior</a> -

<a href="/teste_sapato2.asp?p=5">Próxima</a>

</body>
</html>

Valeu.

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
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...