En el sistema de programación ASP de Microsoft, el establecimiento de objetos ADO facilita el acceso a bases de datos desde páginas web. En particular, el objeto Recordset de ADO hace que sea más conveniente y gratuito controlar la salida y visualización de datos. En Visual InterDev6.0 (en lo sucesivo, VI6.0), debido a la introducción de modelos de objetos como el modelo de objetos de script (en lo sucesivo, SOM), el control de tiempo de diseño (en lo sucesivo, DTC) y el objeto de entorno de datos. Modelo (en adelante DEOM), que hace que el diseño del acceso a la base de datos de la página web sea más conveniente.
Debido al tema, con respecto a la conexión de la base de datos, a continuación solo se proporcionan el código y breves comentarios, y la atención se centra en cómo utilizar el objeto (o control) Recordset para realizar la visualización de paginación de registros de datos. Según tengo entendido, la clave para la visualización de paginación radica en el dominio de las propiedades y métodos del objeto Recordset de ADO o el control Recordset de DTC (control de tiempo de diseño).
Estos siete tipos de armas que se muestran en las páginas se pueden resumir en cuatro categorías:
Temporalmente llamo al primer y segundo método el método ASP puro, que también es el método más utilizado en los sitios web ASP nacionales. La diferencia entre ellos está solo en las técnicas de implementación. La implementación de estos dos métodos es la más fácil de entender, utiliza la menor cantidad de conceptos de objetos y tiene los requisitos más bajos para el entorno de desarrollo (solo el Bloc de notas es suficiente). Se puede decir que la esencia de estos dos métodos sigue siendo la idea de programación CGI, pero el objeto ADO se introduce en el programa.
El cuarto y quinto método DHTML se denominan temporalmente SOM. Estos dos métodos requieren el uso del modelo de objetos Script propuesto por Microsoft y las nuevas funciones de enlace de bases de datos del objeto Tabla en DHTML en el entorno VI6.0 (muchos libros y artículos solo presentan las funciones CSS de DHTML. Se usa con estilo diseño e ignora la introducción de sus funciones de enlace de datos) para controlar el cambio de página en el lado del cliente. Pero requiere que el navegador del usuario sea compatible con DHTML, como Microsoft Internet Explorer 4.0 y superior.
El sexto método se denomina temporalmente método del lado del servidor SOM. Se requiere desarrollar en el entorno VI6.0. Utiliza varios controles DTC en el modelo de objetos Script propuesto por Microsoft: Recordset, PageObject, Grid, etc. para implementar el control de paso de página en el lado del servidor (cliente). Este es un método de programación nuevo e interesante que trata las páginas web como objetos (este modelo de objetos es diferente del modelo de objetos de documento DOM tradicional: DOM solo puede controlar al cliente, mientras que SOM puede controlar el servidor y el cliente), realmente realiza la programación de objetos. Programación orientada a páginas web. Pero desafortunadamente, tal vez debido a mis capacidades personales limitadas, personalmente creo que esta tecnología aún no está muy madura. Por ejemplo, la integración con el navegador no es muy buena, como se explicará en detalle más adelante.
El séptimo método se denomina temporalmente método DEOM. También utiliza el modelo de objetos del entorno de datos establecido en VI6.0 para crear objetos Recordset. Este también es un método relativamente nuevo en programación web. En comparación con el modelo SOM, tiene sus propias ventajas, que se detallarán más adelante.
Todos los códigos fuente de ejemplo que se citan a continuación se pueden copiar y utilizar directamente. Ni siquiera es necesario comprender los principios. Simplemente reemplace las partes en negrita y cursiva con los nombres de las bases de datos o los nombres de los campos correspondientes.
Antes de comenzar a presentar varios métodos de paginación en detalle, primero creemos una base de datos: use el acceso en Office97 para crear un Employee.mdb, cree una tabla emp en él y establezca solo tres campos: ID de emp, apellido y nombre. La razón por la que es tan simple es porque nos preocupamos por cómo procesar los resultados del conjunto de registros.
El primer método: método de sustitución directa de parámetros.
Este método consiste en crear manualmente un objeto Recordset y utilizar sus propiedades de tamaño de página (número especificado de registros mostrados por página), recuento de páginas (número total de páginas) y página absoluta (número de página actual) para controlar la salida de paginación. La paginación utiliza <href> para tomar directamente el parámetro del número de página para controlar el cambio de página. El nombre de la página web es emp1.asp. El código fuente es el siguiente:
<%//Establecer una conexión con la base de datos empleado.mdb.
Establecer conexión = Server.CreateObject(ADODB.Connection)
conn.Open driver={Controlador de Microsoft Access (*.mdb)};dbq=empleado.mdb
//Crea la instancia del objeto Recordset rs de la tabla emp.
Establecer rs = Server.CreateObject(ADODB.Recordset)
rs.Abrir emp, conn, 3
PageSize = 10 //El atributo de tamaño de página especifica el número de registros que se mostrarán en cada página
Página = CLng(Solicitud(Página)) 'Convertir tipo de cadena a tipo largo
Si página < 1 entonces página = 1
Si Página> rs.PageCount Entonces Página = rs.PageCount
Si página <> 1 entonces
Respuesta.Escribir <A HREF=emp1.asp?Page=1>Primera página</A>
Response.Write <A HREF=emp1.asp?Page= & (Página-1) & >Página anterior</A>
Terminar si
Si página <> rs.PageCount Entonces
Respuesta.Escribir <A HREF=emp1.asp?Page= & (Página+1) & >Página siguiente </A>
Response.Write <A HREF=emp1.asp?Page=&rs.PageCount & >Última página</A>
Terminar si
Número de página de respuesta.escribir: & Página & / & rs.PageCount & </font>
//Visualización de cada página
//mostrar encabezado
Respuesta.Escribir <CENTRO><BORDE DE LA TABLA=1>
Respuesta.WRITE <TR><TD> & rs.Fields(emp ID).Nombre & </TD>
Respuesta.WRITE <TD> & rs.Fields(apellido).Nombre & </TD>
Response.WRITE <TD> & rs.Fields(nombre).Nombre & </TD></TR>
// Bucle para mostrar cada registro
rs.AbsolutePage = Page //Asigne el número de página al atributo de página absoluta para conocer el primer número de registro de la página actual
Para iPage = 1 a rs.PageSize //
Respuesta.WRITE <TR><TD> & rs.Fields(emp ID).Valor & </TD>
Respuesta.WRITE <TD> & rs.Fields(nombre).Valor & </TD>
Respuesta.WRITE <TD> & rs.Fields(apellido).Valor & </TD></TR>
rs.MoverSiguiente
Si rs.EOF entonces salga por
Próximo
Respuesta.Escribir </TABLA></CENTRO>%>
El segundo tipo: método de parámetro de transmisión de formulario
Este método es el mismo que el primer método al crear un objeto Recordset, excepto que cuando se controla el cambio de página, se utilizan <input> y la declaración de caso para realizar el cambio de página. El nombre de la página web es: emp2.asp. Este método tiene un defecto en la lógica de programación: después de presionar el botón de página anterior o de página siguiente, y luego presionar el botón de actualización en el navegador, la página pasará automáticamente. El código fuente es el siguiente:
if Pagenum = Then Pagenum = 1 //Comenzar a mostrar desde la primera página
//Establece una conexión a la base de datos y la instancia del objeto Recordset rs.
Igual que el primer método, omitido aquí.
RS.Pagesize = 10 'Establece el número de registros mostrados en una página en 10
// Determinar la acción de pasar página.
Seleccionar solicitud de caso (NAV)
Caso
sesión(Página) = 1
caso Primer ' Primer Registro
sesión(Página) = 1
caso Anterior ' Registro anterior
si sesión (Pagenum) > 1 entonces
sesión(Pagenum) = sesión(Pagenum) - 1
Terminar si
caso Siguiente ' Siguiente Registro
si sesión (Pagenum) <RS.PageCount entonces
sesión(Página) = sesión(Página) + 1
terminar si
caso Último ' Último registro
sesión(Pagenum) = RS.PageCount
Seleccionar fin
RS.Absolutepage = Clng(session(Pagenum)) //Determina el primer número de registro de la página actual
//Mostrar la página actual
Igual que el primer método, omitido aquí.
// Configuración del botón de la página de navegación
<método de formulario=GET acción=emp2.asp>
<tipo de entrada=nombre de envío=Valor NAV=Página de inicio>
<tipo de entrada=valor de envío=nombre de la página anterior=NAV>
<tipo de entrada=valor de envío=nombre de la página siguiente=NAV>
<tipo de entrada=valor de envío=nombre de la última página=NAV></formulario>
El tercer tipo: utilizar el control Grid para diseñar paginación.
De todos los métodos, este es el más sencillo. Solo necesita arrastrar el control Recordset y el control Grid en el DTC a la página web ASP. Además, también puede elegir si desea controlar el cambio de página en la plataforma del servidor o en la plataforma del cliente. La desventaja es que debe mostrarlo en el formato proporcionado y usted mismo no puede controlar libremente el formato de visualización de la tabla.
He aquí cómo:
Cree un proyecto emp.vip en VI6.0. Luego agregue una página web asp al proyecto: emp3.asp.
Paso 1: Seleccione agregar conexión de datos... en la barra de menú de VI6.0 y siga las indicaciones de navegación de la herramienta de desarrollo. Puede establecer fácilmente una conexión con la base de datos Employee.mdb. Arrastre un control Recordset desde la barra de herramientas DTC a la página web y establezca sus propiedades. Como se muestra en la figura:
Cuando arrastre el control a la página web, VI6.0 le preguntará automáticamente si desea utilizar el modelo de objetos de Scripting; presione sí.
Paso 3: arrastre un control Grid desde la barra de herramientas DTC a la página web, luego haga clic con el botón derecho del mouse y establezca sus propiedades, como por ejemplo: seleccione el nombre del control Recordset creado en el segundo paso, seleccione los campos en la tabla emp , cada página Cuántos registros se muestran y el formato de visualización, etc. Es muy simple y conveniente, simplemente siga las indicaciones de navegación.
El cuarto método: método uno DHTML.
Los registros de datos se muestran en una tabla HTML. Utiliza las funciones de enlace de datos de las tablas en DHTML para controlar la visualización de paginación de los registros. La desventaja es que su método de pasar página se limitará a una forma específica: solo las páginas anterior y siguiente, pero no la primera y la última. Dado que el cambio de página se controla en el lado del cliente, este y el quinto método son los más rápidos, pero desafortunadamente solo se pueden usar en navegadores que admitan DHTML.
En DHTML, el atributo DATASRC de <TABLE> permite vincular la tabla a una fuente de datos y otro atributo, DATAPAGESIZE, especifica el número de registros que se muestran en una página a la vez.
Veamos el siguiente ejemplo:
Paso 1: arrastre el control Recordset a la página web recién creada emp4.htm y establezca sus propiedades. El método es el mismo que el tercer método, que se omite aquí.
Paso 2: Ingresa el siguiente código:
<TABLE ID=Table1 DATASRC=#Recordset1_RDS DATAPAGESIZE=5> //Supongamos que el control Recordset se denomina Recordset1 anteriormente. Muestra 5 registros por página.
<CABEZA>
<TH ALIGN=left WIDTH=150>Emp ID</TH> //Encabezado de salida
<TH ALIGN=ancho izquierdo=200>Apellido</TH>
<TH ALIGN=ancho izquierdo=200>Nombre</TH>
</CABEZA>
<TR>
<TD><DIV DATAFLD=Emp ID></DIV></TD> //Contenido de la tabla de salida
<TD><DIV DATAFLD=Apellido></DIV></TD>
<TD><DIV DATAFLD=Nombre></DIV></TD>
</TR>
</TABLA>
Paso 3: Luego, agregue un par de controles de botón DTC para la navegación de la página, uno llamado btnPrevious (página anterior) y el otro llamado btnNext (página siguiente). Sus guiones correspondientes son los siguientes:
<IDIOMA DE ESCRITURA=VBScript>
Función btnPrevious_onclick()
Tabla1.Página anterior()
Función final
Función btnNext_onclick()
Tabla1.páginasiguiente()
Función final
</guión>
El quinto método: método DHTML dos
Este método es un refinamiento del cuarto método. Usando el método de escribir scripts manualmente, podemos crear los botones de navegación de la página de inicio y de la última página, y determinar la posición (número de registro) de cada registro. Debido a limitaciones de espacio, a continuación solo presentaré un ejemplo específico y daré una breve explicación. Para conocer otras propiedades y métodos sobre los controles DHTML y Recordset, consulte los libros relevantes. Lo que debe tenerse en cuenta aquí es que el control Recordset es algo diferente del objeto ADO Recordset introducido en el primer y segundo método: el control Recordset no proporciona directamente propiedades como el tamaño de página y el número de páginas, y debe calcularse utilizando el método descrito. abajo.
Paso 1: arrastre el control Recordset a la página web recién creada emp5.htm, asígnele el nombre Recordset1 y establezca sus propiedades. El método es el mismo que el tercer método, que se omite aquí.
Paso 2: Defina tres variables globales y escriba el script ondatasetcomplete (se completa la configuración de datos) de Recordset1.
Dim gCurrentPageNumber //Número de página actual
Dim gMaxPageNumber //Número máximo de páginas
Dim gRecordsPerPage //Muestra el número de registros por página
gRecordsPerPage = 5 //Establece el número de registros mostrados por página en 5 registros.
Función Recordset1_ondatasetcomplete()
totalRecordCount = Recordset1.getCount() //Número total de registros
gMaxPageNumber = Int(totalRecordCount / gRecordsPerPage) //Obtener el número máximo de páginas
Si (totalRecordCount Mod gRecordsPerPage) > 0 entonces
gNúmeroPáginaMáx = gNúmeroPáginaMáx + 1
Terminar si
Función final
Paso 3: cree botones de navegación de página.
Función btnFirst_onclick() 'Ir a la página de inicio
gNúmero de página actual = 1
Mostrar datos()
Función final
Función btnPrevious_onclick() 'Ir a la página anterior
si gCurrentPageNumber > 1 Entonces
gNúmero de página actual = gNúmero de página actual - 1
Mostrar datos()
Terminar si
Función final
Función btnNext_onclick() 'Ir a la página siguiente
si gCurrentPageNumber < gMaxPageNumber Entonces
gNúmero de página actual = gNúmero de página actual + 1
Mostrar datos()
Terminar si
Función final
Función btnLast_onclick() 'Pasar a la última página
gNúmeroPáginaCurrent = gNúmeroPáginaMáxima
Mostrar datos()
Función final
Paso 4: escriba una función para mostrar cada página. Se utilizan muchos atributos y métodos DHTML. Se recomienda a los lectores que consulten los libros relevantes.
SubDisplayData()
startRecord = ((gCurrentPageNumber - 1) * gRecordsPerPage) + 1 //Calcula el número de registros (posición, número) que se muestran al principio de cada página
filaCtr = 1
lblPageNumber.innerHTML = gCurrentPageNumber & / & gMaxPageNumber
For recordPtr = startRecord To (startRecord + gRecordsPerPage - 1) // Bucle para mostrar cada registro de una página
Si recordPtr > Recordset1.getCount() Entonces //Mostrar tabla vacía
Tabla1.filas(filaCtr).celdas(0).innerHTML = <P> </P>
Tabla1.filas(filaCtr).celdas(1).innerHTML = <P> </P>
Tabla1.filas(filaCtr).celdas(2).innerHTML = <P> </P>
Tabla1.filas(filaCtr).celdas(3).innerHTML = <P> </P>
De lo contrario //Mostrar cada página específicamente
Recordset1.moveAbsolute(recordPtr) //Mover el puntero de registro.
empID = Recordset1.fields.getValue(emp ID)
empLName = Recordset1.fields.getValue(nombre)
empFName = Recordset1.fields.getValue(apellido)
Table1.rows(rowCtr).cells(0).innerText = recordPtr ' Contador
Table1.rows(rowCtr).cells(1).innerText = empID
Table1.rows(rowCtr).cells(2).innerText = empLName
Table1.rows(rowCtr).cells(3).innerText = empFName
Terminar si
Ctrlfila = Ctrlfila + 1
Próximo
Subtítulo final
Además, también necesitamos escribir el siguiente script en el evento de carga del objeto de ventana:
Para RowCtr = 1 a gRecordsPerPage
Table1.insertRow(rowCtr) 'Insertar una nueva columna
Para cellCtr = 0 a 3
Tabla1.filas(filaCtr).insertCell()
Próximo
Próximo
Sexto método: método de cambio de página de control del lado del servidor.
Si paginamos los datos en el lado del servidor para formar una declaración HTML y luego los enviamos al cliente, no habrá problema de que el navegador no admita DHTML. Sin embargo, usar el método del lado del servidor requiere que regeneremos el control Recordset cada vez que pasamos la página, por lo que la velocidad es definitivamente más lenta que usar el método DHTML. Pero si el servidor es lo suficientemente rápido, este cliente lento no lo notará.
En el siguiente ejemplo, introduciré un nuevo control DTC: PageObject. Este control hace que la página web especificada se convierta en un objeto de página web, y las subrutinas y funciones organizadas por el usuario en el script del servidor de esta página web pueden considerarse como los métodos del objeto de página web. Proporciona un método avanzado para gestionar la información de estado: los objetos de la página web tienen algunas propiedades (variables) y los usuarios pueden definir la vida útil de estas propiedades. Debido a las características anteriores, nos resulta muy conveniente compilar scripts de paso de página.
Pero la desventaja de este método es que después de presionar el botón de página anterior o de página siguiente y luego presionar el botón de actualización en el navegador, la página web cambiará automáticamente. Además, si presiona el botón Atrás en el navegador y luego presiona el botón para pasar de página, puede aparecer una página aleatoria. Todo esto es causado por las propiedades del objeto de la página web (variables globales).
Paso 1: arrastre el control Recordset a la página web recién creada emp6.asp, asígnele el nombre Recordset1 y establezca sus propiedades. El método es el mismo que el tercer método, que se omite aquí.
Paso 2: arrastre el control PageObject a la página web y asígnele el nombre emplist. Luego haga clic derecho en este control para abrir la página de propiedades y establecer las tres propiedades (variables globales) de MaxPageNumber, RecordsPerPage y CurrentPageNumber. VI6.0 puede usar los métodos get y set para leer y escribir sus valores. Consulte la información relevante para un uso específico.
Paso 3: escriba el evento ondatasetcomplete de Recordset1.
Función Recordset1_ondatasetcomplete()
registros por página = 5
empList.setRecordsPerPage(recordsPerPage)//Establece el número de registros por atributo de página del objeto de página web en 5
totalRecordCount = Recordset1.getCount()//Obtiene el número total de registros en el conjunto de registros
mpn = Int(totalRecordCount / recordsPerPage) //Calcular mpn como el número total de páginas
Si (totalRecordCount Mod recordsPerPage) > 0 entonces
pn = pn + 1
Terminar si
empList.setMaxPageNumber(mpn)
Función final
Paso 4: arrastre los controles de cuatro botones a la página web y escriba un script de control de paso de página. Principalmente logramos pasar la página cambiando el valor de la propiedad CurrentPageNumber del objeto de la página web.
Función btnFirst_onclick() 'Ir a la página de inicio
empList.setCurrentPageNumber(1)
Función final
Función btnPrevious_onclick() 'Ir a la página anterior
cpn = empList.getCurrentPageNumber()
si cpn > 1 entonces
empList.setCurrentPageNumber(cpn - 1)
Terminar si
Función final
Función btnNext_onclick() 'Ir a la página siguiente
cpn = empList.getCurrentPageNumber()
si cpn < empList.getMaxPageNumber() entonces
empList.setCurrentPageNumber(cpn + 1)
Terminar si
Función final
Función btnLast_onclick() 'Pasar a la última página
empList.setCurrentPageNumber( empList.getMaxPageNumber() )
Función final
Para garantizar que se muestre la primera página al ingresar a la página por primera vez, también debemos escribir el evento onEnter del objeto de la página web.
Función empList_onEnter()
Si empList.firstEntered Entonces
empList.setCurrentPageNumber(1)
Terminar si
Función final
Paso 5: escriba un guión que muestre cada página.
<HR><TABLE BORDER=0><TR>//Mostrar encabezado
<TH ALIGN=ancho izquierdo=35></TH>
<TH ALIGN=ANCHO izquierdo=150>ID emp</TH>
<TH ALIGN=ancho izquierdo=200>Apellido</TH>
<TH ALIGN=ancho izquierdo=200>Nombre</TH></TR>
<%
pageNumber = empList.getCurrentPageNumber()//Calcule varios parámetros necesarios para pasar la página, igual que el método DHTML 2
registrosPorPágina = empList.getRecordsPerPage()
inicioRegistro = ((númerodepágina - 1) * registrosPorPágina) + 1
últimoRecord = Recordset1.getCount()
Para recordPtr = startRecord To (startRecord + recordsPerPage - 1)%>
<%Si Recordset1.EOF = Verdadero Entonces%>
<TR>
<TD> </TD>
<TD> </TD>
<TD> </TD>
<TD> </TD>
</TR>
<%Else%>
<%Recordset1.moveAbsolute(recordPtr)%>
<TR>
<% Si recordPtr <= últimoRegistro Entonces %>
<TD><%=recordptr%></TD>
<%Else%>
<TD> </TD>
<%Finalizar si %>
<TD><%=Recordset1.fields.getValue(emp ID)%></TD>
<TD><%=Recordset1.fields.getValue(apellido)%></TD>
<TD><%=Recordset1.fields.getValue(nombre)%></TD>
</TR>
<%Finalizar si%>
<%Siguiente%>
</TABLA><HR>
Séptimo método: método del modelo de objetos del entorno de datos (modelo de objetos del entorno de datos)
El modelo de objetos del entorno de datos abstrae el modelo de objetos ADO y sus objetos (objetos Conexión, Comando, Conjunto de registros, Campo y Parámetro) en una forma más simple. El modelo de objetos del entorno de datos expone comandos como métodos. El usuario puede llamar a estos métodos, que ejecutan los comandos y devuelven el conjunto de registros resultante. Para obtener información detallada sobre el modelo de objetos DEOM, consulte los libros relevantes. Veamos el ejemplo de la siguiente página web emp7.asp:
Paso 1: Haga clic derecho en el proyecto en la ventana del Explorador de proyectos de VI6.0 y seleccione Agregar conexión de datos en el menú emergente. Después de establecer una conexión a la base de datos de acuerdo con las indicaciones de navegación proporcionadas por el VI, el usuario agrega un comando de datos para acceder a la base de datos desde la aplicación ASP. Al mismo tiempo, verá un objeto de entorno de datos en el archivo global.asa en la ventana del Explorador de proyectos.
Paso 2: haga clic derecho en el objeto Entorno de datos y seleccione la opción Agregar comando de datos en el menú emergente para agregar un comando de datos Comando1. De acuerdo con el mensaje de navegación de VI6.0, puede seleccionar Declaración SQL en la página Genetal de la ventana emergente Propiedades de Command1 e ingresar: seleccione * de emp. Presione Aceptar para regresar.
Paso 3: Después de crear el comando de datos, ha creado un método para el objeto del entorno de datos. Luego puede llamar a este método desde el script y el método devolverá un conjunto de registros al usuario.
thisPage.createDE() // En modo SOM, thisPage representa el objeto de la página web actual y el método createDE() crea el objeto DE.
DE.Command1//Ejecuta el comando del objeto DE, que puede ir seguido de parámetros, lo cual es muy útil al realizar consultas condicionales.
Establecer rs=DE.rsCommand1//DE.rscommand1 hace que el objeto rs sea completamente equivalente a un objeto Recordset de ADO.
Paso 4: Debido a que rs es un objeto ADO, el siguiente código de paso de página se refiere completamente a los diversos métodos presentados anteriormente y se omite aquí.
Otros incluyen métodos implementados en la navegación de la base de datos de FrontPage2000, etc. Como no están relacionados con este tema, se omiten aquí.
En resumen, cada método introducido anteriormente contiene muchas tecnologías nuevas, que no pueden discutirse en profundidad debido a limitaciones de espacio. Este artículo solo quiere presentar varios métodos de programación de páginas web ASP a través del ejemplo específico de cambio de página; permitir que todos experimenten las poderosas funciones de VI6.0 en la preparación de páginas web, comprendan y se familiaricen con ADO, cómo usar los controles DHTML y DTC; , Modelo de objetos SOM y modelo de objetos DEOM. Espero que pueda brindarle más opciones y referencias al compilar páginas web.