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

Alguien que me ayude con este codigo!!!!!

Estas en el tema de Alguien que me ayude con este codigo!!!!! en el foro de ASP Clásico en Foros del Web. EStoy tratando de hacer este formulario La comuna depende de lo que se escoja en region. Estoy utilizando el evento onchange pero no funca <form ...
  #1 (permalink)  
Antiguo 04/03/2004, 13:35
 
Fecha de Ingreso: marzo-2003
Ubicación: onde toy?
Mensajes: 1.437
Antigüedad: 21 años, 3 meses
Puntos: 9
Exclamación Alguien que me ayude con este codigo!!!!!

EStoy tratando de hacer este formulario La comuna depende de lo que se escoja en region. Estoy utilizando el evento onchange pero no funca

<form action="regmed.asp" method="post" name="registro">
<table width="450" align="center" class="tabla">
<tr>
<td colspan="3"><div align="center" class="Cuerpo">Ingreso de Datos Profesionales</div></td>
</tr>
<tr>
<td class="borde">Regi&oacute;n</td>
<td> <select class="input" name="region" maxlength="15" onChange="ComponerLista (document.forms.Listas.region[selectedIndex].value);" >
<option value="0" selected>Seleccione Region</option>
<%

Set Mi_Conexion = Server.CreateObject("ADODB.Connection")
Set Res = Server.CreateObject("ADODB.Recordset")
Mi_Conexion.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=C:\Inetpub\wwwroot\horas\horas.mdb;"
sql = "SELECT * FROM region order by cod_region"
Set Res = Mi_Conexion.Execute(sql)
While Not res.EOF
%>
<option value="<%=res("cod_region")%>" ><%=res("nombre_region")%></option>
<%
res.MoveNext
Wend
res.Close
set res = nothing
Mi_Conexion.close
set Mi_Conexion= nothing
%>
</select></td>
<td class="obligado">*</td>
</tr>
<tr>
<td class ="borde">Comuna</td>
<td><SELECT NAME="comuna" SIZE="1">
</SELECT> </td>
<td class="obligado">*</td>
</tr>
</table>
<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 comuna where cod_region = "&cod_region&""
res.Open SQL, Mi_conexion
cuenta=0
cat="basura"
while not res.EOF
if cat<>res.Fields("region") then
' cambio de categoria, empiezo a contar en 0
cuenta=0
cat=res.Fields("region")
'además tengo que crear un nuevo array para la categoría
%>
var opciones<%=cat%> = new Array();
<%
end if
%>
opciones<%=cat%>[<%=cuenta%>]=new Tupla("<%=res.Fields("cod_ciudad")%>","<%=res.Fiel ds("comuna")%>");

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


<%
'Limpiamos objetos
res.Close
set res=nothing
Mi_conexion.Close
set Mi_conexion=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.comuna.options[contador] = optionObj;
} // for
} // ComponerLista


function BorrarLista() {

Listas.comuna.length=0;
}

//Inicializamos
ComponerLista (1);

-->
</SCRIPT>
</form></td>
</tr>
</table>
__________________
Buena Vida...
Francisco
  #2 (permalink)  
Antiguo 04/03/2004, 17:54
Avatar de kalijunfan  
Fecha de Ingreso: febrero-2004
Ubicación: Montevideo, Uruguay
Mensajes: 96
Antigüedad: 20 años, 3 meses
Puntos: 0
Estimado Bluesman74cl, no me extraña en lo más mínimo que tu código no funcione, ya que estás tratando de abrir un recordset con la conexión cerrada.
Si te fijás detalladamente cuando armás el primer select "region", después que terminaste el while ya cerrás y destruís Mi_Conexion.
En la segunda consulta que hacés a la base de datos, cuando querés armar el select "comuna" estás tratando de usar Mi_Conexion como si fuera una conexión abierta a la base de datos y no vas a poder hacerlo nunca si no la volvés a abrir antes.
Hay varias cosas que optimizar en tu código pero de momento te voy a corregir solamente tu error asp.
Para que no te compliques mucho la cabeza te recomiendo que no cierres la conexión a la base de datos hasta que no hayas terminado de usarla, eso quiere decir después de haber completado el select "comuna", o sea que tu código quedaría así:

Código PHP:
<form action="regmed.asp" method="post" name="registro">
<
table width="450" align="center" class="tabla">
<
tr
<
td colspan="3"><div align="center" class="Cuerpo">Ingreso de Datos Profesionales</div></td>
</
tr>
<
tr
<
td class="borde">Región</td>
<
td> <select class="input" name="region" maxlength="15" onChange="ComponerLista (document.forms.Listas.region[selectedIndex].value);" >
<
option value="0" selected>Seleccione Region</option>
<%

Set Mi_Conexion Server.CreateObject("ADODB.Connection")
Set Res Server.CreateObject("ADODB.Recordset")
Mi_Conexion.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=C:\Inetpub\wwwroot\horas\horas.mdb;"
sql "SELECT * FROM region order by cod_region"
Set Res Mi_Conexion.Execute(sql)
While 
Not res.EOF
%>
<
option value="<%=res("cod_region")%>" ><%=res("nombre_region")%></option>
<%
res.MoveNext
Wend
res
.Close
set res 
nothing
%>
</
select></td>
<
td class="obligado">*</td>
</
tr>
<
tr
<
td class ="borde">Comuna</td>
<
td><SELECT NAME="comuna" SIZE="1">
</
SELECT> </td>
<
td class="obligado">*</td>
</
tr>
</
table>
<
SCRIPT LANGUAGE="Javascript">
<!--
function 
Tupla campo1campo2 )
{
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 comuna where cod_region = "&cod_region&""
res.Open SQL, Mi_conexion
cuenta=0
cat="basura"
while not res.EOF 
if cat<>res.Fields("region") then
cambio de categoriaempiezo a contar en 0
cuenta
=0
cat
=res.Fields("region")
'además tengo que crear un nuevo array para la categoría
%>
var opciones<%=cat%> = new Array();
<%
end if
%>
opciones<%=cat%>[<%=cuenta%>]=new Tupla("<%=res.Fields("cod_ciudad")%>","<%=res.Fields("comuna")%>");

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


<%
'
Limpiamos objetos
res
.Close
set res
=nothing
Mi_conexion
.Close
set Mi_conexion
=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=0contador<array.lengthcontador++) 
{
// añade elementos nuestro combobox
var optionObj = new Option( array[contador].campo1, array[contador].campo2 );

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


function BorrarLista() {

Listas.comuna.length=0;
}

//Inicializamos
ComponerLista (1);

-->
</SCRIPT>
</form></td>
</tr>
</table> 
Esto siempre y cuando estés utilizando la misma base de datos, si estás usando otra base de datos, lo cual no te lo recomiendo, menos trabajando con access, vas a tener que dejar el código como lo tenías y volver a abrir otra conexión a la base de datos que corresponda cuando quieras completar el select "comuna".

Mirá que ni siquiera verifiqué el código javascript que estás usando para crear el select, pero como lo primero que me saltó a la vista fue este error, estoy casi seguro que sea esto por lo que no te funciona.

Espero que esto solucione tu problema.

P.D.: Te recomiendo que empieces a utilizar OLEDB para conectarte a la base de datos en lugar de ODBC como estás usando ahora, OLEDB tiene una performance superior. Además también sería conveniente que obtuvieras todos los registros de un solo tiro, usando GetRows y después manipules el array que te devuelve de registros, es increíblemente más rápido que un while.

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 01:12.