No sistema de programação ASP da Microsoft, o estabelecimento de objetos ADO facilita o acesso a bancos de dados a partir de páginas da web. Em particular, o objeto Recordset do ADO torna mais conveniente e livre o controle da saída e exibição de dados. No Visual InterDev6.0 (doravante denominado VI6.0), devido à introdução de modelos de objetos, como Script Object Model (doravante denominado SOM), Design-Time Control (doravante denominado DTC) e Data Environment Object Modelo (doravante denominado DEOM), Isso torna o design do acesso da página da web ao banco de dados mais conveniente.
Devido ao assunto, em relação à conexão com o banco de dados, apenas o código e breves comentários são fornecidos a seguir, e o foco está em como utilizar o objeto (ou controle) Recordset para realizar a exibição de paginação dos registros de dados. De acordo com meu entendimento, a chave para a exibição da paginação está na proficiência nas propriedades e métodos do objeto Recordset do ADO ou no controle Recordset do DTC (controle de tempo de design).
Esses sete tipos de armas exibidos nas páginas podem ser resumidos em quatro categorias:
Chamo temporariamente o primeiro e o segundo métodos de método ASP puro, que também é o método mais comumente usado em sites ASP domésticos. A diferença entre eles está apenas nas técnicas de implementação. A implementação desses dois métodos é a mais fácil de entender, usa menos conceitos de objeto e tem os requisitos mais baixos para o ambiente de desenvolvimento (apenas o Bloco de Notas serve). Pode-se dizer que a essência desses dois métodos ainda é a ideia de programação CGI, mas o objeto ADO é introduzido no programa.
O quarto e o quinto métodos DHTML são temporariamente denominados SOM. Estes dois métodos requerem a utilização do Modelo de Objectos Script proposto pela Microsoft e as novas funcionalidades de ligação à base de dados do objecto Tabela em DHTML no ambiente VI6.0 (muitos livros e artigos apenas introduzem as funcionalidades CSS do DHTML Éusado com estilo design e ignora a introdução de seus recursos de vinculação de dados) para controlar a virada de página no lado do cliente. Mas exige que o navegador do usuário suporte DHTML, como Microsoft Internet Explorer 4.0 e superior.
O sexto método é temporariamente denominado método do lado do servidor SOM. É necessário ser desenvolvido no ambiente VI6.0. Utiliza diversos controles DTC no Script Object Model proposto pela Microsoft: Recordset, PageObject, Grid, etc. Este é um método de programação novo e interessante que trata páginas da web como objetos (este modelo de objeto é diferente do modelo tradicional de objeto de documento DOM: o DOM só pode controlar o cliente, enquanto o SOM pode controlar o servidor e o cliente), ele realmente realiza o objeto- programação orientada de páginas web. Mas infelizmente, talvez por causa da minha capacidade pessoal limitada, pessoalmente acho que esta tecnologia ainda não está muito madura. Por exemplo, a integração com o navegador não é muito boa, o que será explicado em detalhes mais tarde.
O sétimo método é temporariamente denominado método DEOM. Ele também usa o Data Environment Object Model estabelecido no VI6.0 para criar objetos Recordset. Este também é um método relativamente novo em programação web. Comparado ao modelo SOM, possui vantagens próprias, que serão detalhadas posteriormente.
Todos os códigos-fonte de exemplo citados abaixo podem ser copiados e usados diretamente. Você nem precisa entender os princípios. Basta substituir as partes em negrito e itálico pelos nomes de banco de dados ou nomes de campo correspondentes.
Antes de começar a apresentar vários métodos de paginação em detalhes, vamos primeiro criar um banco de dados: use o acesso no Office97 para criar um Employee.mdb, crie uma tabela emp nele e defina apenas três campos: emp ID, sobrenome e nome. O motivo de ser tão simples é porque nos preocupamos em como processar os resultados do conjunto de registros.
O primeiro método: método de substituição direta de parâmetros
Este método consiste em criar manualmente um objeto Recordset e usar suas propriedades pagesize (número especificado de registros exibidos por página), pagecount (número total de páginas) e absolutopage (número de página atual) para controlar a saída de paginação. A paginação usa <href> para usar diretamente o parâmetro do número da página para controlar a virada da página. O nome da página da web é emp1.asp. O código fonte é o seguinte:
<%//Estabeleça uma conexão com o banco de dados Employee.mdb.
Definir conexão = Server.CreateObject(ADODB.Connection)
conn.Open driver={Driver do Microsoft Access (*.mdb)};dbq=employee.mdb
//Cria a instância do objeto Recordset rs da tabela emp.
Definir rs = Server.CreateObject(ADODB.Recordset)
rs.Abrir emp, conn, 3
PageSize = 10 //O atributo pagesize especifica o número de registros a serem exibidos em cada página
Page = CLng(Request(Page)) 'Converte o tipo string em tipo longo
Se página <1 então página = 1
Se Página > rs.PageCount Então Página = rs.PageCount
Se Página <> 1 Então
Response.Write <A HREF=emp1.asp?Page=1>Primeira página</A>
Response.Write <A HREF=emp1.asp?Page= & (Página-1) & >Página anterior</A>
Terminar se
Se Página <> rs.PageCount Então
Response.Write <A HREF=emp1.asp?Page= & (Página+1) & >Próxima página </A>
Response.Write <A HREF=emp1.asp?Page=&rs.PageCount & >Última página</A>
Terminar se
Número da página Response.write: & Page & / & rs.PageCount & </font>
//Exibição de cada página
//exibe o cabeçalho
Response.Write <CENTER><TABLE BORDER=1>
Response.WRITE <TR><TD> & rs.Fields(emp ID).Nome & </TD>
Response.WRITE <TD> & rs.Fields(sobrenome).Nome & </TD>
Response.WRITE <TD> & rs.Fields(primeiro nome).Nome & </TD></TR>
//Loop para exibir cada registro
rs.AbsolutePage = Page //Atribuir o número da página ao atributo absolutopage para saber o primeiro número de registro da página atual
Para iPage = 1 Para rs.PageSize //
Response.WRITE <TR><TD> & rs.Fields(emp ID).Value & </TD>
Response.WRITE <TD> & rs.Fields(nome).Valor & </TD>
Response.WRITE <TD> & rs.Fields(sobrenome).Valor & </TD></TR>
rs.MoveNext
Se rs.EOF, então saia para
Próximo
Resposta.Write </TABLE></CENTER>%>
O segundo tipo: método de parâmetro de transmissão de formulário
Este método é igual ao primeiro método ao criar um objeto Recordset, exceto que, ao controlar a virada de página, <input> e a instrução case são usadas para realizar a virada de página. O nome da página da web é: emp2.asp. Este método tem uma falha na lógica de programação: após pressionar o botão da página anterior ou da próxima página e, em seguida, pressionar o botão atualizar no navegador, a página mudará automaticamente. O código fonte é o seguinte:
if Pagenum = Then Pagenum = 1 //Começa a exibir a partir da primeira página
//Estabelece uma conexão com o banco de dados e a instância do objeto Recordset rs.
Igual ao primeiro método, ignorado aqui.
RS.Pagesize = 10 'Define o número de registros exibidos em uma página como 10
// Determina a ação de virar a página
Selecione Solicitação de Caso (NAV)
Caso
sessão (Pagenum) = 1
case Primeiro 'Primeiro Registro
sessão (Pagenum) = 1
case Anterior ' Registro Anterior
se sessão (Pagenum) > 1 então
sessão(Pagenum) = sessão(Pagenum) - 1
Terminar se
case Próximo 'Próximo registro
se sessão(Pagenum)<RS.PageCount então
sessão(Pagenum) = sessão(Pagenum) + 1
Terminar se
case Último ' Último Registro
sessão (Pagenum) = RS.PageCount
Finalizar seleção
RS.Absolutepage = Clng(session(Pagenum)) //Determina o primeiro número de registro da página atual
//Mostra a página atual
Igual ao primeiro método, ignorado aqui.
//Configurações do botão da página de navegação
<método de formulário=GET action=emp2.asp>
<tipo de entrada=nome de envio=Valor NAV=Página inicial>
<tipo de entrada=valor de envio=nome da página anterior=NAV>
<tipo de entrada=valor de envio=nome da próxima página=NAV>
<tipo de entrada=valor de envio=nome da última página=NAV></formulário>
O terceiro tipo: Use o controle Grid para projetar a paginação
De todos os métodos, este é o mais fácil. Você só precisa arrastar o controle Recordset e o controle Grid no DTC para a página da Web asp. Além disso, você também pode escolher se deseja controlar a virada de página na plataforma do servidor ou na plataforma do cliente. A desvantagem é que você deve exibi-la no formato fornecido por ela e não pode controlar livremente o formato de exibição da tabela por conta própria.
Veja como:
Crie um projeto emp.vip no VI6.0. Em seguida, adicione uma página da web asp ao projeto: emp3.asp.
Passo 1: Selecione adicionar conexão de dados... na barra de menu do VI6.0 e siga as instruções de navegação da ferramenta de desenvolvimento. Você pode estabelecer facilmente uma conexão com o banco de dados Employee.mdb. Arraste um controle Recordset da barra de ferramentas do DTC para a página da Web e defina suas propriedades. Conforme mostrado na figura:
Ao arrastar o controle para a página da web, o VI6.0 solicitará automaticamente se você deve usar o modelo de objeto Scripting, pressione sim.
Etapa 3: Arraste um controle Grid da barra de ferramentas DTC para a página da web, clique com o botão direito do mouse e defina suas propriedades, como: selecione o nome do controle Recordset criado na segunda etapa, selecione os campos na tabela emp , cada página Quantos registros são exibidos e o formato de exibição, etc. É muito simples e prático, basta seguir as instruções de navegação.
O quarto método: método DHTML um.
Os registros de dados são exibidos em uma tabela HTML. Ele usa os recursos de vinculação de dados de tabelas em DHTML para controlar a exibição de paginação de registros. A desvantagem é que o seu método de virar a página será limitado a uma maneira específica: apenas as páginas anteriores e seguintes, mas não a primeira e a última páginas. Como a virada de página é controlada no lado do cliente, este e o quinto método são os mais rápidos, mas infelizmente só podem ser usados em navegadores que suportam DHTML.
Em DHTML, o atributo DATASRC de <TABLE> permite que a tabela seja vinculada a uma fonte de dados, e outro atributo, DATAPAGESIZE, especifica o número de registros exibidos em uma página por vez.
Vejamos o seguinte exemplo:
Etapa 1: Arraste o controle Recordset para a página da web recém-criada emp4.htm e defina suas propriedades. O método é igual ao terceiro método, que é omitido aqui.
Passo 2: Insira o seguinte código:
<TABLE ID=Table1 DATASRC=#Recordset1_RDS DATAPAGESIZE=5> //Suponha que o controle Recordset foi nomeado Recordset1 anteriormente. Exibir 5 registros por página.
<A CABEÇA>
<TH ALIGN=left WIDTH=150>Emp ID</TH> //Cabeçalho de saída
<TH ALIGN=left WIDTH=200>Sobrenome</TH>
<TH ALIGN=left WIDTH=200>Nome</TH>
</TEA>
<TR>
<TD><DIV DATAFLD=Emp ID></DIV></TD> //Saída do conteúdo da tabela
<TD><DIV DATAFLD=Sobrenome></DIV></TD>
<TD><DIV DATAFLD=Nome></DIV></TD>
</TR>
</TABELA>
Etapa 3: em seguida, adicione um par de controles de botão DTCs para navegação de página, um denominado btnPrevious (página anterior) e outro denominado btnNext (próxima página). Seus scripts correspondentes são os seguintes:
<LINGUAGEM DO SCRIPT=VBScript>
Função btnPrevious_onclick()
Tabela1.página anterior()
Função final
Função btnNext_onclick()
Tabela1.nextPage()
Função final
</SCRIPT>
O quinto método: método DHTML dois
Este método é um refinamento do quarto método. Usando o método de escrita manual de scripts, podemos criar os botões de navegação da página inicial e da última página e determinar a posição (número do registro) de cada registro. Devido a restrições de espaço, apresentarei apenas um exemplo específico abaixo e darei uma breve explicação. Para outras propriedades e métodos sobre controles DHTML e Recordset, consulte os livros relevantes. O que precisa ser observado aqui é que o controle Recordset é um pouco diferente do objeto ADO Recordset introduzido no primeiro e no segundo métodos: o controle Recordset não fornece diretamente propriedades como tamanho de página e contagem de páginas e precisa ser calculado usando o método descrito abaixo.
Etapa 1: Arraste o controle Recordset para a página da web recém-criada emp5.htm, nomeie-a como Recordset1 e defina suas propriedades. O método é igual ao terceiro método, que é omitido aqui.
Etapa 2: Defina três variáveis globais e escreva o script ondatasetcomplete (a configuração dos dados está concluída) do Recordset1.
Dim gCurrentPageNumber //Número da página atual
Dim gMaxPageNumber //Número máximo de páginas
Dim gRecordsPerPage //Exibe o número de registros por página
gRecordsPerPage = 5 //Defina o número de registros exibidos por página para 5 registros.
Função Recordset1_ondatasetcomplete()
totalRecordCount = Recordset1.getCount() //Número total de registros
gMaxPageNumber = Int(totalRecordCount / gRecordsPerPage) //Obtém o número máximo de páginas
Se (totalRecordCount Mod gRecordsPerPage) > 0 então
gMaxPageNumber = gMaxPageNumber + 1
Terminar se
Função final
Etapa 3: crie botões de navegação de página.
Função btnFirst_onclick() 'Vira para a página inicial
gCurrentPageNumber = 1
ExibirDados()
Função final
Função btnPrevious_onclick() 'Vá para a página anterior
se gCurrentPageNumber > 1 Então
gCurrentPageNumber = gCurrentPageNumber - 1
ExibirDados()
Terminar se
Função final
Função btnNext_onclick() 'Vá para a próxima página
se gCurrentPageNumber < gMaxPageNumber Então
gCurrentPageNumber = gCurrentPageNumber + 1
ExibirDados()
Terminar se
Função final
Função btnLast_onclick() 'Vai para a última página
gCurrentPageNumber = gMaxPageNumber
ExibirDados()
Função final
Etapa 4: escreva uma função para exibir cada página. Muitos atributos e métodos DHTML são usados. Os leitores são aconselhados a consultar livros relevantes.
SubDisplayData()
startRecord = ((gCurrentPageNumber - 1) * gRecordsPerPage) + 1 //Calcula o número de registros (posição, número) exibidos no início de cada página
linhaCtr = 1
lblPageNumber.innerHTML = gCurrentPageNumber & / & gMaxPageNumber
For recordPtr = startRecord To (startRecord + gRecordsPerPage - 1) //Loop para exibir cada registro de uma página
If recordPtr > Recordset1.getCount() Then //Exibir tabela vazia
Tabela1.rows(rowCtr).cells(0).innerHTML = <P> </P>
Tabela1.rows(rowCtr).cells(1).innerHTML = <P> </P>
Tabela1.rows(rowCtr).cells(2).innerHTML = <P> </P>
Tabela1.rows(rowCtr).cells(3).innerHTML = <P> </P>
Else //Mostra cada página especificamente
Recordset1.moveAbsolute(recordPtr) //Move o ponteiro do registro.
empID = Recordset1.fields.getValue (ID do emp)
empLName = Recordset1.fields.getValue(nome)
empFName = Recordset1.fields.getValue(sobrenome)
Table1.rows(rowCtr).cells(0).innerText = recordPtr ' Contador
Tabela1.rows(rowCtr).cells(1).innerText = empID
Tabela1.rows(rowCtr).cells(2).innerText = empLName
Tabela1.rows(rowCtr).cells(3).innerText = empFName
Terminar se
linhaCtr = linhaCtr + 1
Próximo
Finalizar sub
Além disso, também precisamos escrever o seguinte script no evento onload do objeto window:
Para rowCtr = 1 para gRecordsPerPage
Table1.insertRow(rowCtr) 'Inserir uma nova coluna
Para célulaCtr = 0 a 3
Tabela1.rows(rowCtr).insertCell()
Próximo
Próximo
Sexto método: método de giro de página de controle do lado do servidor.
Se paginarmos os dados no lado do servidor para formar uma instrução HTML e depois enviá-los para o cliente, não haverá problema de o navegador não suportar DHTML. No entanto, usar o método do lado do servidor exige que geremos novamente o controle Recordset toda vez que viramos a página, portanto a velocidade é definitivamente mais lenta do que usar o método DHTML. Mas se o servidor for rápido o suficiente, esse cliente lento não notará isso.
No exemplo a seguir, apresentarei um novo controle DTC: PageObject. Este controle faz com que a página da web especificada se torne um objeto de página da web, e as sub-rotinas e funções organizadas pelo usuário no script do servidor desta página da web podem ser consideradas como os métodos do objeto da página da web. Ele fornece um método avançado de gerenciamento de informações de estado: os objetos da página da web possuem algumas propriedades (variáveis) e os usuários podem definir o tempo de vida dessas propriedades. Devido às características acima, é muito conveniente para nós compilar scripts de virada de página.
Mas a desvantagem desse método é: depois de pressionar o botão da página anterior ou da próxima página e, em seguida, pressionar o botão Atualizar no navegador, a página da web mudará automaticamente. Além disso, se você pressionar o botão Voltar do navegador e, em seguida, pressionar o botão de virar a página, poderá ocorrer uma página aleatória. Tudo isso é causado pelas propriedades do objeto da página web (variáveis globais).
Etapa 1: Arraste o controle Recordset para a página da web recém-criada emp6.asp, nomeie-a como Recordset1 e defina suas propriedades. O método é igual ao terceiro método, que é omitido aqui.
Etapa 2: arraste o controle PageObject para a página da web e nomeie-o como emplist. Em seguida, clique com o botão direito neste controle para abrir a página de propriedades e definir as três propriedades (variáveis globais) de MaxPageNumber, RecordsPerPage e CurrentPageNumber. VI6.0 pode usar os métodos get e set para ler e escrever seus valores. Consulte as informações relevantes para uso específico.
Etapa 3: Escreva o evento ondatasetcomplete do Recordset1.
Função Recordset1_ondatasetcomplete()
registrosPorPágina = 5
empList.setRecordsPerPage(recordsPerPage)//Defina o número de registros por atributo de página do objeto de página da web como 5
totalRecordCount = Recordset1.getCount()//Obtém o número total de registros no conjunto de registros
mpn = Int(totalRecordCount / recordsPerPage) //Calcula mpn como o número total de páginas
Se (totalRecordCount Mod recordsPerPage) > 0 então
mpn = mpn + 1
Terminar se
empList.setMaxPageNumber(mpn)
Função final
Etapa 4: arraste quatro controles de botão para a página da web e escreva um script de controle de virada de página. Conseguimos virar a página principalmente alterando o valor da propriedade CurrentPageNumber do objeto da página da web.
Função btnFirst_onclick() 'Vira para a página inicial
empList.setCurrentPageNumber(1)
Função final
Função btnPrevious_onclick() 'Vá para a página anterior
cpn = empList.getCurrentPageNumber()
se cpn > 1 Então
empList.setCurrentPageNumber(cpn - 1)
Terminar se
Função final
Função btnNext_onclick() 'Vá para a próxima página
cpn = empList.getCurrentPageNumber()
se cpn <empList.getMaxPageNumber() então
empList.setCurrentPageNumber(cpn + 1)
Terminar se
Função final
Função btnLast_onclick() 'Vai para a última página
empList.setCurrentPageNumber(empList.getMaxPageNumber())
Função final
Para garantir que a primeira página seja exibida ao entrar na página pela primeira vez, devemos também escrever o evento onEnter do objeto da página da web.
Função empList_onEnter()
Se empList.firstEntered Então
empList.setCurrentPageNumber(1)
Terminar se
Função final
Etapa 5: escreva um script que exiba cada página.
<HR><TABLE BORDER=0><TR>//Exibir cabeçalho
<TH ALIGN=esquerda LARGURA=35></TH>
<TH ALIGN=left WIDTH=150>Emp ID</TH>
<TH ALIGN=left WIDTH=200>Sobrenome</TH>
<TH ALIGN=left WIDTH=200>Nome</TH></TR>
<%
pageNumber = empList.getCurrentPageNumber()//Calcula vários parâmetros necessários para virar a página, igual ao método DHTML 2
recordsPerPage = empList.getRecordsPerPage()
startRecord = ((pageNumber - 1) * recordsPerPage) + 1
últimoRecord = Recordset1.getCount()
Para recordPtr = startRecord To (startRecord + recordsPerPage - 1)%>
<%Se Recordset1.EOF = Verdadeiro Então%>
<TR>
<TD> </TD>
<TD> </TD>
<TD> </TD>
<TD> </TD>
</TR>
<%Outro%>
<%Recordset1.moveAbsolute(recordPtr)%>
<TR>
<% Se recordPtr <= lastRecord Then %>
<TD><%=recordptr%></TD>
<%Outro%>
<TD> </TD>
<%Fim se%>
<TD><%=Recordset1.fields.getValue(emp ID)%></TD>
<TD><%=Recordset1.fields.getValue(sobrenome)%></TD>
<TD><%=Recordset1.fields.getValue(nome)%></TD>
</TR>
<%Fim se%>
<%Próximo%>
</TABELA><RH>
Sétimo método: método do modelo de objeto de ambiente de dados (modelo de objeto de ambiente de dados)
O modelo de objeto Data Environment abstrai o modelo de objeto ADO e seus objetos (objetos Connection, Command, Recordset, Field e Parameter) em um formato mais simples. O Modelo de Objeto do Ambiente de Dados expõe comandos como métodos. O usuário pode chamar esses métodos, que executam os comandos e retornam o conjunto de registros resultante. Para obter informações detalhadas sobre o modelo de objeto DEOM, consulte os livros relevantes. Vejamos o exemplo da seguinte página da web emp7.asp:
Passo 1: Clique com o botão direito no projeto na janela Project Explorer do VI6.0 e selecione Add Data Connection no menu pop-up. Após estabelecer uma conexão com o banco de dados de acordo com os prompts de navegação fornecidos pelo VI, o usuário adiciona um comando data para acessar o banco de dados a partir da aplicação ASP. Ao mesmo tempo, você verá um objeto Data Environment no arquivo global.asa na janela Project Explorer.
Passo 2: Clique com o botão direito no objeto Data Environment e selecione a opção Add Data Command no menu pop-up para adicionar um comando de dados Command1. De acordo com o prompt de navegação do VI6.0, você pode selecionar SQL Statement na página Genetal da janela pop-up Command1 Properties e inserir: select * from emp. Pressione OK para retornar.
Etapa 3: depois de criar o comando de dados, você criou um método para o objeto Data Environment. Você pode então chamar esse método a partir do script e o método retornará um conjunto de registros ao usuário.
thisPage.createDE() //No modo SOM, thisPage representa o objeto da página da web atual e o método createDE() cria o objeto DE.
DE.Command1//Executa o comando do objeto DE, que pode ser seguido de parâmetros, o que é muito útil ao fazer consultas condicionais.
Definir rs=DE.rsCommand1//DE.rscommand1 torna o objeto rs completamente equivalente a um objeto ADO Recordset.
Etapa 4: como rs é um objeto ADO, o código de virada de página a seguir refere-se completamente aos vários métodos apresentados acima e é ignorado aqui.
Outros incluem métodos implementados na navegação de banco de dados do FrontPage2000, etc. Como não estão relacionados a este tópico, são omitidos aqui.
Resumindo, cada método introduzido anteriormente contém muitas tecnologias novas, que não podem ser discutidas em profundidade devido a restrições de espaço. Este artigo deseja apenas apresentar vários métodos de programação de páginas da web ASP por meio do exemplo específico de virada de página, permitindo que todos experimentem a poderosa função do VI6.0 na preparação de páginas da web, entendam e se familiarizem com ADO, como usar controles DHTML e DTC; , modelo de objeto SOM e modelo de objeto DEOM, espero que possa fornecer mais opções e referências ao compilar páginas da web;