« September 2010 »
Su Mo Tu We Th Fr Sa
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
 

Criando uma consulta paginada através de um módulo

por Aldinei Sampaio -posted at 29/05/2009 12:11 Última modificação 29/05/2009 12:11

Segue um exemplo de um módulo que efetua uma pesquisa no banco de dados e gera uma tabela HTML paginada, de forma a exibir 20 registros de cada vez.

Para a montagem da página HTML neste exemplo, utilizamos o módulo 'modHTMLHelper', cujo conteúdo pode ser obtido neste artigo.

<%
/*
=====================================
modExemploPaginacao
---
Efetua uma pesquisa e exibe os dados em uma tabela HTML paginada
---
Kankei Software e Consultoria Ltda - Todos os direitos reservados
Aldinei Sampaio - 29/mai/2009
=====================================
*/

// Define a quantidade de registros a listar por página
var pageSize = 20;

// Calcula a quantidade de páginas
Parameters('pageCount') = Math.ceil(GetCount() / pageSize);

// Verifica qual botão o usuário pressionou
var currentPage;
if (Parameters('next')) {
    // Botão 'Próxima'
    currentPage = ToLong(Parameters('currentPage'));
    currentPage++;
} else if (Parameters('previous')) {
    // Botão 'Anterior'
    currentPage = ToLong(Parameters('currentPage'));
    currentPage--;
} else if (Parameters('first')) {
    // Botão 'Primeira'
    currentPage = 1;
} else if (Parameters('last')) {
    // Botão 'Última'
    currentPage = Parameters('pageCount');
} else {
    // Nenhum botão pressionado (deve ser a primeira execução do módulo)
    currentPage = 1;
}

// Checa se a página é válida
if (currentPage > Parameters('pageCount')) {
    currentPage = Parameters('pageCount');
} else if (currentPage < 1) {
    currentPage = 1;
}
Parameters('currentPage') = currentPage;

// Obtém a lista de registros, caso exista algum
var rs;
if (Parameters('pageCount') > 0) {
    rs = GetList();
}

// Pesquisa para obter a lista de registros
function GetList() {
    var p = K.BD.NovaPesquisa();

    // Incluir aqui filtros para a pesquisa (as pesquisas de
    // GetList() e GetCount() devem ter os mesmos filtros)
    
    p.Listar('NomeFantasia');
    
    p.OrdenarPor('NomeFantasia');
    
    // As duas linhas abaixo são responsáveis por limitar
    // o número de registros da pesquisa
    p.ExecuçãoOpções.PageNumber = Parameters('currentPage');
    p.ExecuçãoOpções.PageSize = pageSize;
    
    return p.Executar();
}

// Pesquisa para obter a quantidade total de registros
function GetCount() {
    var p = K.BD.NovaPesquisa();

    // Incluir aqui filtros para a pesquisa (as pesquisas de
    // GetList() e GetCount() devem ter os mesmos filtros)

    p.Listar().Contagem();
    return p.Executar().Contagem();
}

%>
<% if (rs) { /* Registros foram encontrados */ %>
    <% eval(K.BD.GetScriptObject('modHTMLHelper').Text); %>
    <html>
        <body>
            <%=html.OpenForm()%>
                <table>
                <% while (!rs.EOF) { /* Percorre os registros */ %>
                    <tr>
                        <td>
                            <%=rs.Ler().Texto('NomeFantasia')%>
                        </td>
                    </tr>
                <% rs.MoveNext(); } %>
                </table>
                <div>
                    <%=html.Button('first',
                                   '<< Primeira',
                                   Parameters('currentPage') > 1 ? {} : {disabled:'disabled'} )%>
                    <%=html.Button('previous',
                                   '< Anterior',
                                   Parameters('currentPage') > 1 ? {} : {disabled:'disabled'} )%>
                    
                    Página: <%=Parameters('currentPage')%> / <%=Parameters('pageCount')%>
                    
                    <%=html.Button('next',
                                   'Próxima >',
                                   Parameters('currentPage') < Parameters('pageCount') ? {} : {disabled:'disabled'} )%>
                    <%=html.Button('last',
                                   'Última >>',
                                   Parameters('currentPage') < Parameters('pageCount') ? {} : {disabled:'disabled'} )%>
                    
                    <%=html.HiddenField('currentPage')%>
                </div>
            <%=html.CloseForm()%>
        </body>
    </html>
<% } else { /* Nenhum registro encontrado */ %>
    <% eval(K.BD.GetScriptObject('modHTMLHelper').Text); %>
    <html>
        <body>
            <%=html.OpenForm()%>
                <div>
                    Nenhum registro encontrado
                </div>
                <div>
                    <%=html.Button('Tentar Novamente')%>
                </div>
            <%=html.CloseForm()%>
        </body>
    </html>
<% } %>

Segue abaixo imagem com o resultado da execução deste módulo:

exemplopaginacao.jpg

 

 

Category(s)
KANKEI KANKEI