Buenos dias, necesito un poco de ayuda con el tema de los combos.
Llevo todo el día intentando arreglar el siguiente problema:
Utilizo el codigo de listas dependientes de aspfacil, ese que tanto circula por este foro, y siempre me ha funcionado, pero ahora que lo quiero usar para mostrar otros datos, resulta que no me los muestra todos, es decir, tengo una tabla
rangos (id_rango, name_rango), otra
tipo_pieza (id_tipo_pieza, name_tipo_pieza) y una
joyeria_productos (id_joyeria_productos, id_rango, id_tipo_pieza).
Quiero mostrar el primer combo solo con los nombres de la piezas que estan en articulos (puede haber mas piezas en la tabla piezas que no esten en articulos y no se mostrarian) y luego otro combo en el que mostrar los rangos asociados a esa pieza en la tabla articulos.
Pues bien, si tengo 4 piezas con id_tipo_pieza "1", y 2 de ellas tienen id_rango "2" y otras 2 id_rango "3" solo me muestra 2 opciones en el desplegable, pero el problema es que las opciones que muestra son iguales, es decir 2 y 2 en lugar de 2 y 3.
En otro caso de 4 piezas de id_tipo_pieza "2", y 2 de ellas id_rango "3" y otras 2 de id_rango "4", me muestra bien, una de id_rango 3 y otra de 4.
He llegado a pensar que solo se queda con los ultimos valores de la tabla, pero porque no coge todos?
Código:
<form action="search.asp" method="post" name="RANGOSSS">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="16%" class="camposformJoyeria">Piezas</td>
<td width="26%"><select name="pieza" size="1" onChange="ComponerLista (document.forms.RANGOSSS.pieza[selectedIndex].value);" >
<option value="0" selected>Seleccione... </option>
<%
Dim oConn, rsTIPO_PIEZA, SQL, cuenta
set oConn=Server.CreateObject("ADODB.Connection")
set rsTIPO_PIEZA=Server.CreateObject("ADODB.Recordset")
oConn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("data/km0.mdb")
SQL="SELECT * FROM TIPO_PIEZA WHERE ID_TIPO_PIEZA IN (SELECT ID_TIPO_PIEZA FROM JOYERIA_PRODUCTOS)"
rsTIPO_PIEZA.Open SQL, oConn
cuenta=1
while not rsTIPO_PIEZA.EOF %>
<option value="<%=rsTIPO_PIEZA.Fields("ID_TIPO_PIEZA")%>"> <%=rsTIPO_PIEZA.Fields("NAME_TIPO_PIEZA")%></option>
<%
rsTIPO_PIEZA.MoveNext
cuenta=cuenta+1
wend
rsTIPO_PIEZA.Close
%>
</select></td>
<td width="14%">Precio</td>
<td width="25%"><select name="rango">
<option value="0" selected>Seleccione...</option></select></td>
<td width="19%">
<input type="submit" name="Submit" value="Buscar">
</td>
</tr>
</table>
</form></td>
</tr>
</table>
</td>
</tr>
</table>
<SCRIPT LANGUAGE="Javascript">
<!--
function Tupla ( campo1, campo2 )
{
this.campo1 = campo1;
this.campo2 = campo2;
}
<%
SQL="SELECT * from JOYERIA_PRODUCTOS"
rsTIPO_PIEZA.Open SQL, oConn
cuenta=0
cat="basura"
while not rsTIPO_PIEZA.EOF
if cat<>rsTIPO_PIEZA.Fields("ID_TIPO_PIEZA") then
cuenta=0
cat=rsTIPO_PIEZA.Fields("ID_TIPO_PIEZA") %>
var opciones<%=cat%> = new Array();
<% end if %>
opciones<%=cat%>[<%=cuenta%>]=new Tupla("<%=rsTIPO_PIEZA.Fields("id_RANGO")%>","<%=rsTIPO_PIEZA.Fields("ID_RANGO")%>");
<%
cuenta=cuenta + 1
rsTIPO_PIEZA.MoveNext
Wend
%>
<%
rsTIPO_PIEZA.Close
set rsTIPO_PIEZA=nothing
oConn.Close
set oConn = nothing
%>
var contador;
function ComponerLista ( array ) {
BorrarLista();
array = eval("opciones" + array);
for (contador=0; contador<array.length; contador++)
{
var optionObj = new Option( array[contador].campo1, array[contador].campo2 );
RANGOSSS.rango.options[contador] = optionObj;
}
}
function BorrarLista() {
RANGOSSS.rango.length=0;
}
-->
</SCRIPT>
</form>
Pueden comprobarlo en la siguiente direccion:
http://www.suntrapyasociados.com/pru...ria_marcas.asp
En esta otra esta hecha la prueba sin combos, pasando datos entre paginas (funciona correctamente y se pueden ver los valores que deberian salir):
http://www.suntrapyasociados.com/pruebas/prueba4.asp
Espero que puedan echarme una mano, si no para arreglarlo para decirme donde puede estar el error.
Muchas gracias.