none
Ayuda con vbscript y asp. RRS feed

  • Pregunta

  • Hola,

    Tengo que hacer una aplicación web que haga lo siguiente a partir de una base de datos en access. La base de datos tiene varias tablas, una tabla con las provincias de la comunidad, otra con los hospitales de cada provincia, otra con los servidores de cada hospital.

    Tengo que seleccionar de una lista desplegable la provincia, luego, de otra, el hospital (esta nueva lista, por supuesto, solo debe mostrar los hospitales de la provincia seleccionada en primer lugar), y una vez seleccionado el hospital, rellenar otra lista con los servidores de ese hospital y seleccionar el servidor concreto para hacer algo (que no viene al caso lo que haya que hacer).

    El caso es que he conseguido hacer que en una página me salga una lista desplegable con las provincias, al seleccionar una y dar a un botón 'Aceptar', me abre otra página con los hospitales de esa provincia, y al seleccionar el hospital y dar al botón de aceptar, me abre otra más donde me permite elegir el servidor concreto de ese hospital.

    Lo que me gustaría conseguir, y no sé cómo hacer, es que no tuviera que saltar de página en página, sino que me saliera el primer desplegable, y al seleccionar la provincia, bien al finalizar la selección, o bien al pulsar un botón (aunque si se puede, prefiero que sea automático al seleccionar la provincia), sin salir de la página, me dé la opción de seleccionar lo demás, en cascada. Y ya sería la leche si se pudiera que, por ejemplo, si he seleccionado la provincia y el hospital, y vuelvo a pulsar en el desplegable de la provincia, se quedara el desplegable del hospital y del servidor con una opción tipo 'elija hospital, elija servidor'.

    Lo suyo es que, al pulsar un único botón en la página, tome el nombre del servidor en una variable, y ejecute la acción que sea.

    Pongo el código de cada página, a ver si podéis ayudarme:

    La que selecciona la provincia:

    <%@ Language="VBScript" %>
    <% Option Explicit %>
    <html>
    <body>
    <div align="center">
    <h1>Consola de administración centralizada</h1>
    <h2>Elegir la provincia en la que se encuentra el hospital</h2>
    </div>
    <form name="form1" action="hospitales.asp" method="post">
    <div align="center">
    <table width="100%" border="0">


    <tr>
    <td>
    <p align="right">Provincia</p>
    </td>

    <td>
    <%
    Dim objconn,objRS,strSQL
    Set objconn = Server.CreateObject("ADODB.Connection")
    objconn.ConnectionString = "DRIVER=Microsoft Access Driver (*.mdb);DBQ=" & Server.MapPath("hospitales.mdb")
    objconn.Open
    Set objRs = Server.CreateObject("ADODB.Recordset")
    strSQL = "SELECT * FROM Provincias "
    objRS.Open strSQL, objconn
    Response.Write "<select name=Provincia><option value="""" selected>Elige Provincia</option>"
    Do While Not objRS.EOF
    Response.Write "<option value=""" & objrs("Nombre") &""">"& objRs("Nombre") &"</option>"
    objRS.MoveNext
    Loop
    Response.Write "</select>"
    objRs.Close
    objconn.Close
    %>
    </td>
    </tr>

    <tr>
    <td></td>
    <td><input type="submit" value="Aceptar" name="Enviar"></td>
    </tr>

    </table>
    </div>
    </form>

    </body>
    </html>

    La que selecciona el hospital:

    <%@ Language="VBScript" %>
    <% Option Explicit %>
    <html>
    <body>

    <div align="center">
    <h1>Consola de administración centralizada</h1>
    <h2>Elegir el hospital en el que se encuentra el servidor</h2>
    </div>
    <%
    Dim provincia

    provincia = Request.Form("provincia")

    %>

    <form name="form2" action="servidores.asp" method="post">
    <div align="center">
    <table width="100%" border="0">


    <tr>
    <td>
    <p align="right">Hospital</p>
    </td>

    <td>
    <%
    Dim objconn,objRS,strSQL
    Set objconn = Server.CreateObject("ADODB.Connection")
    objconn.ConnectionString = "DRIVER=Microsoft Access Driver (*.mdb);DBQ=" & Server.MapPath("hospitales.mdb")
    objconn.Open
    Set objRs = Server.CreateObject("ADODB.Recordset")
    strSQL = "SELECT * FROM hospitales WHERE Provincia= '" & provincia & "'"
    objRS.Open strSQL, objconn
    Response.Write "<select name=Hospital><option value="""" selected>Elige Hospital</option>"
    Do While Not objRS.EOF
    Response.Write "<option value=""" & objrs("Nombre") &""">"& objRs("Nombre") &"</option>"
    objRS.MoveNext
    Loop
    Response.Write "</select>"
    objRs.Close
    objconn.Close
    %>
    </td>
    </tr>

    <tr>
    <td></td>
    <td><input type="submit" value="Aceptar" name="Enviar2"></td>
    </tr>

    </table>
    </div>
    </form>
    </body>
    </html>

    La que selecciona el servidor:

    <%@ Language="VBScript" %>
    <% Option Explicit %>
    <html>
    <body>

    <div align="center">
    <h1>Consola de administración centralizada</h1>
    <h2>Elegir el servidor en el que se va a trabajar</h2>
    </div>
    <%
    Dim hospital

    hospital = Request.Form("Hospital")

    %>

    <form name="form3" action="acciones.asp" method="post">
    <div align="center">
    <table width="100%" border="0">


    <tr>
    <td>
    <p align="right">Servidor</p>
    </td>

    <td>
    <%
    Dim objconn,objRS,strSQL
    Set objconn = Server.CreateObject("ADODB.Connection")
    objconn.ConnectionString = "DRIVER=Microsoft Access Driver (*.mdb);DBQ=" & Server.MapPath("hospitales.mdb")
    objconn.Open
    Set objRs = Server.CreateObject("ADODB.Recordset")
    strSQL = "SELECT * FROM servidores WHERE Hospital= '" & hospital & "'"
    objRS.Open strSQL, objconn
    Response.Write "<select name=Hospital><option value="""" selected>Elige Servidor</option>"
    Do While Not objRS.EOF
    Response.Write "<option value=""" & objrs("Nombre") &""">"& objRs("Nombre") &"</option>"
    objRS.MoveNext
    Loop
    Response.Write "</select>"
    objRs.Close
    objconn.Close
    %>
    </td>
    </tr>

    <tr>
    <td></td>
    <td><input type="submit" value="Aceptar" name="Enviar3"></td>
    </tr>

    </table>
    </div>
    </form>
    </body>
    </html>

    Gracias.

    jueves, 10 de enero de 2013 14:14

Todas las respuestas

  • Hola. Para realziar algo así, puedes usar Ajax y/o remote scripting para los navegadores que no soportan Ajax.

    Otra manera, es usar iframes anidados,a los cuales vas pasando el parámetro seleccionado, pero enel evento change del objeto select, lo que te evita colocar un botón.

    Justo en este momento estoy terminando algo similar que puede darte algunas ideas. Si bién el código del lado servidor (consultas a la base de datos) es PHP, la parte lógica es javascript.

    el sitio http://demo.tucondominioaldia.com.ve/clasificados

    sábado, 12 de enero de 2013 1:45
  • Hola,

    Muchas gracias por tu respuesta.

    No sé si lo he dicho, pero no soy programador. Me han emplumado este marrón pero yo no sé programar. Tengo nociones, conocimientos muy básicos, pero no soy programador.

    No sé lo que es Ajax, pero si puede no ser compatible con algún navegador, tendría que hacerlo con eso que dices de remote scripting. Pero para eso, un paso básico sería que alguien me explicara como se programa eso de remote scripting.

    Como me dices que otra manera es utilizar iframes anidados a los cuales se puede ir pasando el parámetro seleccionado en el evento change del objeto select, y aunque no sé lo que es un iframe, sí sé lo que es un objeto select (o creo saberlo), si no es mucho pedir, ¿podrías ponerme un ejemplo sencillo de qué tendría que modificar en el código que puse arriba para hacerlo como dices? Con que utilizaras el códido de la primera página y pusieras en el código la instrucción o instrucciones para obtener y pasar el parámetro en el evento change del objeto select y cómo hacer para que lo reciba el siguiente iframe, ya me puedo yo encargar de intentar averiguar cómo hago iframes y cómo los anido.

    Tu ejemplo lo he visto, pero no he entendido nada, aparte de que he visto algo de ajax (que como he dicho, no sé lo que es ni creo que vaya a poder usarlo).

    De todas formas, muchas gracias.

    sábado, 12 de enero de 2013 13:57
  • Del ejemplo, quería mostrarte cómo se llenan dinámicamente los select, en base a la selección del anterior.

    lunes, 14 de enero de 2013 1:12
  • Y no sabes cómo te lo agradezco. Es solo que sigo sin saber cómo se hace.

    Si no entiendo mal, el código de los dos primeros desplegables es este:

    <tr class="altoRow">
      <td colspan=2 class="eti9">Operaci&oacute;n</td>
    </tr>
    <tr>
      <td colspan=2>
      <select id="selecope" name="operacion" class="inputs" onchange="javascript: cargaCategorias(value);"><option value="" selected>...</option><option value="Alquiler">Alquiler(5)</option><option value="Venta">Venta(6)</option></select>   </td>
    </tr>
    <tr class="altoRow">
      <td colspan=2 class="eti9">Categor&iacute;a</td>
    </tr>
    <tr>
      <td colspan=2 id="prueba">
        <select id="divcategoria" name="categoria" onchange="javascript: cargaEstados(value);" class="inputs">
          <script type="text/javascript">
          cat='x';
          //if(xmlhttp){ 
          //<![CDATA[    
             cargaCategorias('x');
          //]]>
          //}
          </script>
        </select>
      </td>
    </tr>

    Concretamente, esto:

    onchange="javascript: cargaCategorias(value);

    Y aquí es donde ya me perdí. Porque no veo el código de la función cargaCategorías, el valor value imagino que será el que devuelve el select, pero tampoco lo sé seguro.

    lunes, 14 de enero de 2013 7:58
  • En el código fuente, en las lineas superiores, entre las etiquetas <head></head> hay un vínculo con un archivo Javascript de nombre ajax.js.

    Ahí están las funciones...bájalo.

    lunes, 14 de enero de 2013 10:09
  • Hola, lo que debes de hacer es no abrir paginas por paginas, sino que debes de cargar al incio combox de hospitales, provincias etc, estos combos deben de tener autopostback, para cuando hace el postback puedas ir a cargar dinamicamente el otro combobox que se relaciona con el anterior, por ejemplo,

    Cunado tienes paises, estados, ciudades

    cuando seleccionas paises y seleccionas estados unidos, el combobox de estados debe de cargarse en base al pais seleccionado(todos los estados de estados unidos) y luego cuando selecciones el combobox de estados, cargara automaticamente el combobox de ciudades del estado que hallas seleccionado.

    los combobox de paises y estados deberan tener la propoiedad autopostback en true para que se dispare una metodo del combobox que se llama

    Protected Sub paises_DropDownList_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles oficina_DropDownList.SelectedIndexChanged

        'aqui deberias cargar el combobox de estados

    End Sub

    Una vez tengas esto claro es lo mismo para el otro combobox,

    te expongo este ejemplo de paises, estados, ciudades porque es mas digerible, espero te funcione

    viernes, 15 de febrero de 2013 16:10
  • Jaime, al parecer no leiste el post desde el principio; es para asp clásico.

    En este caso debe hacerlo con ajax o remote scripting, através del evento change del combobox.

    domingo, 17 de febrero de 2013 16:54