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

Como hacer Combos ligando Estado-Ciudad

Estas en el tema de Como hacer Combos ligando Estado-Ciudad en el foro de ASP Clásico en Foros del Web. Hola que tal, ando buscando un codigo de ejemplo para ligar lo q viene siendo, el estado con la ciudad en dos combos, osea un ...
  #1 (permalink)  
Antiguo 23/06/2005, 16:47
Avatar de Gaby_Corr  
Fecha de Ingreso: junio-2005
Mensajes: 672
Antigüedad: 19 años, 11 meses
Puntos: 0
Como hacer Combos ligando Estado-Ciudad

Hola que tal, ando buscando un codigo de ejemplo para ligar lo q viene siendo, el estado con la ciudad en dos combos, osea un combo tiene todos los estados y si selecciona uno de esos, que automaticamente en el otro combo aparezcan las ciudades respectivas del estado previamente seleccionado.

me habia parecido leer algo similar pero no lo hayo!!! , alguien tiene un ejemplo de eso???, se los agradeceria infinitamente

  #2 (permalink)  
Antiguo 23/06/2005, 17:02
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 24 años, 2 meses
Puntos: 535
Buscá "selects (o combos) dependientes" acotando al foro ASP. Es una pregunta un tanto frecuente!
__________________
...___...
  #3 (permalink)  
Antiguo 23/06/2005, 21:03
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 23 años, 4 meses
Puntos: 4
sacado de asptutor

http://www.asptutor.com/asp/vart.asp?id=102
Código:
 <html> 

<head>
<title>Combos combinados</title>

<script language = "JavaScript">

 

<%'CONSULTA PARA OBTENER LOS DATOS
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\database\hard.mdb"))

productos_Sql = "Select distinct familia, codigo, denominacion from articulos "
set rs = CreateObject("ADODB.Recordset")
rs.Open productos_Sql, Conn
x=0
%>

// FUNCION DE COMBO BOX COMBINADO

function sublist(inform, selecteditem)
{
inform.subcatagory.length = 0

<%
count= 0
y=0
do while not rs.eof
%>

x = <%= trim(y) %>;

subcat = new Array();
subcatagorys = "<%=(rs("codigo"))&" "&(rs("denominacion")) %>";
subcatagoryof = "<%=(rs("familia"))%>";
subcatagoryid = "<%=(rs("codigo"))%>";
subcat[x,0] = subcatagorys;
subcat[x,1] = subcatagoryof;
subcat[x,2] = subcatagoryid;
if (subcat[x,1] == selecteditem) {
var option<%= trim(count) %> = new Option(subcat[x,0], subcat[x,2]);
inform.subcatagory.options[inform.subcatagory.length]=option<%= trim(count)%>;
}
<%
count = count + 1
y = y + 1
rs.movenext
loop
rs.close
%>
}

</script>

 

</head>

<body bgcolor="#CDB1B7">
<h2 align="center"><b><i><font color="#AE1732"><u>Combo-box enlazados </u></font></i></b></h2>
<form name="prueba">
<div align="center">
<center>
<table border="0" width="80%">
<tr>

<td width="77%">
<select size="1" id="familia" name="familia" onChange = "javascript:sublist(this.form, familia.value);">

<option selected>Selecciona una familia</option>
<%familias_Sql = "Select distinct id,familia from familias"
rs.Open familias_Sql, Conn
do while not rs.eof
%>
<option value="<%=rs("id")%>"><%=rs("familia")%></option>


<%rs.movenext
loop
set rs=nothing
conn.close
set conn=nothing%>
</select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SELECT id="subcatagory" name="subcatagory" size="1">
<Option selected value="none"></option>
</SELECT></td>
<td width="9%">
<p align="left">

</p>

</td>
</tr>
</table>
</center>
</div>
<center>
</form>
</center>
</body>
</html>
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #4 (permalink)  
Antiguo 24/06/2005, 08:33
Avatar de Gaby_Corr  
Fecha de Ingreso: junio-2005
Mensajes: 672
Antigüedad: 19 años, 11 meses
Puntos: 0
ok, muchas gracias por el ejemplo, vamos a meterle mano a ver como me queda

SAluditos y muchas gracias !!! =D
  #5 (permalink)  
Antiguo 24/06/2005, 09:52
Avatar de Gaby_Corr  
Fecha de Ingreso: junio-2005
Mensajes: 672
Antigüedad: 19 años, 11 meses
Puntos: 0
de nuevo, intenté adaptarlo pero me marca este error:

Error Type:
Microsoft JET Database Engine (0x80004005)
Not a valid file name.
verarticulo.asp, line 12

que podra ser ????

no tienen un ejemplo de combos, pais --> estado --> ciudad ???
me estoy matando por hacerlo y no he podido ='(
  #6 (permalink)  
Antiguo 24/06/2005, 10:12
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Cual es la linea 12? de seguro es donde abres tu base de datos, pues tienes que adecuar el script.

La verdad es que yo particularmente nunca he hecho 3 combos dependientes, pero me imagino debe ser casi lo mismo.

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #7 (permalink)  
Antiguo 24/06/2005, 10:50
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 20 años, 1 mes
Puntos: 2
Hola!

Si es posible, y es exactamente igual, asi como logras que estado dependa de pais, asi mismo, ciudad depende de estado, sin embargo para algo asi, de forma dinamica necesitas arreglos de JavaScript muy grandes, lo que se vuelve una tarea muy pesada, porque es mucha info.

Lo que haces otros es usar tecnicas con iframes, puedes ver un ejemplo en lavalife.com, buca la parte donde manejan localidades, la tecnica que utilizan es muy buena, pero igual, es algo ya mucho mas avanzado.

Suerte!!
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #8 (permalink)  
Antiguo 24/06/2005, 10:58
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Cita:
Lo que haces otros es usar tecnicas con iframes, puedes ver un ejemplo en lavalife.com, buca la parte donde manejan localidades, la tecnica que utilizan es muy buena, pero igual, es algo ya mucho mas avanzado.
Coincido con lo de javascript, particularmente para pais->estado->ciudad, la tarea debe ser inmensa, pero por otro lado, el uso de iframes es compatible con la mayoria de los browsers?

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #9 (permalink)  
Antiguo 24/06/2005, 11:00
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 20 años, 1 mes
Puntos: 2
Nop!

Me parece que Iframe es compatible con todos o bien con la mayoría de los browsers, sin embargo solo en sus versiones mas nuevas, en versiones viejas no es compatible.
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #10 (permalink)  
Antiguo 24/06/2005, 11:06
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Lo que sucede es que tenia entendido que solo se visualizaban bien en IE, pero esta es info bastante vieja, solo una vez tuve que trabajar con iframes, asi que los desconozco por completo, y ahora estoy tratando de estandarizar todo para IE, FireFox, con eso creo es suficiente desde mi punto de vista.

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #11 (permalink)  
Antiguo 24/06/2005, 11:21
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 20 años, 1 mes
Puntos: 2
Hola

No conozco FireFox, pero por ejemplo, esto de los Iframes y otras cosas de javascript y dhtml, siempre lo pruebo con IE y Netscape, porque como son casi totalmente diferentes, y son plataformas bases para otros, bueno, pues me da mas confianza, tendre que descargar el FireFox para tener otro navegador de referencia, pero bueno, en lo ultimo que lei de Iframe, decia lo que puse arriba, es una tecnologia relativamente nueva, y ya las nuevas versiones de los navegadores la estan tomando en cuenta, sin embargo, si miras el codigo de javascript que estan usando en lavalife, notaras que estan tomando en cuenta muchas plataformas, sera cosa de ver si FireFox entra en alguna de ellas...

Por cierto, donde me desacargo el FireFox...

Gracias.
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #12 (permalink)  
Antiguo 24/06/2005, 11:26
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
www.firefox.com , en realidad creo que el estandar ahora sera IE - FireFox, Netscape esta destinado
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #13 (permalink)  
Antiguo 24/06/2005, 11:57
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 20 años, 1 mes
Puntos: 2
Si

Si, estoy de acuerdo en que Netscape se esta qeudando en el olvido, y he oido mentar mucho a FireFox, entonces es una posibilidad.

Gracias.
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #14 (permalink)  
Antiguo 24/06/2005, 12:07
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 20 años, 1 mes
Puntos: 2
Lo probe..

Baje firefox y probe la pagina de lavalife y funciona correctamente, solo un detallito visual cuando intentas elegir una opcion con la letra inicial, pero funciona correcto.

Me recuerda a como en Netscape a veces cuando haces un cambio de layers se ve un brinquito.

Pero si es compatible.

Suerte!!
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #15 (permalink)  
Antiguo 24/06/2005, 15:33
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 20 años, 1 mes
Puntos: 9
Yo a los combos dependientes los hago distinto, ya que haciendolo con javascript estarías bajando demasiada información (aún con dos select solos) al cliente y que va a usar únicamente el 10% de ella siendo generoso, ya que va a elegir su estado y se va a actualizar con sus respectivas ciudades, por lo tanto, estaríamos demorando en bajar información que en definitiva gran parte de ella no va a ser utilizable por el cliente.
Esto es lo que hago, no se que les parecerá, asi que antes de usarlo Gaby Corr, te recomiendo que esperes algún comentario de los que saben.

<script>
function ir(){
var selected_option = document.categorias.negocios.options[document.categorias.negocios.selectedIndex]
url = selected_option.value
selected_option.selected = true;
window.location = url;
}
</script>
</head>

<body>
<%
Dim IdNegocio
if Request.QueryString("id_neg") = "" then
IdNegocio = 1
else
IdNegocio = Request.QueryString("id_neg")
end if

set conexion = Server.CreateObject("ADODB.Connection")
conexion.Open Application("Conexion")
set RS = Server.CReateObject("ADODB.RecordSet")
RS.Open "SELECT IdNegocio, Nombre FROM negReg", conexion
%>
<Form Method="POST" action="somethin.asp" name="categorias">
<Select name="negocios" onchange="ir()">
<option>[Seleccione Un negocio]</option>
<%
I = 0
do until RS.EOF
%>
<option value="combos.asp?id_neg=<%=RS("IdNegocio")%>"><%= RS("Nombre")%></option>
<%
RS.MoveNext
loop
RS.Close
set RS = nothing
%>
</Select>
<%
set snd = Server.CreateObject("ADODB.RecordSet")
snd.Open "SELECT Nombre FROM Productos WHERE IdNegocio = "&IdNegocio&"", conexion
%>
<select name="Productos">
<%
do until snd.EOf
%>
<option><%=snd("Nombre")%>
<%
snd.MoveNext
Loop
snd.Close
set snd = nothing
conexion.CLose()
set conexion = nothing
%>
</select>
</Form>

La estructura que deberías tener en tu base de datos sería la siguiente: dos tablas, una llamada Estado (en tu caso) y otra llamada Ciudades. Estas dos tablas obviamente hay que relacionarlas, lo mejor sería con un Id de Estado. Es decir, digamos que estamos en Argentina, la Provincia de Córdoba tiene el Id 1, y todas las ciudades que integran esta provincia van a tener un campo, por ejemplo, IddeEstado, con el valor de su provincia, en este caso 1. Y así sucesivamente, Buenos Aires Id 2, Santa Fe Id 3, etc y sus correspondientes ciudades los valores que correspondan.
Es lo único que necesitas en cuanto a la base de datos.
Yo en mi caso tengo una tabla con los negocios registrados en mi futuro sitio, y en otra tabla guardo todos los productos de todos los negocios relacionados con el Id del negocio al que corresponde ese producto. Es perfectamente aplicable a tu caso.
Espero que te haya sido de ayuda.
Saludos!.
__________________
Add, never Remove
  #16 (permalink)  
Antiguo 24/06/2005, 15:41
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 20 años, 1 mes
Puntos: 2
Hola!

Ahi lo que haces es refrescar la pagina con el negocio seleccionado y asi llenar el siguiente ?
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #17 (permalink)  
Antiguo 24/06/2005, 15:48
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 20 años, 1 mes
Puntos: 9
Cada value del primer select tiene una direccion URL que apunta hacia la misma página, y a la cual le paso una variable "id_neg", la cual es la que me sirve para filtrar los registros del segundo select. Lo malo de esto es que se realizan hacen muchas conexiones a la base de datos, pero lo bueno es que te muestra y se gastan recursos en obtener pura y exclusivamente la información que pide y que va a utilizar el usuario.
Un saludo.
__________________
Add, never Remove
  #18 (permalink)  
Antiguo 24/06/2005, 16:00
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 20 años, 1 mes
Puntos: 2
Si..

Ahi radica una diferencia, ademas cabe el caso, casi siempre, que ademas del combo tienes muchos otros campos en un formulario, y resulta pesado estar controlando ese caso, bueno, en mi caso, para Pais-Estado si he preferido dejarlo en javascript, pero es para localidad, por lo que tengo un script donde genero un archivo de JS, el cual es el que agrego en el html que lo necesita, es decir, tengo esa funcionalidad separada, asi, cuando llegas a un lugar que necesita la localidad, usa realmente un JS ya creado, eso evita muchas conexiones de database por usuario, también, al estar en un archivo, solamente la primera vez se toma su tiempo en descargar hacia el cliente, las siguiente ya estan en el cache del cliente, lo cual vuelve todo el proceso mucho mas rapido.

Pero para cosas mas grandes, como pais-estado-ciudad, si estoy desarrollando algo con iframe, para no tener que refrescar la pagina, y ademas con el metodo que ya tengo, evitar muchas consultas.

Pero bueno, todo es valido segun el caso en el que lo estas aplicando, ahi comolo tienes si es mejor, yo tambien tengo cosas como, Categoria - SubCategoria - Otra SubCategoria, que las tengo hasta en tres paginas, pagina1 pide una parte, pagina 2 la siguiente, etc.

Todo depende del caso a veces.

Suerte!!
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #19 (permalink)  
Antiguo 24/06/2005, 16:14
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 20 años, 1 mes
Puntos: 9
Toda la razón tienes Neuron, no había pensado en el caso esté específico que lo debe tener en un formulario de registro seguramente, lo cual le va a resultar realmente dificultoso mantener el valor de cada uno de los campos del formulario. Quizás con algo de javascript lo pueda solucionar.
Por otra parte, me interesó lo que dijiste acerca del archivo que se almacena en el caché, no sabía realmente que era así esto. Se aplica eso también para un archivo XML?.
Saludos!.
__________________
Add, never Remove
  #20 (permalink)  
Antiguo 24/06/2005, 16:18
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 20 años, 1 mes
Puntos: 2
No se...

De XML no se nada.
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #21 (permalink)  
Antiguo 24/06/2005, 16:53
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 20 años, 1 mes
Puntos: 2
Hola!

Revise los temporales, y al parecer si, XML tambien se descarga como archivo y se guarda en el temporal, bueno, por lo menos en mis temporales puedo ver varios.
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #22 (permalink)  
Antiguo 24/06/2005, 19:56
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 20 años, 1 mes
Puntos: 9
Muchas gracias Neuron por hacermelo saber, ya que cada vez estoy usando más archivos xml para almacenar algunos datos que no quiero guardar en la base de datos, ya uqe no justifican hacer una conexión para rescatarlos de allí.
Un saludo y nuevamente gracias!.
__________________
Add, never Remove
  #23 (permalink)  
Antiguo 27/06/2005, 08:18
Avatar de Gaby_Corr  
Fecha de Ingreso: junio-2005
Mensajes: 672
Antigüedad: 19 años, 11 meses
Puntos: 0
Hola chicos!!, muchas gracias por todos sus comentarios, me han pasado un ejemplo que es muy parecido a lo que comenta Mariano, por el momento lo voy a dejar asi, solo para salir de la bronca pero espero que si alguien tiene un ejemplo me lo pueda enviar por mail,jeje.


Otra cosa chicos, como puedo mandar el valor de un combo box a un mail ??, ya lo he hecho con elementos de un formularion , puros campos de textos pero conun combo y un check box nooo, como le puedo hacer ??

Saludos y muchas gracias!! =D=D
  #24 (permalink)  
Antiguo 27/06/2005, 11:20
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 20 años, 1 mes
Puntos: 9
De la misma forma que haces con los campos de texto. Todo elemento de formulario tiene dos atributos importantes (al menos para las páginas del lado servidor), una de ellas es el name y otra el value. El checkbox y los combo no son una excepcion. Si tenés un checkbox, supongamos con nombre "Checkbox1", recogerías el valor en la variable "var_Checkbox" de la forma común:

var_Checkbox = Request.Form("Checkbox1"), obviamente asignandole un valor al atributo VALUE del checkbox. Lo mismo ocurre con los combo.
Un saludo!.
__________________
Add, never Remove
  #25 (permalink)  
Antiguo 27/06/2005, 14:15
Avatar de Gaby_Corr  
Fecha de Ingreso: junio-2005
Mensajes: 672
Antigüedad: 19 años, 11 meses
Puntos: 0
ahh, ok si de hecho si mas o menos tenia la idea, solo que estoy haciendo una pagina, pero no sabia coo pasarle bien los valores, de todas maneras muchas gracias!!!


=D
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 00:58.