Foros del Web » Programando para Internet » ASP Clásico »

Quien me puede aconsejar con este codigo

Estas en el tema de Quien me puede aconsejar con este codigo en el foro de ASP Clásico en Foros del Web. Estoy utilizando este codigo para un menu, pero la carga se hace eterna, existe alguna forma de que esto sea más rápido???, la informacion la ...
  #1 (permalink)  
Antiguo 04/11/2003, 06:52
 
Fecha de Ingreso: febrero-2002
Ubicación: Navarra
Mensajes: 701
Antigüedad: 22 años, 4 meses
Puntos: 2
Pregunta Quien me puede aconsejar con este codigo

Estoy utilizando este codigo para un menu, pero la carga se hace eterna, existe alguna forma de que esto sea más rápido???, la informacion la saca de una base de datos.

Un saludo




<table width="60" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="5"><img src="../imagenes/fondos/px.gif" width="5" height="5"></td>
<td width="43">
<%
set rs12=Server.CreateObject("ADODB.Recordset")


SQL12="SELECT * FROM PRODUCTOS where SUBID = 0"

rs12.Open SQL12, Conn


'n = 0

while not rs12.EOF
'n = n
'n = n + 1
%>

<table width="60" border="0" cellpadding="0" cellspacing="0" id="<%=rs12("ID")%>">
<tr>
<td onMouseOver="MM_showHideLayers('Layer1','','hide') ">
<div id="<%=rs12.Fields("NOMBRE")%>" style="position:absolute; width:100px; height:15px; left: 88px; z-index: 4; background-color: #<%=rs12.Fields("COLORCAPA")%>; layer-background-color: #FFFFFF; border: 1px none #000000; top: 135px; visibility: hidden;">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td valign="top">
<%
set rs31=Server.CreateObject("ADODB.Recordset")

SQL31="SELECT * FROM PRODUCTOS where SUBID = " &rs12("ID")
rs31.Open SQL31, Conn

while not rs31.EOF
%>
<table width="100" height="10" border="0" cellpadding="0" cellspacing="0" class="cuadro">
<tr>
<td height="10">
<table width="100" height="10" border="0" cellpadding="0" cellspacing="0" id="<%=rs31("ID")%>">
<tr>
<td height="5" valign="bottom" >
<div id="<%=rs31.Fields("NOMBRE")%>" style="position:absolute; width:100px; height:25px; z-index:3; left: 97px; visibility: hidden;">
<%
set rs61=Server.CreateObject("ADODB.Recordset")

SQL61="SELECT * FROM PRODUCTOS where SUBID = " &rs31("ID")
rs61.Open SQL61, Conn
n=1
while not rs61.EOF
n=n +1
%>

<table width="100" border="0" cellpadding="0" cellspacing="0" bgcolor="<%=rs12.Fields("COLORABAJO")%>" class="cuadro" id="<%=rs61("ID")%>">
<tr>
<td width="100" height="5" valign="middle" ><a href="productos2.asp?ID=<%=rs61("ID")%>&Categ=<%=r s61("SUBID")%>&N=1&CategID=<%=rs61("CATEGORIA")%>" onmouseover="cambiaFondo('<%=rs61("ID")%>','<%=rs6 1("COLORCAPA")%>');MM_showHideLayers('<%=rs61.Fiel ds("NOMBRE")%>1','','show');this.style.color='<%=r s61("COLORTEXTO")%>'" onmouseout="cambiaFondo('<%=rs61("ID")%>','<%=rs12 .Fields("COLORABAJO")%>');this.style.color=''" class="<%=rs61.Fields("ID")%>">&nbsp;<%=rs61("NOMB RE")%></a> <div id="<%=rs61.Fields("NOMBRE")%>1" style="position:absolute; width:175px; height:25; z-index:4; left: 100px; visibility: hidden;">
<%
set rs71=Server.CreateObject("ADODB.Recordset")

SQL71="SELECT * FROM PRODUCTOS where SUBID = " &rs61("ID")
rs71.Open SQL71, Conn
n=1
while not rs71.EOF
n=n +1
%>
<table width="175" border="0" cellpadding="0" cellspacing="0" bgcolor="<%=rs12.Fields("COLORABAJO")%>" class="cuadro" id="<%=rs71("ID")%>">
<tr>
<td width="175" height="5" valign="middle" ><a href="productos2.asp?ID=<%=rs71("ID")%>&Categ=<%=r s71("SUBID")%>&N=1&CategID=<%=rs71("CATEGORIA")%>" onmouseover="cambiaFondo('<%=rs71("ID")%>','<%=rs7 1("COLORCAPA")%>')" onmouseout="cambiaFondo('<%=rs71("ID")%>','<%=rs12 .Fields("COLORABAJO")%>')" class="<%=rs61.Fields("ID")%>">&nbsp;<%=rs71("NOMB RE")%></a> </td>
</tr>
</table>
<%
rs71.MoveNext
wend
%>
</div>

</td>
</tr>
<tr>
<td height="2" valign="middle"><img src="../imagenes/fondos/px.gif" width="100%" height="2" onMouseOver="

<%
set rs111=Server.CreateObject("ADODB.Recordset")
SQL111="SELECT * FROM PRODUCTOS where SUBID = " &rs31("ID")
rs111.Open SQL111, Conn

while not rs111.EOF %>

ocultaCapa('<%=rs111.Fields("NOMBRE")%>1');

<%rs111.MoveNext
wend%>"></td>
</tr>
</table>
<%
rs61.MoveNext
wend
%>
</div>
<!--'productos3.asp?ID=<%'=rs12("ID")%>&N=1&Categ=<%'= rs31("NOMBRE")%>&CategID=<%'=rs12("ID")%>" class="<%'=replace(rs12.Fields("NOMBRE")," ","_")%>-->
<a href="javascript:;" onMouseOver="MM_showHideLayers('<%=rs31.Fields("NO MBRE")%>','','show');cambiaFondo('<%=rs31("ID")%>' ,'<%=rs12("COLORSOBRE")%>');this.style.color='<%=r s31("COLORTEXTO")%>'" onmouseout="cambiaFondo('<%=rs31("ID")%>','<%=rs12 .Fields("COLORCAPA")%>');this.style.color=''" class="<%=rs12.Fields("ID")%>">&nbsp;<%=rs31.Field s("NOMBRE")%></a> </td>
</tr>
<tr>
<td height="2"><img src="../imagenes/fondos/px.gif" width="100%" height="2" onMouseOver="

<%
set rs11=Server.CreateObject("ADODB.Recordset")
SQL11="SELECT * FROM PRODUCTOS where SUBID = " &rs12("ID")
rs11.Open SQL11, Conn

while not rs11.EOF %>

ocultaCapa('<%=rs11.Fields("NOMBRE")%>');

<%rs11.MoveNext
wend%>"></td>
</tr>
</table></td>
</tr>
</table>
<a href="javascript:;" class="menuarriba"></a><a href="javascript:;" onMouseOver="MM_showHideLayers('<%=rs31.Fields("NO MBRE")%>','','show')"></a>
<%
rs31.MoveNext
wend
%>
</td>
</tr>
</table>
</div>
<%

response.write "<a href='productos2.asp?ID="&rs12("ID")&"&N=1&Categ=" &rs12("NOMBRE")&"&CategID="&rs12("ID")&"' class=menucolor2 onmouseover=""cambiaFondo('"&rs12("ID")&"','#CDE3E 6')"" onmouseout=""cambiaFondo('"&rs12("ID")&"','')""><d iv align=right onMouseOver=""MM_showHideLayers('"&rs12.Fields("NO MBRE")&"','','show')"">"&rs12.Fields("NOMBRE")& "</div></a>"
%>
</td>
</tr>
<tr>
<td><img src="../imagenes/fondos/px.gif" width="100%" height="10" onMouseOver="<%

set rs5=Server.CreateObject("ADODB.Recordset")
SQL5="SELECT * FROM PRODUCTOS where SUBID = 0"
rs5.Open SQL5, Conn

while not rs5.EOF

set rs747=Server.CreateObject("ADODB.Recordset")
SQL747="SELECT * FROM PRODUCTOS where SUBID = " &rs5("ID")
rs747.Open SQL747, Conn
%>

ocultaCapa('<%=rs5.Fields("NOMBRE")%>');

<%while not rs747.EOF%>

ocultaCapa('<%=rs747.Fields("NOMBRE")%>');

<%
set rs647=Server.CreateObject("ADODB.Recordset")
SQL647="SELECT * FROM PRODUCTOS where SUBID = " &rs747("ID")
rs647.Open SQL647, Conn
%>
<%while not rs647.EOF%>

ocultaCapa('<%=rs647.Fields("NOMBRE")%>1');

<%rs647.MoveNext
wend%>

<%rs747.MoveNext
wend%>

<%rs5.MoveNext
wend

'limpiamos objetos

rs747.Close
rs647.Close
set rs647=nothing
set rs747=nothing
%>"></td>
</tr>
</table>
<%
rs12.MoveNext
wend%>
</td>
</tr>
</table>
<%'cerramos los elementos
rs12.Close
set rs12=nothing
rs31.Close
set rs31=nothing
rs61.Close
set rs61=nothing
rs11.Close
set rs11=nothing
rs5.Close
set rs5=nothing
%>

Un saludo
__________________
asp, php, .net, adaptandose a las necesidades

Última edición por haven; 04/11/2003 a las 06:53
  #2 (permalink)  
Antiguo 04/11/2003, 07:45
 
Fecha de Ingreso: mayo-2002
Mensajes: 66
Antigüedad: 22 años, 1 mes
Puntos: 0
Hola Haven:

Te comento un par de sugerencias.

Por una parte, el principal problema es que tienes varios bucles anidados (hasta 4 niveles de anidación). Ésto es de por sí costoso de "digerir" para el servidor.

Veo que todas las consultas se hacen sobre la misma tabla. Tal vez podría interesarte tener sólo 2 recordSets. Inicialmente obtienes todos los registros en ambos. Empiezas a recorrer uno de ellos cogiendo el ID del registro y lo utilizas en el otro recordSet para filtrar (ej: rs2.filter = "SUBID = " & rs1("ID").value). No sé si te servirá esta sugerencia, pues no sé qué es exactamente lo que quieres resolver, aunque por la pinta del código estás haciendo el recorrido típico de Categorías-subcategorías-subSubcategorías-elementos...

Por otro lado, tienes que dentro de cada bucle estás creando recordsets contínuamente (ej: set rs111=Server.CreateObject("ADODB.Recordset")). Habría que crear los recordsets fuera de los bucles.

También, sería muy conveniente que el campo SUBID de la tabla PRODUCTOS estuviese indexado. En teoría, los índices aceleran la búsqueda de registros coincidentes (aunque en la práctica, bajo ciertas condiciones, en ACCESS esta mejoría no sea tan apreciable).

Por último, te aconsejaría evitar en la medida de lo posible el uso indiscriminado de ``SELECT *" y que en su lugar utilizases ``SELECT <lista_de_campos_a_utilizar>", a no ser que vayas a usar todos los campos de la tabla.

Prueba a ver qué tal y ya nos cuentas..
__________________
Un saludo,

Alberto

Última edición por alcarji; 04/11/2003 a las 07:49
  #3 (permalink)  
Antiguo 04/11/2003, 12:18
 
Fecha de Ingreso: febrero-2002
Ubicación: Navarra
Mensajes: 701
Antigüedad: 22 años, 4 meses
Puntos: 2
Hola alberto, estoy siguiendo tus indicaciones, y me pasa una cosa curiosa, y es que si pongo todos los recordsets fuera de los bucles, entonces no aparece nada de la página , ya ves que toco algo y no funciona nada,

Lo del menu si es lo que comentas de Categorías-subcategorías-subSubcategorías-elementos, y si tiene 4 niveles de anidación, ya que no se otra forma de hacerlo, voy a provar haciendo 2 recorsets, pero no se....., quizás haya una forma de hacer un menu de este tipo que sea menos trabajosa para el servidor????

Un saludo y gracias
__________________
asp, php, .net, adaptandose a las necesidades
  #4 (permalink)  
Antiguo 05/11/2003, 02:47
 
Fecha de Ingreso: mayo-2002
Mensajes: 66
Antigüedad: 22 años, 1 mes
Puntos: 0
Hola Haven:

Cosa curiosa la que comentas...

¿Puedes poner el código y le pegamos un vistazo?
__________________
Un saludo,

Alberto
  #5 (permalink)  
Antiguo 05/11/2003, 07:11
 
Fecha de Ingreso: febrero-2002
Ubicación: Navarra
Mensajes: 701
Antigüedad: 22 años, 4 meses
Puntos: 2
Como no Alberto, aqui esta el codigo, pongo lo que hay dentro del body, pero por encima de esto solo estan las clases y el codigo para cambiar las celdas de color, nada más. Si pongo los recorsets todos seguidos, entonces no me muestra nada de la página.

Puedes ver el ejemplo del menu aquí:

Menu

Un saludo


<body>
<table width="60" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="5"><img src="../imagenes/fondos/px.gif" width="5" height="5"></td>
<td width="43">
<%

'Aqui empieza el menu
set Conn=Server.CreateObject("ADODB.Connection")
set rs12=Server.CreateObject("ADODB.Recordset")
set rs31=Server.CreateObject("ADODB.Recordset")
set rs61=Server.CreateObject("ADODB.Recordset")
set rs71=Server.CreateObject("ADODB.Recordset")
set rs111=Server.CreateObject("ADODB.Recordset")
set rs11=Server.CreateObject("ADODB.Recordset")
set rs5=Server.CreateObject("ADODB.Recordset")
set rs747=Server.CreateObject("ADODB.Recordset")
set rs647=Server.CreateObject("ADODB.Recordset")

strAccessDB = "../listas/basedatos"
Conn = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath(strAccessDB)


SQL12="SELECT * FROM PRODUCTOS where SUBID = 0"

rs12.Open SQL12, Conn

while not rs12.EOF

%>
<table width="60" border="0" cellpadding="0" cellspacing="0" id="<%=rs12("ID")%>">
<tr>
<td onMouseOver="MM_showHideLayers('Layer1','','hide') "> <div id="<%=rs12.Fields("NOMBRE")%>" style="position:absolute; width:100px; height:15px; left: 88px; z-index: 4; background-color: #<%=rs12.Fields("COLORCAPA")%>; layer-background-color: #FFFFFF; border: 1px none #000000; top: 135px; visibility: hidden;">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td valign="top">
<%

SQL31="SELECT * FROM PRODUCTOS where SUBID = " &rs12("ID")
rs31.Open SQL31, Conn

while not rs31.EOF
%>
<table width="100" height="10" border="0" cellpadding="0" cellspacing="0" class="cuadro">
<tr>
<td height="10"> <table width="100" height="10" border="0" cellpadding="0" cellspacing="0" id="<%=rs31("ID")%>">
<tr>
<td height="5" valign="bottom" > <div id="<%=rs31.Fields("NOMBRE")%>" style="position:absolute; width:100px; height:25px; z-index:3; left: 97px; visibility: hidden;">
<%

SQL61="SELECT * FROM PRODUCTOS where SUBID = " &rs31("ID")
rs61.Open SQL61, Conn
n=1
while not rs61.EOF
n=n +1
%>
<table width="100" border="0" cellpadding="0" cellspacing="0" bgcolor="<%=rs12.Fields("COLORABAJO")%>" class="cuadro" id="<%=rs61("ID")%>">
<tr>
<td width="100" height="5" valign="middle" ><a href="productos2.asp?ID=<%=rs61("ID")%>&Categ=<%=r s61("SUBID")%>&N=1&CategID=<%=rs61("CATEGORIA")%>" onmouseover="cambiaFondo('<%=rs61("ID")%>','<%=rs6 1("COLORCAPA")%>');MM_showHideLayers('<%=rs61.Fiel ds("NOMBRE")%>1','','show');this.style.color='<%=r s61("COLORTEXTO")%>'" onmouseout="cambiaFondo('<%=rs61("ID")%>','<%=rs12 .Fields("COLORABAJO")%>');this.style.color=''" class="<%=rs61.Fields("ID")%>">&nbsp;<%=rs61("NOMB RE")%></a>
<div id="<%=rs61.Fields("NOMBRE")%>1" style="position:absolute; width:175px; height:25; z-index:4; left: 100px; visibility: hidden;">
<%

SQL71="SELECT * FROM PRODUCTOS where SUBID = " &rs61("ID")
rs71.Open SQL71, Conn
n=1
while not rs71.EOF
n=n +1
%>
<table width="175" border="0" cellpadding="0" cellspacing="0" bgcolor="<%=rs12.Fields("COLORABAJO")%>" class="cuadro" id="<%=rs71("ID")%>">
<tr>
<td width="175" height="5" valign="middle" ><a href="productos2.asp?ID=<%=rs71("ID")%>&Categ=<%=r s71("SUBID")%>&N=1&CategID=<%=rs71("CATEGORIA")%>" onmouseover="cambiaFondo('<%=rs71("ID")%>','<%=rs7 1("COLORCAPA")%>')" onmouseout="cambiaFondo('<%=rs71("ID")%>','<%=rs12 .Fields("COLORABAJO")%>')" class="<%=rs61.Fields("ID")%>">&nbsp;<%=rs71("NOMB RE")%></a>
</td>
</tr>
</table>
<%
rs71.MoveNext
wend
%>
</div></td>
</tr>
<tr>
<td height="2" valign="middle"><img src="../imagenes/fondos/px.gif" width="100%" height="2" onMouseOver="

<%

SQL111="SELECT * FROM PRODUCTOS where SUBID = " &rs31("ID")
rs111.Open SQL111, Conn

while not rs111.EOF %>

ocultaCapa('<%=rs111.Fields("NOMBRE")%>1');

<%rs111.MoveNext
wend%>"></td>
</tr>
</table>
<%
rs61.MoveNext
wend
%>
</div>
<!--'productos3.asp?ID=<%'=rs12("ID")%>&N=1&Categ=<%'= rs31("NOMBRE")%>&CategID=<%'=rs12("ID")%>" class="<%'=replace(rs12.Fields("NOMBRE")," ","_")%>-->
<a href="javascript:;" onMouseOver="MM_showHideLayers('<%=rs31.Fields("NO MBRE")%>','','show');cambiaFondo('<%=rs31("ID")%>' ,'<%=rs12("COLORSOBRE")%>');this.style.color='<%=r s31("COLORTEXTO")%>'" onmouseout="cambiaFondo('<%=rs31("ID")%>','<%=rs12 .Fields("COLORCAPA")%>');this.style.color=''" class="<%=rs12.Fields("ID")%>">&nbsp;<%=rs31.Field s("NOMBRE")%></a>
</td>
</tr>
<tr>
<td height="2"><img src="../imagenes/fondos/px.gif" width="100%" height="2" onMouseOver="

<%

SQL11="SELECT * FROM PRODUCTOS where SUBID = " &rs12("ID")
rs11.Open SQL11, Conn

while not rs11.EOF %>

ocultaCapa('<%=rs11.Fields("NOMBRE")%>');

<%rs11.MoveNext
wend%>"></td>
</tr>
</table></td>
</tr>
</table>
<a href="javascript:;" class="menuarriba"></a><a href="javascript:;" onMouseOver="MM_showHideLayers('<%=rs31.Fields("NO MBRE")%>','','show')"></a>
<%
rs31.MoveNext
wend
%>
</td>
</tr>
</table>
</div>
<%

response.write "<a href='productos2.asp?ID="&rs12("ID")&"&N=1&Categ=" &rs12("NOMBRE")&"&CategID="&rs12("ID")&"' class=menucolor2 onmouseover=""cambiaFondo('"&rs12("ID")&"','#CDE3E 6')"" onmouseout=""cambiaFondo('"&rs12("ID")&"','')""><d iv align=right onMouseOver=""MM_showHideLayers('"&rs12.Fields("NO MBRE")&"','','show')"">"&rs12.Fields("NOMBRE")& "</div></a>"
%>
</td>
</tr>
<tr>
<td><img src="../imagenes/fondos/px.gif" width="100%" height="10" onMouseOver="<%


SQL5="SELECT * FROM PRODUCTOS where SUBID = 0"
rs5.Open SQL5, Conn

while not rs5.EOF


SQL747="SELECT * FROM PRODUCTOS where SUBID = " &rs5("ID")
rs747.Open SQL747, Conn
%>

ocultaCapa('<%=rs5.Fields("NOMBRE")%>');

<%while not rs747.EOF%>

ocultaCapa('<%=rs747.Fields("NOMBRE")%>');

<%

SQL647="SELECT * FROM PRODUCTOS where SUBID = " &rs747("ID")
rs647.Open SQL647, Conn
%>
<%while not rs647.EOF%>

ocultaCapa('<%=rs647.Fields("NOMBRE")%>1');

<%rs647.MoveNext
wend%>

<%rs747.MoveNext
wend%>

<%rs5.MoveNext
wend

'limpiamos objetos

rs747.Close
rs647.Close
set rs647=nothing
set rs747=nothing
%>"></td>
</tr>
</table>
<%
rs12.MoveNext
wend%>
</td>
</tr>
</table>
<%'cerramos los elementos
rs12.Close
set rs12=nothing
rs31.Close
set rs31=nothing
rs61.Close
set rs61=nothing
rs11.Close
set rs11=nothing
rs5.Close
set rs5=nothing

'Aqui termina el menu
%>
</body>

Un saludo
__________________
asp, php, .net, adaptandose a las necesidades

Última edición por haven; 05/11/2003 a las 07:20
  #6 (permalink)  
Antiguo 07/11/2003, 04:12
 
Fecha de Ingreso: febrero-2002
Ubicación: Navarra
Mensajes: 701
Antigüedad: 22 años, 4 meses
Puntos: 2
Alguine me puede decir porque no me funciona este menu, si pongo set Conn=Server.CreateObject("ADODB.Connection"), al principio de toda la programación????

Un saudo
__________________
asp, php, .net, adaptandose a las necesidades
  #7 (permalink)  
Antiguo 11/11/2003, 03:29
 
Fecha de Ingreso: mayo-2002
Mensajes: 66
Antigüedad: 22 años, 1 mes
Puntos: 0
Hola de nuevo Haven.

¿Qué mensaje de error te da exactamente?
__________________
Un saludo,

Alberto
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:56.