¿Como enlazar comboboxes con información de Base de Datos ?

Juan Jos?
07 de Octubre del 2002
Quiero desplegar en un ComboBox una consulta a
una base de datos, una vez hecho esto, seleccionar
uno de los elementos y dependiendo del valor que
elija llenar un segundo ComboBox.

Me explico, supongamos que tengo estas 2 tablas:

Tabla: AC_PAIS
+----------------------+
| acPaisId | acNombre |
+----------------------+
| 1 | España |
|----------------------|
| 2 | Venezuela |
+----------------------+

Tabla: AC_CIUDAD
+-----------------------------------+
| acCiudadid | acNombre | acPaisId |
+-----------------------------------+
| 1 | Barcelona | 1 |
|-----------------------------------|
| 2 | Madrid | 1 |
|-----------------------------------|
| 3 | Caracas | 2 |
|-----------------------------------|
| 4 | Maracaibo | 2 |
+-----------------------------------+

Ambas están relacionadas por el campo acPaisId

El primer ComboBox depliega el contenido de
AC_PAIS, si selecciono por ejemplo, "España",
el segundo ComboBox debería desplegar "Barcelona"
y "Madrid".

Me he encontrado con algunos ejemplos pero
no me han servido de mucho, usan javascript
para llenar unos arreglos y desplegarlos en
los ComboBox, pero yo quiero que se refleje
el contenido exacto que hay en la base de datos
para no tener que modificar código cada vez que
haga una actualización.

Probé algo con javascript pero el problema
es que al cargar la página se inicializan
todos los valores y no hay forma de que cada vez
que haga una selección me cambie el resultado
de la query que sirve para desplegar el segundo
ComboBox

A continuación envío el código de un ejemplo
que hize, es algo sencillo, carga un ComboBox
con los paises y la selección se guarda en la
variable sPais, que va cambiando a medida que
vayas cambiando la selección.

Si saben de alguna solución, sugerencia, lo que
sea para mi problema te agradecería me echarais
una mano.

Hasta pronto y saludos


-- Código
--------------------------------------------------------------------------------------

SCRIPT LANGUAGE="JavaScript">
var sPais=0;
/SCRIPT>

?
// Conexión a la Base de Datos
$conex = odbc_connect("master", "", "");

// Query a la Tabla AC_PAIS
$qry01 = "Select acPaisId, acNombre " .
"from AC_PAIS " .
"order by acNombre asc";

$res01 = odbc_exec($conex, $qry01);

$cont01 = 0;
while(odbc_fetch_row($res01))
{
$do_paisid[$cont01] = odbc_result($res01, 1);
$do_paisnombre[$cont01] = odbc_result($res01, 2);
$cont01++;
}
?>

FORM NAME="frmDatosOferta" METHOD=post ACTION= ?=$PHP_SELF?>>

TABLE BORDER=1 WIDTH=100 >
TR>
TD>País /TD>
TD>
SELECT NAME=selec_pais onChange="sPais =
this.options[this.selectedIndex].value">
? $a = 0; ?>
OPTION VALUE=0>- Seleccione un País - /OPTION>
?
while ($a = ($cont01 - 1))
{
?>
OPTION VALUE= ?=$do_paisid[$a]?>>
?=$do_paisnombre[$a]?> /OPTION>
? $a++;
}
?>
/SELECT> /TD>
/TR>
/TABLE>
/FORM>

A HREF="#" onClick="alert(sPais);">Consultar sPais /A>

Felipe
07 de Octubre del 2002
No estoy seguro de que esto te sirva, o si es la respuesta que necesitas.
Creo haber entendido que a cada seleccion del 1er combo quieres que se acceda a la base de datos??Eso es tecnicamente posible, pero poco practico me temo.
Si estamos hablando de tablas con pocos datos te conviene cargar todos los datos de la segunda tabla en un array bidimensional de Javascript. Dependiendo de lo se seleccione traera unos datos u otros.
Creo que no es complicado...Y repito que esto es practico si no hablamos de tablas con muchos datos.
Siento no poder ayudarte mas.