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

No recibo dos variables, en página2, desde un formulario en página1.

Estas en el tema de No recibo dos variables, en página2, desde un formulario en página1. en el foro de ASP Clásico en Foros del Web. Hola a todos. Les agradezco que me puedan ayudar con el siguiente problema: Tengo una pagina1.asp con el siguiente código en el Body: Código HTML: ...
  #1 (permalink)  
Antiguo 18/03/2006, 12:02
Avatar de Kalimdor  
Fecha de Ingreso: junio-2004
Ubicación: Ciudad de Panamá, República de Panamá.
Mensajes: 68
Antigüedad: 20 años, 10 meses
Puntos: 0
Pregunta No recibo dos variables, en página2, desde un formulario en página1.

Hola a todos.

Les agradezco que me puedan ayudar con el siguiente problema:
Tengo una pagina1.asp con el siguiente código en el Body:

Código HTML:
<form name="fecha_nacimiento" id="fecha_nacimiento" method="post" action="pagina2.asp">
<table width="625" border="0" cellspacing="0" cellpadding="10">
<tr>
<td width="9">&nbsp;</td>
<td width="197"><strong>A&ntilde;o de Nacimiento:</strong>
<select name="year_select" id="year_select" onchange="MM_callJS('setDynaList(arrDL1)')">
<% While (NOT Year_Nac_recordset.EOF) %>
<option value="<%=(Year_Nac_recordset.Fields.Item("Año_Nac").Value)%>"><%=(Year_Nac_recordset.Fields.Item("Año_Nac").Value)%></option>
<% Year_Nac_recordset.MoveNext()
Wend
If (Year_Nac_recordset.CursorType > 0) Then
Year_Nac_recordset.MoveFirst
Else
Year_Nac_recordset.Requery
End If
%>
</select>
</td>
<td width="239"><strong>Mes de Nacimiento:</strong>
<select name="mes_select" id="mes_select">
<% While (NOT Mes_Nac_recordset.EOF) %>
<option value="<%=(Mes_Nac_recordset.Fields.Item("Mes_Nac").Value)%>"><%=(Mes_Nac_recordset.Fields.Item("Mes_Nac").Value)%></option>
<% Mes_Nac_recordset.MoveNext()
Wend
If (Mes_Nac_recordset.CursorType > 0) Then
Mes_Nac_recordset.MoveFirst
Else
Mes_Nac_recordset.Requery
End If
%>
</select>
</td>
<td width="100"><input type="submit" name="Submit" value="Buscar" /></td>
</tr>
</table>
</form> 
Con este código envío dos valores: AÑO y MES a la pagina2.asp.

En la pagina2.asp tengo el siguiente código inicial, que me conecta a la Base de Datos:

Código HTML:
<%@LANGUAGE="VBSCRIPT"%>
<!--#include file="../../Connections/Reg_Bebes_connect.asp" -->
<%
Dim Reg_Bebes_recordset__Year2
Reg_Bebes_recordset__Year2 = "1"
If (Request.Form("year_select") <> "") Then 
Reg_Bebes_recordset__Year2 = Request.Form("year_select") 
End If
%>
<%
Dim Reg_Bebes_recordset__Mes2
Reg_Bebes_recordset__Mes2 = "2"
If (Request.Form("mes_select") <> "") Then 
Reg_Bebes_recordset__Mes2 = Request.Form("mes_select") 
End If
%>
<%
Dim Reg_Bebes_recordset
Dim Reg_Bebes_recordset_numRows
Set Reg_Bebes_recordset = Server.CreateObject("ADODB.Recordset")
Reg_Bebes_recordset.ActiveConnection = MM_Reg_Bebes_connect_STRING
Reg_Bebes_recordset.Source = "SELECT * FROM datos_bebes WHERE Año_Nac = " + Replace(Reg_Bebes_recordset__Year2, "'", "''") + " AND Mes_Nac = " + Replace(Reg_Bebes_recordset__Mes2, "'", "''") + " ORDER BY Dia_Nac DESC"
Reg_Bebes_recordset.CursorType = 0
Reg_Bebes_recordset.CursorLocation = 2
Reg_Bebes_recordset.LockType = 1
Reg_Bebes_recordset.Open()
Reg_Bebes_recordset_numRows = 0
%>
<%
Dim Repeat1__numRows
Dim Repeat1__index
Repeat1__numRows = -1
Repeat1__index = 0
Reg_Bebes_recordset_numRows = Reg_Bebes_recordset_numRows + Repeat1__numRows
%> 
Mi problema radica en que los valores AÑO y MES que le estoy enviando a la pagina2.asp no me los está tomando, mandándome un error en la línea Reg_Bebes_recordset.Open().

Éste es el mensaje de error:
Información técnica (para personal de soporte técnico)
  • Tipo de error:
    Microsoft OLE DB Provider for ODBC Drivers (0x80040E10)
    [Microsoft][Controlador ODBC Microsoft Access] Pocos parámetros. Se esperaba 1.
    /mi_web/../pagina2.asp, línea 27
  • Tipo de explorador:
    Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; InfoPath.1)
  • Página:
    POST 47 bytes to /mi_web/../pagina2.asp
  • Datos de POST:
    year_select=2004&mes_select=junio&Submit=Buscar
Como verán, los valores year_select (AÑO) y mes_select (MES) sí llegan a página2.asp, pero no puedo hacer nada por el error.

¿Podrían ayudarme, por favor, a ver en qué consiste mi problema?

Un millón de gracias desde ya por su ayuda.

Hasta luego.

-Kalimdor.
__________________
"Dios no manda cosas imposibles sino que, al mandar, te enseña a que hagas cuanto puedes y a que pidas lo que no puedes".
San Agustín.
  #2 (permalink)  
Antiguo 18/03/2006, 12:34
Avatar de ElAprendiz  
Fecha de Ingreso: enero-2002
Ubicación: Maipu, Chile
Mensajes: 3.706
Antigüedad: 23 años, 3 meses
Puntos: 2
prueba asi
"SELECT * FROM datos_bebes WHERE Año_Nac = "&reg_Bebes_recordset__Year2&" AND Mes_Nac = "&Reg_Bebes_recordset__Mes2&" ORDER BY Dia_Nac DESC"

no es necesario ese replace ya que los datos son seleccionados desde una lista "segura".

saludos
  #3 (permalink)  
Antiguo 20/03/2006, 15:37
Avatar de Kalimdor  
Fecha de Ingreso: junio-2004
Ubicación: Ciudad de Panamá, República de Panamá.
Mensajes: 68
Antigüedad: 20 años, 10 meses
Puntos: 0
De acuerdo Gracias por tu ayuda.

Hola, mi estimado amigo ElAprendiz.

Te agradezco mucho la ayuda que me has brindado. Sin embargo, aunque ya he cercado más el problema, el mismo persiste.

Ya confirmé que los dos valores AÑO y MES, guardados en las variables "year_select" y "mes_select", respectivamente, pasan a la pagina2.asp, invocada desde el form, que encierra a ambas variables, en la pagina1.

Lo confirmé de dos maneras:
A través de:
<% Response.Write ("Año: " & Request.Form("year_select"))%> <br />
<% Response.Write ("Mes: " & Request.Form("mes_select")) %>

y a través de:
year_cap = Request.Form("year_select")
mes_cap = Request.Form("mes_select")
<% Response.Write ("Año: " & year_cap)%> <br />
<% Response.Write ("Mes: " & mes_cap) %>

Son lo mismo, pero me ayudó a ver que sí pasan.

Si utilizo las variables "year_cap" y "mes_cap" en el código HTML de la pagina2 no tengo problemas para ver su contenido.

El problema es cuando intento filtrar el contenido de la Base de Datos utilizando ambas variables.

Aquí es donde está el problema:
Código:
<%@LANGUAGE="VBSCRIPT"%>
<!--#include file="../../Connections/Reg_Bebes_connect.asp" -->
<%
Dim year_cap, mes_cap
Dim Reg_Bebes_recordset
Dim Reg_Bebes_recordset_numRows
year_cap = Request.Form("year_select") 
mes_cap = Request.Form("mes_select") 
Set Reg_Bebes_recordset = Server.CreateObject("ADODB.Recordset")
Reg_Bebes_recordset.ActiveConnection = MM_Reg_Bebes_connect_STRING
Reg_Bebes_recordset.Source = "SELECT * FROM datos_bebes WHERE Año_Nac = "&year_cap&" AND Mes_Nac = "&mes_cap&" ORDER BY Dia_Nac DESC"
Reg_Bebes_recordset.CursorType = 0
Reg_Bebes_recordset.CursorLocation = 2
Reg_Bebes_recordset.LockType = 1
Reg_Bebes_recordset.Open()
Reg_Bebes_recordset_numRows = 0
%>
Si en el SELECT que resalté pongo así:
Reg_Bebes_recordset.Source = "SELECT * FROM datos_bebes WHERE Año_Nac = "&year_cap&" ORDER BY Dia_Nac DESC"
...no tengo problemas. Filtra por AÑO, más no por mes.

Si en el SELECT que resalté pongo así:
Reg_Bebes_recordset.Source = "SELECT * FROM datos_bebes WHERE Mes_Nac = "&mes_cap&" ORDER BY Dia_Nac DESC"

o la consulta completa:
Reg_Bebes_recordset.Source = "SELECT * FROM datos_bebes WHERE Año_Nac = "&year_cap&" AND Mes_Nac = "&mes_cap&" ORDER BY Dia_Nac DESC"

Me sale este error en el Internet Explorer:
Tipo de error:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E10)
[Microsoft][Controlador ODBC Microsoft Access] Pocos parámetros. Se esperaba 1.
/mi_web/.../pagina2.asp, línea 17

La línea 17 es: Reg_Bebes_recordset.Open()

Esto me da a entender que la variable "mes_cap" no me está funcionando para filtrar la Base de Datos.

¡De veras que no entiendo por qué!
Si ambas variables guardan los datos que se le pasaron y se pueden imprimir en pantalla, como te mostré al principio y la consulta a la Base de Datos está bien escrita y la variable "year_cap" filtra la Base de Datos, ¿por qué la variable "mes_cap" no funciona para filtrar, ya sea sola o acompañada de "year_cap"?

Si me puedes ayudar o algún otro amigo del foro tiene idea del por qué, por favor, ayúdeme.

Un millón de gracias.

-Kalimdor.
__________________
"Dios no manda cosas imposibles sino que, al mandar, te enseña a que hagas cuanto puedes y a que pidas lo que no puedes".
San Agustín.
  #4 (permalink)  
Antiguo 20/03/2006, 16:14
Avatar de ElAprendiz  
Fecha de Ingreso: enero-2002
Ubicación: Maipu, Chile
Mensajes: 3.706
Antigüedad: 23 años, 3 meses
Puntos: 2
bueno haz esto y revisa que la sentencia este escrita correctamente.


year_cap = Request.Form("year_select")
mes_cap = Request.Form("mes_select")
Set Reg_Bebes_recordset = Server.CreateObject("ADODB.Recordset")
Reg_Bebes_recordset.ActiveConnection = MM_Reg_Bebes_connect_STRING

sql="SELECT * FROM datos_bebes WHERE Año_Nac = "&year_cap&" AND Mes_Nac = "&mes_cap&" ORDER BY Dia_Nac DESC"
response.write sql
response.end
  #5 (permalink)  
Antiguo 20/03/2006, 16:18
Avatar de JuanRAPerez
Colaborador
 
Fecha de Ingreso: octubre-2003
Mensajes: 2.393
Antigüedad: 21 años, 6 meses
Puntos: 27
en la base de datos mens_nac que contiene??????

contiene el nombre del mes o el numero (del 1 al 12) que corresponde a cada mes???
__________________
JuanRa Pérez
San Salvador, El Salvador
  #6 (permalink)  
Antiguo 21/03/2006, 15:00
Avatar de Kalimdor  
Fecha de Ingreso: junio-2004
Ubicación: Ciudad de Panamá, República de Panamá.
Mensajes: 68
Antigüedad: 20 años, 10 meses
Puntos: 0
¡Solucionado por casualidad!

¡Hola!

Las líneas que pusiste para probar, ElAprendiz, me evitaban el error, pero sólo me desplegaban la línea de código sql:

SELECT * FROM datos_bebes WHERE Año_Nac = 2005 AND Mes_Nac = enero ORDER BY Dia_Nac DESC

Es decir, que reemplazaba las variables por sus respectivos valores.

Pero la pregunta que me hiciste, JuanRAPerez, me dio una idea para cambiar las comparaciones.

La Base de Datos, Reg_Bebes, tiene, entre otros campos:
Año_Nac: tipo entero.
Mes_Nac: tipo cadena.
Numero_Mes: tipo entero.

Las comparaciones que hacía en el SELECT eran con Año_Nac y Mes_Nac. Las variables year_cap y mes_cap recogían sus valores por medio de los nombres de sus list/menus respectivos: year_select y mes_select.

No sé si es que, internamente, vbscript o ASP interpretó la variable mes_cap con otro tipo de dato (entero, probablemente), que no coincidía con el tipo de dato de la variable mes_select. La verdad es que aún no doy con la verdadera causa, pero creo que por allí se encamina.

De todos modos, la solución vino por la comparación, no con el campo Mes_Nac, sino con Numero_Mes, asignándole a la variable mes_select su valor, recogiéndolo en la pagina2 la variable mes_cap.

Al comparar mes_cap con Numero_Mes, en el SELECT, no hubo problemas y me filtró la información por año y por número de mes.

La primera impresión que me dio es que todas las comparaciones, en el SELECT, tenían que ser con tipos de datos enteros, pero no debe ser así, porque uno puede hacer comparaciones con diferentes tipos de datos, separados por operadores booleanos.

Pero, realizando pruebas y más pruebas, no di con la respuesta. Sí me gustaría saber, de todos modos, el por qué... bueno, ya dije que tengo mis sospechas, pero la verdad es que, como ya me resultó la comparación con el número de mes, sumado a que he perdido muchísimo tiempo con este problema y el tiempo se me ha venido encima, dejo la comparación así.

Espero haberme explicado. y, bueno, si tienen alguna idea, les agradeceré que me ayuden a desentrañar este misterio.

Y bueno, sobre todo lo explicado, ¡un millón de gracias por la ayuda que me han brindado!

Que Dios los bendiga.

-Kalimdor.
__________________
"Dios no manda cosas imposibles sino que, al mandar, te enseña a que hagas cuanto puedes y a que pidas lo que no puedes".
San Agustín.
  #7 (permalink)  
Antiguo 21/03/2006, 15:03
Avatar de ElAprendiz  
Fecha de Ingreso: enero-2002
Ubicación: Maipu, Chile
Mensajes: 3.706
Antigüedad: 23 años, 3 meses
Puntos: 2
ahi esta hombre! mes es texto!
debes colocarlo entre comillas
sql="SELECT * FROM datos_bebes WHERE Año_Nac = "&year_cap&" AND Mes_Nac = '"&mes_cap&"' ORDER BY Dia_Nac DESC"
  #8 (permalink)  
Antiguo 21/03/2006, 15:18
Avatar de Kalimdor  
Fecha de Ingreso: junio-2004
Ubicación: Ciudad de Panamá, República de Panamá.
Mensajes: 68
Antigüedad: 20 años, 10 meses
Puntos: 0
¡Eureka!

¡¡¡No puedo creer que la solución fuera tan sencilla pero, a la vez, tan escurridiza!!!

¡GRACIAS ElAprendiz!

¡Gracias!, ¡Gracias!, ¡Gracias!... esa era la solución. La acabo de probar y funcionó.

Caray... esto sí que es un alivio... Lo más curioso de todo es cómo cada post de este tema fue llevando a la solución. Este problema sí que fue un dolor de cabeza para mí.

Te agradezco mucho, amigo, por tu ayuda y a JuanRAPerez también. Qué bueno es contar con la ayuda incondicional de amigos como ustedes en este excelente foro.

Hasta la próxima y que siempre les vaya excelentemente bien.

-Kalimdor.
__________________
"Dios no manda cosas imposibles sino que, al mandar, te enseña a que hagas cuanto puedes y a que pidas lo que no puedes".
San Agustín.
  #9 (permalink)  
Antiguo 21/03/2006, 17:17
Avatar de JuanRAPerez
Colaborador
 
Fecha de Ingreso: octubre-2003
Mensajes: 2.393
Antigüedad: 21 años, 6 meses
Puntos: 27
yeap la mara de aqui es super buena onda, y te ayudan en todo jejeje
__________________
JuanRa Pérez
San Salvador, El Salvador
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 17:19.