O que é exibição de paginação quando o ADO acessa bancos de dados? Se você usou o programa de quadro de avisos eletrônicos em muitos sites, deve saber que, para melhorar a velocidade de leitura da página, o programa de quadro de avisos eletrônicos geralmente não liste todas as postagens em uma página, mas é dividido em múltiplos Páginas a serem exibidas, e cada página exibe um certo número de postagens, como 20. Quer saber como implementar a exibição de paginação? Por favor, leia este artigo!
O artigo "Dezoito artes marciais de design dinâmico de sites-ASP" passou a maior parte do ano com os amigos desde a primeira edição. e praticar. Das cartas que recebi de meus amigos, podemos sentir claramente que as habilidades de ASP de todos estão constantemente melhorando. Recentemente, muitos amigos me escreveram e esperam que eu possa escrever alguns exemplos de ASP no uso da vida real. Portanto, a partir desse problema, decidi mudar o posicionamento de "dezoito artes marciais da edição de design dinâmico de sites", da introdução e aprendizado do conhecimento básico da ASP para discutir e aprofundar a operação real do ASP. A pedido dos meus amigos, nesta edição, vou me concentrar em como exibir a paginação do banco de dados ADO ao acessá -la.
O que é exibição de paginação quando o ADO acessa bancos de dados? Se você usou o programa de quadro de avisos eletrônicos em muitos sites, deve saber que, para melhorar a velocidade de leitura da página, o programa de quadro de avisos eletrônicos geralmente não liste todas as postagens em uma página, mas é dividido em múltiplos Páginas a serem exibidas, e cada página exibe um certo número de postagens, como 20. Esta é a exibição de paginação de consultas de banco de dados.
Então, como podemos pagar os resultados da consulta do banco de dados? Na verdade, existem muitas maneiras, mas existem duas maneiras principais:
1. Leia todos os registros no banco de dados que atendem às condições de consulta no RecordSet de uma só vez e armazene -os na memória. (Número da página) e AbsolutePage (página absoluta) para gerenciar o processamento de paginação.
2. De acordo com as instruções do cliente, o número especificado de registros deve ser lido e exibido a partir dos registros que atendem às condições de consulta a cada vez.
A principal diferença entre os dois é que o primeiro lê todos os registros na memória ao mesmo tempo e depois faz julgamentos e análises em sequência de acordo com as instruções para alcançar o efeito da exibição da paginação, enquanto o último faz julgamentos com base nas instruções e define o Número especificado para atender às condições de consulta.
Podemos achar claramente que quando o número de registros no banco de dados atingir dezenas de milhares ou mais, a eficiência da execução do primeiro método será significativamente menor que a do segundo método, porque quando todo cliente consultar a página, todos os resultados devem ser transferido. No entanto, quando o número de registros no banco de dados no servidor e o número de pessoas on -line ao mesmo tempo não são grandes, a eficiência da execução dos dois é quase a mesma. O programa ASP do primeiro método é relativamente escrito, o segundo método é muito mais simples e claro.
Aqui, o autor tomará nosso programa Common ASPBBS como exemplo para analisar como implementar a função de exibição de paginação no programa BBS. Muitos.
A exibição da paginação quando o ADO acessa o banco de dados é realmente para operar os registros do RecordSet. Portanto, devemos primeiro entender as propriedades e métodos do objeto Reordset:
Atributo BOF: o indicador atual refere -se à primeira transação para o registro.
Atributo EOF: O indicador atual refere -se à última transação para o registro.
Método de movimentação: mova métricas para um registro no registro.
Propriedade AbsolutePage: Define o local atual do registro em que a página está localizada.
Propriedade do PageCount: exibe quantas páginas de dados um objeto RecordSet contém.
Pagesize Propriedade: Exibe o número de registros exibidos em cada página do objeto RecordSet.
Propriedade do RecordCount: exibe o número total de registros do objeto RecordSet.
Vamos dar uma olhada nesses atributos e métodos importantes
1. BOF e EOF Atributos
Geralmente, escrevemos o código em um programa ASP para verificar os atributos BOF e EOF para saber a localização do conjunto de registros que o indicador aponta. é o escopo do objeto RecordSet foi excedido.
Por exemplo: < %se não Rs.eof então ... %>
< % se não (Rs.BOF e Rs.eof) %>
Se o local do registro atual estiver em um objeto RecordSet
Quando a primeira linha é registrada, o atributo BOF retorna true, caso contrário, falsa.
Se a posição de registro atual estiver após a última linha de um objeto RecordSet, a propriedade EOF retornará true, caso contrário, ele retornará falsa.
BOF e EOF são falsos: significa que o indicador está localizado no conjunto de registros.
O BOF é verdadeiro: o indicador atual refere -se ao primeiro registro ao registro. O EOF é verdadeiro: o indicador atual refere -se ao último registro ao registro.
BOF e EOF são verdadeiros: não há registro no registro.
2. Método de movimentação
Você pode usar o método de movimentação para mover métricas para um registro no registro, com a sintaxe da seguinte maneira:
rs.move numRecords, start
Aqui, é uma variável de objeto, indicando um objeto RecordSet que deseja se mover quando a posição de registro atual; a tag de partida.
Todos os objetos registrados suportam o método de movimentação. Método, o erro será gerado.
Método Movefirst: Mova a posição de registro atual para o primeiro registro.
Método MoveLast: Mova a posição de registro atual para o último registro.
Método Movenext: Mova a posição de registro atual para o próximo registro. MOVILHO MOVEPEIRIO: Mova a posição de registro atual para o registro anterior.
MOVE [N] Método: Mova o índice para o enésimo registro da caneta, n começa em 0.
3. Atributos AbsolutePage
A propriedade AbsolutePage define o número da página de páginas em que página está localizada; Pagesize registros). Deve -se notar aqui que nem todos os provedores de dados suportam essa propriedade; portanto, tenha cuidado ao usá -lo.
O mesmo que a propriedade AbsolutePosition, a propriedade AbsolutePage começa com 1. Se o registro atual for a primeira linha do registro, o AbsolutePage será 1. A propriedade AbsolutePage pode ser definida para passar para a primeira posição de registro da linha de uma página especificada.
4. Propriedade da Absosidade Absos
Se você precisar determinar a localização atual da métrica no registro, poderá usar a propriedade AbsolutePosition.
O valor da propriedade AbsolutePosition é a posição do indicador atual em relação à primeira transação, que começa em 1, ou seja, a absoluta deposição da primeira transação é 1.
Observe que, ao acessar os registros, não há garantia de que os registros apareçam na mesma ordem todas as vezes.
Para ativar a absoluta, você deve primeiro configurá -lo para usar o cursor do usuário (ponteiro), e o código ASP é o seguinte:
rs2.cursorlocation = 3
5. Propriedade de PageCount
Use a propriedade PageCount para determinar quantas páginas de dados um objeto RecordSet contém. A página aqui é uma coleção de registros de dados e seu tamanho é igual à configuração da propriedade PageSize. . Deve -se notar que nem todos os provedores de dados suportam essa propriedade.
6. Pagesize Property
A propriedade PageSize é a chave para determinar quão paginatos de ADO Ao acessar bancos de dados. Define e cria um tamanho de página, permitindo que a propriedade AbsolutePage seja movida para o primeiro registro de outras páginas lógicas. A propriedade PageSize pode ser definida a qualquer momento.
7. Propriedade do registro
Esta também é uma propriedade muito comum e importante. Por exemplo: < %TOTLE = Rs.RecordCount %>
Depois de entender as propriedades e métodos acima dos objetos RecordSet, vamos considerar como usá -los para alcançar o objetivo de nossa exibição de paginação. Primeiro, podemos definir um valor para a propriedade PageSize, especificando assim o número de linhas que constituem uma página retirada do grupo de registros; Para obter o número total da página exibida; Parece muito complicado.
Criamos um aplicativo BBS tão simples, que possui os cinco campos em seu banco de dados: ID, número automático de cada postagem; tempo de postagem. O DSN do banco de dados é BBS. Colocamos todas as etapas na exibição de Post Paging em um processo chamado Showlist () para facilitar a chamada. O procedimento é o seguinte:
'---- BBS Show Post Paging ---
< %Sublist () %>
< %
Pgsz = 20 'Set switch, especifique o número de postagens exibidas em cada página, o padrão é de 20 postagens por página
Definir Conn = Server.CreateObject (Adodb.Connection)
Set rs = server.createObject (adodb.recordset)
SQL = Selecione* FROM ORDEM DE MENSAGEM POR ID DESC
'Consulte todas as postagens e organize -as em ordem inversa por pós -identificação
Conn.Open bbs
Rs.opensql, Conn, 1,1
Se rs.RecordCount = 0 então
Response.write <p> <Center> Desculpe, não há informações relevantes no banco de dados! < /central> </p>
outro
Rs.pagesize = cint (pgsz) 'Defina o valor da propriedade PageSize
Total = int (rs.recordCount / pgsz * -1) * -1 'Calcule o número total de páginas que podem ser exibidas
Pageno = solicitação (pageno)
se pageno = então
Pageno = 1
outro
Pageno = pageno+1
Pageno = Pageno-1
final se
Scrollaction = Solicitação (rolagem)
Se Scrollaction = página anterior, então
Pageno = Pageno-1
final se
Se Scrollaction = Próxima página então
Pageno = pageno+1
final se
Se pageno <1 então
Pageno = 1
final se
n = 1
Rs.absolutePage = pageno
Response.Write <Center>
posição = rs.pagesize*pageno
PageBegin = POSITION-RS.PAGESIZE+1
Se posição <rs.RecordCount então
pagend = posição
outro
pagend = Rs.RecordCount
final se
Response.write <p> <font color = 'Navy'> <b> Consulta de banco de dados: </b>
Response.write (há um total de & rs.recordCount e informações que atendem às condições, exibição e pagebegin &-& pagend &) </font> </p>
Response.write <tabela largura = 600 borda = 1 celularpadding = 4 cellspacing = 0 bgcolor =#ffffff>
Response.write <tr bgcolor =#5fb5e2> <font size = 2> <td> <b> tema </b> </td> <td> <b> usuário </b> </td> <td> <td> <td> <b> user </b> </td> <td> B> Email </b> </td> <td> <b> data publicada </b> </td> </font> <tr bgcolor =#ffffff>
Faça enquanto não (RS não é nada)
RowCount = Rs.Pagesize
Faça, embora não seja rs.eof e rowcount> 0
Se n = 1 então
Response.write <tr bgcolor =#ffffff>
OUTRO
Response.write <tr bgcolor =#eeeee>
Final se
n = 1-n %>
<Td> <span style = font-size: 9pt> <a href = 'View.asp? Key = < % = rs (id) %>'> < % = rs (sujeito) %> < /a> span> </td>
<Td> <span style = font-size: 9pt> < % = rs (nome) %> < /a> < /span> < /td>
<Td> <span style = font-size: 9pt> <a href = Mailto: < % = rs (email) % >> < % = rs (email) %> < /a> </span> </td>
<Td> <span style = font-size: 9pt> < % = rs (pós-date) %> </span> </td>
</tr>
< %
RowCount = RowCount - 1
Rs.movenext
Laço
Definir rs = rs.nextrecordset
Laço
Conn.Close
Definir rs = nada
defina conn = nada
%>
< /Tabela>
<Form Method = getAction = list.asp>
<Tipo de entrada = Nome oculto = Pageno Value = < % = Pageno % >>
< %
Se Pageno> 1 então
Response.write <type de entrada = envio nome = 'scrollaction' value = 'página anterior'>
final se
Se RowCount = 0 e Pageno <> Total então
Response.Write <Tipo de entrada = Nome de envio = 'Scrollaction' Value = 'Próxima página'>
final se
Response.write </morm>
Final se
%>
< % Final sub %>
Acredito que todos devem ser capazes de entender completamente o programa acima, para que o autor não o explique em detalhes aqui. Vale a pena notar que um pequeno truque foi usado neste programa <tipo de entrada = nome oculto = pageno value = < % = pageno % >>, que é uma passagem secreta usada para passar dados toda vez que o arquivo ASP é chamado, porque nós Precisa passar os parâmetros que representam o número da página atual sempre que chamamos o programa e você pode pensar em usar a sessão, mas em termos de economia de recursos e universalidade do sistema, o uso de um formulário tão oculto para passar dados alcançará melhores resultados.
Ok, é hora de dizer adeus novamente. Se você tem alguma sugestão melhor, envie -me uma carta :)