Completar varios combobox

Acá tengo una pregunta. Estoy haciendo una página para ingresar registros a una tabla en access. Todavía no diseñe el asp que va a ingresar los datos, y tengo un problema con el diseño del formulario...
El problema es que no se como hacer para rellenar más de un combobox con los datos de una base de datos, más precisamente de más de una tabla a la vez, porque hasta ahora tenia un campo "destino" y ahí hacia un sql = "Select distinct destino from destinos". Pero ahora tengo que llenar otro combobox con los datos de los proveedores, o sea, seria un sql = "Select proveedor from proveedor". La cuestión es que no se como hacer con los set, close.. Etc.. No se si me explico...
No se cuando cerrar la conexión, si debo hacer dos variables sql, o si debo hacer dos variables conexión, o si debo hacer dos variables tipo registro...

1 respuesta

Respuesta
1
Respecto a tus preguntas:
1) La directiva include lo que hace realmente es incluir un trozo de código, tanto html como ASP que este contenido en el archivo (para nuestro caso conex.asp) en el punto donde ponga este include. Como si cortaras y pegaras el código contenido en el archivo en el archivo donde pones el include. Imaginate que tienes una cabecera con un menu que quieres incluir en todas tus páginas pues en vez de repetir ese código en cada página y si quieres realizar algún cambio en esa cabecera tendrás que modificarlo en todas las páginas pues lo inluyes en un fihcero y encada una de tus páginas pones el include. Para mi caso lo que hago es poner tan solo en ese fichero conex.asp
Dim con
con = "driver={SQL Server};server=SERVIDOR;uid=qf586;pwd=c044tc;database=gruasgil"
Y despues e3n cada una de mis paginas pongo :
<!--#include file="Connections/conex.asp" -->,
que es como si pusiera en cada una de mis paginas
Dim con
con = "driver={SQL Server};server=SERVIDOR;uid=qf586;pwd=c044tc;database=gruasgil"
Así no tengo que teclear lo mismo en todas mi páginas y si por cualquier motivo cambio la conexión lo hago solo en el fichero conex.asp y y se me actualiza en todas mis páginas.
2) La diferencia entre tu código el mio es que tu utilizas el objeto conexión y llamas al método Execute para ejecutar la sentencia SQl y yo llamo al objeto RecordSet, le cargo la sentencia SQl en su propiedad Source y lo Abro (ejecuto). Son dos maneras de hacer lo mismo, el resultado va a ser un conjunto de registros que es lo que queremos. Existen como 4 o 5 maneras diferentes de extraer registro de una base de datos desde ASP
3) Son dos maneras de hacer lo mismo, ambas validas, son los bucles iterativos, tu utilizas el Do While y yo el While, existe también el Do Until, en cualquier lenguaje de programación que aprendas existen al menos varias tipos de bucles iterativos. El caso que el bucle se ejecuta hasta que se cumple una condición o deja de cumplirse (Until).
Bueno espero te haya aclarado un poco esto, sigue aprendiendo y veras que puedes hacer una misma cosa de varias maneras diferentes, al final eligirás una y con esa te quedaras...
Aquí te envío un ejemplo de come llenar 3 combo a la vez, es prácticamente igual que cuando llenas uno. Realizas tres recordset a distintas tablas bases de datos (las podrías hacer incluso a la mismas tablas) y vuelcas los datos, al final cierras los recordset. Yo no suelo cerrar la conexión ni asignarlas a Nothing ya que suelo utilizar los mismos nombres cuando las cierro para crear otros recordsets.
Otra cosa, sustituye "con" por tu cadena de conexión, ya que yo guardo la conexión en un fichero llamado conex.asp y lo incluyo al principio de la pagina en todas las paginas asi: <!--#include file="Connections/conex.asp" -->, de tal forma que cuando tengo que cambiar la conexión la cambia solo en el fichero.
Aqui va el codigo:
<%@LANGUAGE="VBSCRIPT"%>
<!--#include file="Connections/conex.asp" -->
<%
response.expires=-1000
if (Session("Admin")="") Then
Response.Redirect("index.asp?msj=2")
End If
Dim posicion,cont
Set clientes = Server.CreateObject("ADODB.Recordset")
clientes.ActiveConnection = con
clientes.Source = "SELECT id, nombre FROM GG_CLIENTES ORDER BY NOMBRE"
clientes.CursorType = 0
clientes.CursorLocation = 2
clientes.LockType = 1
clientes.Open()
Set matricula = Server.CreateObject("ADODB.Recordset")
matricula.ActiveConnection = con
matricula.Source = "SELECT distinct matricula FROM GG_MAQUINAS WHERE eliminado=0 AND matricula <> '' ORDER BY MATRICULA"
matricula.CursorType = 0
matricula.CursorLocation = 2
matricula.LockType = 1
matricula.Open()
Set numero = Server.CreateObject("ADODB.Recordset")
numero.ActiveConnection = con
numero.Source = "SELECT distinct num FROM GG_MAQUINAS WHERE eliminado=0 AND num <> '' ORDER BY num"
numero.CursorType = 0
numero.CursorLocation = 2
numero.LockType = 1
numero.Open()
%>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<form name="form1" method="post" action="index_maquinas.asp">
<table width="80%" border="0" cellpadding="4" cellspacing="1">
<tr>
<td width="29%" height="10" class="Cuerpo1">Número de Máquina</td>
<td width="71%" height="10"> <select name="numero" class="Cuerpo1">
<option value="0" selected>Seleccione uno</option>
<%
While (NOT numero.EOF)
%>
<option value="<%=(numero.Fields.Item("num").Value)%>"><%=(numero.Fields.Item("num").Value)%></option>
<%
numero.MoveNext()
Wend
%>
</select></td>
</tr>
<tr>
<td height="10" class="Cuerpo1">Matrícula</td>
<td height="10"> <select name="matricula" class="Cuerpo1">
<option value="0" selected>Seleccione una</option>
<%
While (NOT matricula.EOF)
%>
<option value="<%=(matricula.Fields.Item("matricula").Value)%>"><%=(matricula.Fields.Item("matricula").Value)%></option>
<%
matricula.MoveNext()
Wend
%>
</select></td>
</tr>
<tr>
<td height="10" class="Cuerpo1">Cliente </td>
<td height="10"> <select name="cliente" class="Cuerpo1">
<option value="0" selected>Seleccione uno</option>
<%
While (NOT clientes.EOF)
%>
<option value="<%=(clientes.Fields.Item("id").Value)%>"><%=(clientes.Fields.Item("nombre").Value)%></option>
<%
clientes.MoveNext()
Wend
%>
</select></td>
</tr>
<tr>
<td height="10" align="left"> </td>
<td height="10" align="center"> </td>
</tr>
<tr>
<td height="10" align="left"> <input name="Submit" type="submit" class="Cuerpo1" value="Buscar >>"></td>
<td height="10" align="center"> </td>
</tr>
</table>
</form>
</body>
</html>
<%
Numero. Close()
Clientes. Close()
Matricula. Close()
%>
Antes que nada muchísimas gracias por la pronta respuesta.
Ahora, tengo unas cuantas dudas con respecto al código que usas:
1) No me quedo muy claro lo de:
"Otra cosa, sustituye "con" por tu cadena de conexión, ya que yo guardo la conexión en un fichero llamado conex.asp y lo incluyo al principio de la pagina en todas las paginas asi: <!--#include file="Connections/conex.asp" -->, de tal forma que cuando tengo que cambiar la conexión la cambia solo en el fichero."
2) Lo que yo hago para conectar el asp a la base de datos es:
<%
dim rs1, sqla, con
ruta = server.MapPath("Base.mdb")
set con = Server.CreateObject("ADODB.Connection")
con.open "Provider=Microsoft.Jet.OLEDB.4.0;Data source= "& ruta &";"
SQLa= "SELECT DISTINCT Destino FROM Tarifas"
set rs1 = con.execute(sqla)
%>
Veo que tu lo haces de otra manera, agregando
clientes.CursorType = 0
clientes.CursorLocation = 2
clientes.LockType = 1
clientes.Open()
Me gustaría que me dijeras la diferencia entre tu código y el mio, ya que así como esta funciona bien.
y 3)
Para rellenar el combobox lo que yo hago es:
<select name="DestinoNew" id="select9" tabindex="1">
<option selected>-- Seleccione el destino --</option>
<% Do while not rs1.eof %>
<option><%=rs1("Destino")%></option>
<%
rs1.movenext
Loop%>
</select>
Tu haces:
<select name="matricula" class="Cuerpo1">
<option value="0" selected>Seleccione una</option>
<%
While (NOT matricula.EOF)
%>
<option value="<%=(matricula.Fields.Item("matricula").Value)%>"><%=(matricula.Fields.Item("matricula").Value)%></option>
<%
matricula.MoveNext()
Wend
%>
</select>
Aquí también, ¿me puedes explicar las diferencias? Si la respuesta se hace muy larga, puedes pasarme alguna página donde pueda leer un poco más del tema que no tengo problema en leer. En un principio me habías pasado las siguientes páginas(que ya las leí por completo):
http://www.webestilo.com/asp/
http://www.desarrolloweb.com/manuales/8/
http://www.desarrolloweb.com/asp/
http://www.monografias.com/trabajos5/asp/asp.shtml
¿Tienes alguna otra?
Muchas gracias de antemano!
Muchas gracias por la respuesta. Finalmente y para terminar con esta consulta, ¿tienes alguna página para recomendarme para que lea?. Hace un tiempo cuando te había consultado por primera vez me habías pasado unas 3 o 4 páginas para que lea. ¿Me puedes recomendar alguna otra que sea un poco más avanzada para que lea un poco más sobre este tema? Muchas Gracias
Perfecto. Muchas gracias
Yo ya para entrar en materia me buscaría algún librito sobre ASP. En www.lalibreriadigital.com existen unos cuantos sobre el tema, concretamente este: "Programación de Aplicaciones para Internet con ASP3", ¿pero claro este vale 8?. Si no busca en emule que seguro que esta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas