Ver Mensaje Individual
  #8 (permalink)  
Antiguo 27/05/2003, 15:36
Lethe
 
Fecha de Ingreso: noviembre-2002
Ubicación: Caracas
Mensajes: 75
Antigüedad: 22 años, 5 meses
Puntos: 0
lpbrenes: cuenta con mi apoyo...


bakanzipp: efectivamente mis tres combos deben ser llenados a partir de una B.D. en access; porque son dinámicos todos.

El código que me envías funciona y es justamente el que utilizo para crear el 2do. combo; hasta allí todo va bien, pero tengo problemas para llenar el tercero, porque cuando construyo el sql que le corresponde basándome en el proceso de creación del 2do. combo; en la función: ComponerLista me genera un error en la instrucción: array = eval("opciones" + array);

Hasta ahora no he encontrado la manera de diferenciar las 2 Tuplas para evitar el error en dicha instrucción.



Ya encontré la manera...

Gracias a todos...

lpbrenes: espero que te sirva...


Código:
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
</HEAD>
<BODY>

<BR><BR>
<center>
<strong><font FACE="verdana" SIZE="4">Combos Dinámicos de doble dependencia</font></strong>

<FORM ACTION="" METHOD="POST" NAME="frmRecord">
<BR>
<TABLE BORDER=0 WIDTH="50%" class="DataForm">
	
	<TR>
		<TD WIDTH="45%">
		Proyecto:
		</TD>
		
		<TD WIDTH="71%">
			<%
			'---declaración de variables
			Dim Cnn, SQL, rs
			
			Set Cnn = Server.CreateObject("ADODB.Connection")
			Cnn.Open Application("CadenaConexion") 'conexion abierta
			
			SQL = "SELECT distinct proy.py_codigo, proy.py_titulo "
			SQL = SQL & " FROM Proyectos as proy, Informe_de_Avance_de_Proyecto as iap, Metricas_de_Proyecto as me "
			SQL = SQL & " Where proy.py_codigo = iap.rep_proyecto_cod "
			SQL = SQL & " And proy.py_codigo = me.me_proyecto_cod ORDER BY py_titulo"
			Set rs = Cnn.Execute(SQL) 					
			%>
			<Select Name="combo_proyecto" OnChange="ComponerLista (document.forms.frmRecord.combo_proyecto.value);">
				<%											
				if Not rs.Eof then 
					noRecord = 1
					While Not rs.EOF						
						%>
						<option value="<%=rs("py_codigo")%>"><%=rs("py_titulo")%></option>
						<%
						rs.MoveNext
					Wend					
				else
					noRecord = 0
					%>					
					<option value="Ninguno">Ninguno</option>
				<%end if
				rs.Close
				%>
			</Select>			
		</TD>
	</TR>
	
	<TR>
		<TD WIDTH="17%">
		Fecha de Informe de Avance:
		</TD>
		
		<TD WIDTH="71%">
			<Select Name="combo_fecha" style="display:none">					
			</Select>	
			<INPUT 
			TYPE="TEXT"
			NAME="fecha" 
			SIZE="10"
			maxlength="10"
			value="Ninguno"
			style="display:none"
			>		
		</TD>
	</TR>
		
	<TR>	
	<TR>
		<TD WIDTH="17%">
		Título de la Métrica:
		</TD>
		
		<TD WIDTH="71%">			
			<Select Name="combo_metrica_proyecto" style="display:none">				
			</Select>	
			<INPUT 
			TYPE="TEXT"
			NAME="metrica_proyecto" 
			SIZE="10"
			maxlength="10"
			value="Ninguno"
			style="display:none"
			>		
		</TD>
	</TR>

</TABLE>

</FORM>

</center>

</BODY>

<script language = "JavaScript">
<!--
//-------------------------------------
//--para crear combo número de riesgo
//-------------------------------------
function Tupla ( campo1, campo2 )
{
	this.campo1 = campo1;
	this.campo2 = campo2;	
}

<%
'---Vamos a crear nuestros arrays de proyectos desde ASP
'---El primer if detecta un cambio en el proyecto para
'---crear un nuevo array en Javascript

'-----------------------------------
' query de Informes de Proyecto
'------------------------------------
SQLInf = "Select rep_proyecto_cod, rep_fecha From Informe_de_Avance_de_Proyecto "
SQLInf = SQLInf & " Order By rep_proyecto_cod, rep_fecha"

set rsInf = CreateObject("ADODB.Recordset")
rsInf.Open SQLInf, Cnn

cuenta = 0
cat = "basura"

While Not rsInf.EOF

	if cat <> rsInf.Fields("rep_proyecto_cod") then		
		'---cambio de proyecto, empiezo a contar en 0
		cuenta = 0
		cat = rsInf.Fields("rep_proyecto_cod")		
	%>
		//además tengo que crear un nuevo array por proyectos
		var opciones<%=cat%> = new Array();
	<%
	end if		
	%>
	opciones<%=cat%>[<%=cuenta%>]=new Tupla("<%=rsInf.Fields("rep_fecha")%>","<%=rsInf.Fields("rep_fecha")%>");
	<%
	cuenta = cuenta + 1
	rsInf.MoveNext
	
wend

'---Limpiamos objetos
rsInf.Close
set rsInf = nothing
%>



<%
'----------------------------------
' query de Métricas de Proyecto
'----------------------------------
SQLMetrica = "Select me_proyecto_cod, me_metrica From Metricas_de_Proyecto "
SQLMetrica = SQLMetrica & " Order By me_proyecto_cod, me_metrica"
set rsMetrica = CreateObject("ADODB.Recordset")
rsMetrica.Open SQLMetrica, Cnn

x = 0
cod = "basura"
			
While Not rsMetrica.EOF

	if cod <> rsMetrica.Fields("me_proyecto_cod") then
		'---cambio de proyecto, empiezo a contar en 0
		x = 0
		cod = rsMetrica.Fields("me_proyecto_cod")
	%>
		//además tengo que crear un nuevo array por proyectos
		var MatrizMetr<%=cod%> = new Array();
	<%
	end if
	%>				
	MatrizMetr<%=cod%>[<%=x%>]=new Tupla("<%=rsMetrica.Fields("me_metrica")%>","<%=rsMetrica.Fields("me_metrica")%>");
	<%		
	x = x + 1		
	rsMetrica.MoveNext
	
wend

'---Limpiamos objetos
rsMetrica.Close
set rsMetrica = nothing
%>


// Declaración de variable
var contador;


//--------------------------------------------------
// Función que compone dos (2) listas dependientes
//--------------------------------------------------
function ComponerLista ( array ) 
{
	// Limpia opciones del select
	BorrarLista();
	
	// Asigna bandera de cantidad de registro del sql proyecto (1=hay registros 0=no hay)
	cantReg = <%=noRecord%>
	
	// Verifica si hay registros del combo padre
	if (cantReg==0) {
		// Despliega el tag <Input> en campo fecha y métrica
		document.forms.frmRecord.fecha.style.display = "";	
		document.forms.frmRecord.metrica_proyecto.style.display = "";		
		}
	else
		{
		// Despliega el tag <Select> en campo fecha y métrica
		document.forms.frmRecord.combo_fecha.style.display = "";		
		document.forms.frmRecord.combo_metrica_proyecto.style.display = "";	
		
		// Compone la lista dependiente a partir
		// del valor de la opcion escogida en la lista "padre"
		// Evalua el array "opciones" creado en tupla
		array = eval("opciones" + array);			
		for (contador = 0; contador < array.length; contador++) 
			{
			// añade elementos al combobox correspondiente a fecha de informe
			var optionObj = new Option( array[contador].campo1, array[contador].campo1);
			frmRecord.combo_fecha.options[contador] = optionObj;								
			} 
		
		// asigna el codigo de proyecto de la nueva opción seleccionada
		codigo_proy = document.forms.frmRecord.combo_proyecto.options[document.forms.frmRecord.combo_proyecto.selectedIndex].value;
		
		// Compone la lista dependiente a partir
		// del valor de la opcion escogida en la lista "padre"
		// Evalua el array "MatrizMetr" creado en tupla
		Metr = eval("MatrizMetr" + codigo_proy);		
		for (contador = 0; contador < Metr.length; contador++) 
		{
			// añade elementos al combobox correspondiente a métrica de proyecto
			var optionObj1 = new Option( Metr[contador].campo2, Metr[contador].campo2 );
			frmRecord.combo_metrica_proyecto.options[contador] = optionObj1;					
		} 				
		}					
} 


//-----------------------------------
// Función que limpia las opciones 
// de los combos dependientes
//-----------------------------------
function BorrarLista() 
{
	frmRecord.combo_fecha.length = 0;
	frmRecord.combo_metrica_proyecto.length = 0;
}


//Inicializamos
ComponerLista (document.forms.frmRecord.combo_proyecto.value);

-->
</script>


</HTML>

Última edición por Lethe; 27/05/2003 a las 15:36