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

Combos enlazados

Estas en el tema de Combos enlazados en el foro de ASP Clásico en Foros del Web. Hola, tengo 2 combos ke tienen ke estar enlazados, es decir ke cuando de elige un valor del 1º(previamente los datos los cargo de una ...
  #1 (permalink)  
Antiguo 10/06/2004, 06:34
 
Fecha de Ingreso: junio-2004
Mensajes: 52
Antigüedad: 20 años, 11 meses
Puntos: 0
Exclamación Combos enlazados

Hola, tengo 2 combos ke tienen ke estar enlazados, es decir ke cuando de elige un valor del 1º(previamente los datos los cargo de una base de datos) Se tiene ke cargar los valores en relacion al valor elegido en la 1º lista.

El código ke tengo es este:
Código:
<form action="" name="form1">
<select name="select" class="normalform" onChange = "ComponerLista(document.forms.form1.select[selectedIndex].value);">
<option>Especialidades</option>
<% 
dim con,rs,sql,cuenta,cat
Set db = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
con="DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & server.MapPath("/riojavina/bbddRiojavina.mdb")
db.open con
set rs=db.execute("Select distinct NomVariedad From Productos")
do while not rs.EOF
Response.Write "<option Value='" & rs.fields("NomVariedad") & "'>" & rs.fields("NomVariedad") & "</option>"
rs.MoveNext
Loop
rs.Close()
rs=null
db.Close()
%>
</select>
<p> 
<select name="menu1" class="normalform" onChange="MM_jumpMenu('parent',this,1)">
<option selected>Productos </option>
</select>
<SCRIPT LANGUAGE="Javascript">
<!--
function Tupla ( campo1, campo2 )
{
this.campo1 = campo1;
this.campo2 = campo2;
}
<%
'Vamos a crear nuestros arrays de productos desde ASP
'El primer if detecta un cambio en la categoría para
'crear un nuevo array en Javascript
						

db.open con
set rs=db.execute("SELECT * FROM Productos ORDER BY NomProducto")
cuenta=0
cat="basura"
do while not rs.EOF 
if cat<>rs.Fields("NomVariedad") then
'cambio de categoria, empiezo a contar en 0
cuenta=0
cat=rs.Fields("NomVariedad")
'además tengo que crear un nuevo array para la categoría
%>
var opciones<%=cat%> = new Array();
<%
end if
%>
opciones<%=cat%>[<%=cuenta%>]=new Tupla("<%=rs.Fields("NomProducto")%>","<%=rs.Fields("EAN")%>");
<%
cuenta=cuenta+1
rs.MoveNext
Loop
%>
<%
'Limpiamos objetos
rs.Close()
rs=null
db.Close()
%>
var contador;

function ComponerLista (array) 
{
// Compone la lista dependiente a partir
// del valor de la opcion escogida en la lista "padre"
BorrarLista();
array = eval("opciones" + array);
for (contador=0; contador<array.length; contador++) 
{
// añade elementos nuestro combobox
var optionObj = new Option( array[contador].campo1, array[contador].campo2 );
form1.menu1.options[contador] = optionObj;
} // for
} // ComponerLista
							
function BorrarLista() 
{
form1.menu1.length=0;
}
//Inicializamos
ComponerLista (1);
-->
</SCRIPT>
</p></form>
Me carga los datos desde la base de datos en el 1º select, lo ke no me hace es cargarmelos en el segundo despues de seleccionar en el 1º

Muxas gracias
  #2 (permalink)  
Antiguo 10/06/2004, 06:38
Avatar de deccweb  
Fecha de Ingreso: febrero-2003
Ubicación: Mataro
Mensajes: 365
Antigüedad: 22 años, 2 meses
Puntos: 0
ahora te paso uno q use yo
__________________
Calle17.net

edgargranados.es
  #3 (permalink)  
Antiguo 10/06/2004, 06:40
Avatar de deccweb  
Fecha de Ingreso: febrero-2003
Ubicación: Mataro
Mensajes: 365
Antigüedad: 22 años, 2 meses
Puntos: 0
<SELECT NAME="curs" SIZE="1"
OnChange="ComponerLista (document.forms.Listas.curs[selectedIndex].value);">
<%
Dim oConn, rs, SQL, cuenta, categoria

set oConn=Server.CreateObject("ADODB.Connection")
set rs=Server.CreateObject("ADODB.Recordset")
oConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("cursos.mdb")

SQL="SELECT * FROM INI"
rs.Open SQL, oConn
cuenta=1
while not rs.EOF
%>
<OPTION VALUE="<%=rs.Fields("id")%>"
<% if cuenta=1 then%>
SELECTED
<%end if%>>
<%=rs.Fields("Curs")%></OPTION>
<%
rs.MoveNext
cuenta=cuenta+1
wend
rs.Close
%>
</SELECT>
<P><B></B>
<SELECT NAME="data" SIZE="1">
</SELECT><SCRIPT LANGUAGE="Javascript">
<!--
function Tupla ( campo1, campo2 )
{
this.campo1 = campo1;
this.campo2 = campo2;
}

<%
'Vamos a crear nuestros arrays de productos desde ASP
'El primer if detecta un cambio en la categoría para
'crear un nuevo array en Javascript

SQL="SELECT * FROM Productos ORDER BY Categoria, IdProducto"
rs.Open SQL, oConn
cuenta=0
cat="basura"
while not rs.EOF
if cat<>rs.Fields("Categoria") then
' cambio de categoria, empiezo a contar en 0
cuenta=0
cat=rs.Fields("Categoria")
'además tengo que crear un nuevo array para la categoría
%>
var opciones<%=cat%> = new Array();
<%
end if
%>
opciones<%=cat%>[<%=cuenta%>]=new Tupla("<%=rs.Fields("nombre")%>","<%=rs.Fields("id producto")%>");

<%
cuenta=cuenta+1
rs.MoveNext
wend
%>


<%
'Limpiamos objetos
rs.Close
set rs=nothing
oConn.Close
set oConn=nothing
%>

var contador;

function ComponerLista ( array ) {
// Compone la lista dependiente a partir
// del valor de la opcion escogida en la lista "padre"
BorrarLista();
array = eval("opciones" + array);

for (contador=0; contador<array.length; contador++)
{
// añade elementos nuestro combobox
var optionObj = new Option( array[contador].campo1, array[contador].campo2 );

Listas.data.options[contador] = optionObj;
} // for
} // ComponerLista


function BorrarLista() {

Listas.data.length=0;
}

//Inicializamos
ComponerLista (1);

-->
</SCRIPT>
__________________
Calle17.net

edgargranados.es
  #4 (permalink)  
Antiguo 10/06/2004, 06:40
 
Fecha de Ingreso: junio-2004
Mensajes: 52
Antigüedad: 20 años, 11 meses
Puntos: 0
Muxas gracias, si puedes enviamelo a [email protected]
  #5 (permalink)  
Antiguo 10/06/2004, 12:58
(Desactivado)
 
Fecha de Ingreso: agosto-2002
Mensajes: 1.458
Antigüedad: 22 años, 9 meses
Puntos: 0
con un tercer combox enlazandolo con el segundo , como se haria ?
  #6 (permalink)  
Antiguo 11/06/2004, 03:32
 
Fecha de Ingreso: junio-2004
Mensajes: 52
Antigüedad: 20 años, 11 meses
Puntos: 0
No funciona...

Hola, la verdad es ke sigue sin salirme. Probe con el código ke me dijisteis pero no me funciona. Me he asegurado de ke tengo bien todos los nombres y rutas pero no hace nada el combo.

El resultado se puede ver en: www.2dmayo.com/riojavina/html/alino.asp

Y tengo este código en la función del 2º combo. Si alguien me puede decir en ke falla...

Código:
<SCRIPT LANGUAGE="Javascript">
<!--
function Tupla ( campo1, campo2 )
{
this.campo1 = campo1;
this.campo2 = campo2;
}
<%
'Vamos a crear nuestros arrays de productos desde ASP
'El primer if detecta un cambio en la categoría para
'crear un nuevo array en Javascript

db.open con
set rs=db.execute("SELECT * FROM Productos ORDER BY NomProducto")
cuenta=0
cat="basura"

do while not rs.EOF 
if cat<>rs.Fields("NomVariedad") then
'cambio de categoria, empiezo a contar en 0
cuenta=0
cat=rs.Fields("NomVariedad")
'además tengo que crear un nuevo array para la categoría
%>
							
var opciones<%=cat%> = new Array();
<%
end if
%>
						
opciones<%=cat%>[<%=cuenta%>]=new Tupla("<%=rs.Fields("NomProducto")%>","<%=rs.Fields("EAN")%>");
					
<%
cuenta=cuenta+1
rs.MoveNext
Loop
%>								 <%
'Limpiamos objetos
rs.Close()
rs=null
db.Close()
%>
							
var contador;
							
function ComponerLista (array) 
{
// Compone la lista dependiente a partir
// del valor de la opcion escogida en la lista "padre"
BorrarLista();
array = eval("opciones" + array);

for (contador=0; contador<array.length; contador++) 
{
// añade elementos nuestro combobox
var optionObj = new Option( array[contador].campo1, array[contador].campo2 );
form1.menu1.options[contador] = optionObj;
} // for
} // ComponerLista
							
function BorrarLista() 
{
form1.menu1.length=0;
}
//Inicializamos
ComponerLista (1);
-->
</SCRIPT>
  #7 (permalink)  
Antiguo 11/06/2004, 06:42
 
Fecha de Ingreso: junio-2004
Mensajes: 52
Antigüedad: 20 años, 11 meses
Puntos: 0
ya me ha salido!!! Al final he optado x las soluciones faciles, ke son las ke siempre van mejor, y me he dejado de complicaciones (me he comido la cabeza demasiado y al final me ha salido a mí solo sin utilizar códigos complicados). El código es muy facil(mucho más de lo ke pensaba) aki os lo dejo x si algún día os surge el mismo problema ke a mí.

Código:
<form action="alino.asp" name="form1" method="post">
                                            <select name="select" class="normalform" onChange = "javascript:form1.submit()">
                                              <option>Especialidades</option>
                                             <% 
											  	dim con,rs,sql,cuenta,cat
												Set db = Server.CreateObject("ADODB.Connection")
												Set rs = Server.CreateObject("ADODB.Recordset")
												con="DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & server.MapPath("/riojavina/data/bbddRiojavina.mdb")
												db.open con

												set rs=db.execute("Select distinct NomVariedad From Productos")

												do while not rs.EOF
												Response.Write "<option Value='" & rs.fields("NomVariedad") & "'>" & rs.fields("NomVariedad") & "</option>"
												rs.MoveNext
												Loop
												rs.Close()
												rs=null
												db.Close()
												
											%>
                                            </select>
                                        <p> 
                                            <select name="menu1" class="normalform" onChange="MM_jumpMenu('parent',this,1)">
                                              <option selected>Productos </option>
                                            
											<% 
											  	
												Set db = Server.CreateObject("ADODB.Connection")
												Set rs = Server.CreateObject("ADODB.Recordset")
												con="DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & server.MapPath("/riojavina/data/bbddRiojavina.mdb")
												db.open con

												set rs=db.execute("Select distinct NomProducto From Productos where NomVariedad='" & request.Form("select") & "'")

												do while not rs.EOF
												Response.Write "<option Value='" & rs.fields("NomProducto") & "'>" & rs.fields("NomProducto") & "</option>"
												rs.MoveNext
												Loop
												rs.Close()
												rs=null
												db.Close()	
											%></select>
										</p></form>
Aki lo teneis, gracias a todos los ke se han preocupado.
  #8 (permalink)  
Antiguo 07/09/2004, 08:34
Avatar de dobled  
Fecha de Ingreso: enero-2002
Ubicación: Rancagua - Chile
Mensajes: 1.328
Antigüedad: 23 años, 3 meses
Puntos: 2
esta excelente justo lo que necesitaba
__________________
Usa títulos específicos y con sentido
En las listas de correo o en los grupos de noticias, la cabecera del mensaje es tu oportunidad de oro para atraer la atención de expertos cualificados en aproximadamente 50 caracteres o menos. No los desperdicies en balbuceos como "Por favor ayúdame" (de "POR FAVOR AYÚDAME!!!" ya ni hablamos). No intentes impresionarnos con lo profundo de tu angustia; mejor usa ese preciado espacio para una descripción lo más concisa posible del problema.
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 05:36.