Lo que hago es comprobar si la variable application existe, si no existe leo de la base de datos las categorias, y las asigno a una variable application que esta disponible para todos los usuarios sin necesidad de volver a solicitarla al server.
Asi:
Código:
IF NOT isArray(Application("CategoriasProductos")) THEN ' Comprobamos que no exista el array
Set catRs=Server.CreateObject("ADODB.RecordSet") ' en caso de que no exista creamos el recordset
catRs.ActiveConnection= con ' asignamos el objeto recordset a la conexion
sqlString="SELECT * FROM catweb ORDER BY nombre" ' establecemos la consulta sql
catRs.Open sqlstring ' ejecutamos la consulta
CategoriasProductos = catRs.GetRows() ' volcamos el resultado de la consulta en GetRows
' esto nos da una matriz de dos dimensiones, la primera dimension corresponde al nombre del campo
' y la segunda al numero de registro
Application Lock ' bloqueamos la application
Application("CategoriasProductos")= CategoriasProductos ' asignamos el resultado de la consulta a la application
Application Unlock ' desbloqueamos la application
catRs.Close ' ahora cerramos y destruimos el recordSet
Set catRs=Nothing
END IF
%>
luego, donde deseo muestro ...
Código:
<%
FOR i=0 TO UBOUND(Application("CategoriasProductos"),2)' desde que i vale 0 hasta el final de la segunda dimension
' osea el final de los registros
codigo = Application("CategoriasProductos")(0,i) ' 0 el primer campo de la tabla( osea el codigo), i el registro
nombre = Application("CategoriasProductos")(1,i) ' 1 el segundo registrro de la tabla ( o sea el nombre de la categoria)
%>
<a href="efamilia.asp?categoria=<%=Server.URLEncode(codigo)%>&nomcat=<%= nombre%>" class="catrapida"><%= nombre %></a>
NEXT

lo saqué de un libro
asi evitamos pedir tanto al servidor
Saludos