Buscador

Busca aquí los artículos:

 

RSS Suscríbete al Boletín

Escribe tu correo para recibir nuestro boletín de artículos:

Plan Iniciación

1 Dominio

3 Gb de Tráfico Mensual

2 Bases de datos MySql

250 Mb de espacio Web y Correo

Ilimitadas BD Access

Programación ASP, ASP.Net y PHP

Precio: 5 € / Mes

Ir Plan Inicial

Plan Básico

1 Dominio

8 Gb de Tráfico Mensual

10 Bases de datos MySql

600 Mb de espacio Web y Correo

Ilimitadas BD Access

Programación ASP, ASP.Net y PHP

Precio: 10 € / Mes

Ir Plan Básico

Plan Profesional

1 Dominio

20 Gb de Tráfico Mensual

30 Bases de datos MySql

1,5 Gb de espacio Web y Correo

Ilimitadas BD Access

Programación ASP, ASP.Net y PHP

Precio: 18 € / Mes

Ir a Plan Profesional

Plan Profesional ISP

50 Gb de Tráfico Mensual

50 Bases de datos MySql

4,5 Gb de espacio Web y Correo

Ilimitadas BD Access

Programación ASP, ASP.Net y PHP

Precio: 30 € / Mes

Ir a Plan Profesional ISP

Servidor Linux

Tu servidor dedicado con sistema Linux por 199 € al mes .

 

 

Ver más

Servidor Windows

Tu servidor dedicado con sistema Windows por 210 € al mes .

 

 

Ver más

Registre su dominio ahora

www.

Su dominio en 24 horas
Su propio nombre de dominio en un tiempo record, sin complicaciones ni compromisos.

La función GetRows en ASP

Feed RSS Estás en ASP Fecha: 11/04/2007

La función GetRows puede agilizar mucho nuestro sistema en ASP si la utilizamos con coherencia, descubre las mejoras que te puede aportar.
Entre otras cosas, un incremento significativo en el rendimiento de nuestra aplicación.
Publicidad

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("<div>")
Do While Rs.Eof=False
Response.Write("<p>" & Rs(0) & "</p>")
Rs.Movenext
Loop
Response.Write("</div>")
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("<div>")
For I=0 To Ubound(Registros,2) 'Inicio del bucle
Response.Write("<p>" & Registros(0,I) & "</p>")
Next
Response.Write("</div>")

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.

 

Lecturas: 2572

Coincidencias de la Base de Datos

La función CONCAT en MySQL

Fecha: 01/05/2007

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.

Comentarios de los Usuarios (3)

Cesar escribió:

Fecha: 04/06/2007 17:43:10

consulta
si otro usuario ingresa más registros a la tabla despues de haber ejecutado el getrows , mi matriz se actulizara con esos registros

Brian escribió:

Fecha: 04/06/2007 17:48:29

bueno, no es del todo así
Hola,

Una vez ejecutas la instrucción getrows, se pasan todos los datos a la matriz.

Esta se carga con la información vigente cuando tu hiciste el traspaso.

Pero si quieres que se vuelvan a cargar los datos deberías de volver a ejecutar la instrucción.

Cuando tu ejecutas una Web, esta hace una pasada del código, se muestra al usuario, y se queda en espera hasta que otro usuario vuelve a hacer otro "click".

Espero que me hayas entendido.

1 Saludo!

Latez escribió:

Fecha: 26/09/2007 15:51:29

Si que ha cambiado el rendimiento de mi foro
La verdad es que se ha notado y mucho el renidmiento del foro.

Ahora comenzaba a estar un poco ahogado por la crecida de usuarios y realmente con este sistema se ha solventado.

También digo que si no fuese porque el servidor tiene mucha RAM creo que no lo soportaría...

Este artículo ya ha superado la fecha máxima para escribir comentarios, 1 año.


Hosting y Alojamiento Web