SERVICIOS: 902 027 102
Busqueda

Sistema web de Comercio Electrónico Lazarus

El sistema de comercio electrónico o tienda virtual Lazarus, es la herramienta web definitiva que le permitirá vender sus productos por internet de una forma eficiente y ágil. Lazarus le permite crear una Tienda Online indistintamente del tipo de producto

Sistema web de Comercio Electrónico Lazarus
Suscribete al boletin

Escribe tu correo electronico para recibir nuestro boletin de articulos.

La función GetRows en ASP

La función GetRows puede agilizar mucho nuestro sistema en ASP si la utilizamos con coherencia, descubre las mejoras que te puede aportar.

 

En ASP cuando un Webmaster programa con Bases de datos suele utilizar bucles Do While para recorrer el RecordSet, este sistema no está mal enfocado, pero si disponemos de un servidor con una memoria Ram medianamente potente, podemos optimizar el proceso mucho más.

Vamos a ver como sería el código que casi todo mortal utilizaría para hacer un bucle mostrando una serie de registros:

Dim DB, RS, SQL
SQL="Select * From Tabla"
Set DB=Server.CreateObject("ADODB.Connection")
DB.Open
Set RS=DB.Execute(SQL)
Response.Write("

")
Do While Rs.Eof=False
Response.Write("

" & Rs(0) & "

")
Rs.Movenext
Loop
Response.Write("

")
Rs.Close

 

Supongo que este código le será familiar a más de uno, el único problema es que no es lo bastante rápido como para una Web que tenga que soportar Servidoruna gran carga, ¿porqué?, muy sencillo.
El RecordSet cada vez que hace una vuelta en el bucle realiza una petición a la base de datos, esta tiene que responder y lo único que provocamos es un colapso. Pero lo más grabe no es que realice esa petición, sino que cada una de las peticiones solicita el TOTAL de los registros, esto significa que si la consulta extrae 100 registros estará recogiendo la información de esos 100 registros cada vez que compruebe si Eof=False...

Demasiado trabajo para el servidor, ¿verdad?. Por suerte tenemos una alternativa que sobrecargará la memoria pero desahogará al servidor de tantas peticiones, como ya he comentado antes, este método es recomendable tan solo si la memoria de nuestro servidor es medianamente potente y amplia, no lo intentes con una página de alto tráfico que esté alojada en un servidor de 512Mb de RAM, bueno, inténtalo y nos lo cuentas ;)

GetRows, la solución

Todo problema tiene su solución, y la nuestra pasa por hacer más de 1000 consultas a realizar tan solo 1. Este función devuelve los registros resultantes de una consulta a un vector bidimensional, permitiéndonos tratar los datos en una matriz de manera mucho más rápida. La manera de ejecutarlo sería:

Dim Registros
Registros = Rs.GetRows

Una vez pasados los datos a la variable, podemos cerrar o destruir el objeto Recordset, ya que este no volverá a actuar más. Este método es muy aconsejable para bases de datos Access que no soportan muy bien la carga de usuarios.

El vector creado, tiene dos dimensiones, la primera de ella correspondería al campo (como el Rs.Field) y la segunda al contenido del registro. Por lo tanto si quisiéramos hacer la llamada al primer registro del primer campo la instrucción a utilizar sería esta:

Response.Write(Registros(0,0))

Esta instrucción nos devolvería el primer campo (0) de la primera fila (0). Ahora vamos a ver como quedaría el bucle anterior utilizando GetRows:

Dim DB, RS, SQL, Registros
SQL="Select * From Tabla"
Set DB=Server.CreateObject("ADODB.Connection")
DB.Open
Set RS=DB.Execute(SQL)

Registros=Rs.GetRows
Rs.Close
Set Rs=Nothing
Db.Close
Set DB=Nothing
Response.Write("

")
For I=0 To Ubound(Registros,2) 'Inicio del bucle
Response.Write("

" & Registros(0,I) & "

")

Next
Response.Write("

")

 

Para contar el número de registros que tiene la variable almacenada debemos utilizar la expresión:

Todos=Ubound(Registros,2)+1

Para trabajar con GetRows, ¿hay que usar números?

Pues no necesariamente, podemos referenciar los campos con variables, por ejemplo, si conocemos de antemano como se llamarán los campos podríamos utilizar el siguiente código:

Dim Nombre, Apellidos
Nombre=0
Apellidos=1
Response.Write(Registros(Nombre,0)) 'Imprimiría la primera fila del campo "Nombre"
Response.Write(Registros(Apellidos,0)) 'Imprimiría la primera fila del campo "Apellidos"

Es una manera rápida de asimilar mejor el código.

Esperamos que este artículo os haya abierto los ojos y tengáis una posibilidad de hacer vuestras aplicaciones más rápidas, en futuros artículos os explicaremos otras funciones que son todavía más rápidas y mejor optimizadas.

Artículos Similares

La función CONCAT en MySQL

Hay diferentes maneras de unir datos extraidos de una tabla, la más común es hacerlo una vez estos datos están fuera, pero se puede realizar una consulta con los datos ya concatenados.

Fecha: 06/07/2011 23:41:47 jac27 escribio:

Muchas gracias, me ah sido muy util.
Saludos.

Condiciones de Uso | Política de Privacidad
Copyright © 2010 Solingest. Todos los derechos reservados.
Desarrollado por mediante sistema