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

por qué no me pasa los parametros de la db

Estas en el tema de por qué no me pasa los parametros de la db en el foro de ASP Clásico en Foros del Web. Saludos al foro: Estoy haciendo una pagina de recuerdo de password. La pagina tiene que enviar una password y su nombre de usuario a un ...
  #1 (permalink)  
Antiguo 16/12/2003, 12:23
 
Fecha de Ingreso: junio-2003
Ubicación: Santiago de Compostela
Mensajes: 603
Antigüedad: 21 años, 10 meses
Puntos: 0
por qué no me pasa los parametros de la db

Saludos al foro:
Estoy haciendo una pagina de recuerdo de password. La pagina tiene que enviar una password y su nombre de usuario a un email.
Pero me da este error:

ADODB.Field error '800a0bcd'

El valor de BOF o EOF es True, o el actual registro se eliminó; la operación solicitada requiere un registro actual.

/agencias/recuerdapassword.asp, línea 65

No entiendo porqué me da este error.
Pueden echarle un vistazo a este código.


Cadena de conexión:
----------------------------------------------------------------------
set Ob_Conn= Server.CreateObject("ADODB.Connection")
Ob_Conn.ConnectionString = "DSN=clubviajesoferta.com.skiviajes"
Ob_Conn.open
Set Ob_RS=Server.CreateObject("ADODB.Recordset")
Ob_RS.activeconnection=Ob_Conn
Ob_RS.source="agencias"
Ob_RS.Locktype = adLockOptimistic
Ob_RS.CursorType = adOpenDinamic
Ob_RS.open
Ob_RS.filter = "email='"&request.form("email")&"'"
---------------------------------------------------------------
Código de recogida de datos

'Recogemos los datos del formulario
dim usuario
dim password

Usuario = Ob_RS("usuario")
Password = Ob_RS("password")
---------------------------------------------------
En las dos Líneas en las que me da el error:
  #2 (permalink)  
Antiguo 16/12/2003, 12:49
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 3 meses
Puntos: 98
Y tu sentencia de selección?
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #3 (permalink)  
Antiguo 16/12/2003, 12:52
 
Fecha de Ingreso: junio-2003
Ubicación: Santiago de Compostela
Mensajes: 603
Antigüedad: 21 años, 10 meses
Puntos: 0
Mi sentencia de selección es el filter....
  #4 (permalink)  
Antiguo 16/12/2003, 12:55
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 3 meses
Puntos: 98
No se, nunca lo hice así, pero este error es de que no encuentra el registro, trata imprimiendo el email a ver si llega bien y condiciona que no sea EOF...
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #5 (permalink)  
Antiguo 16/12/2003, 13:02
 
Fecha de Ingreso: junio-2003
Ubicación: Santiago de Compostela
Mensajes: 603
Antigüedad: 21 años, 10 meses
Puntos: 0
Y como lo haces tú???, porque yo tengo un cacao maravillao entre los filter y los select que no veas.
  #6 (permalink)  
Antiguo 16/12/2003, 13:11
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 3 meses
Puntos: 98
supongo que source es la tabla de origen no?

email= trim(request.form("email"))
set Ob_Conn= Server.CreateObject("ADODB.Connection")
Ob_Conn.ConnectionString = "DSN=clubviajesoferta.com.skiviajes"
Ob_Conn.open
Set Ob_RS=Server.CreateObject("ADODB.Recordset")
strSQL= "SELECT campos FROM agencias WHERE email='" & email & "'"
Ob_rs.Open strSQL, Ob_conn, 3, 3


Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #7 (permalink)  
Antiguo 16/12/2003, 13:50
 
Fecha de Ingreso: junio-2003
Ubicación: Santiago de Compostela
Mensajes: 603
Antigüedad: 21 años, 10 meses
Puntos: 0
pues sigue dandome el mismo error y no entiendo el por qué.
  #8 (permalink)  
Antiguo 16/12/2003, 14:46
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 3 meses
Puntos: 98
Ciber, eso pasa cuando el recordset viene vacio, condiciona que no sea EOF, es decir, no encuentra ningun registro en donde el campo email sea igual al email que estás enviando


If not Ob_rs.EOF Then
Usuario = Ob_RS("usuario")
Password = Ob_RS("password")
Else
response.write("No se encontraron registros")
End IF

Por eso te decía que imprimieras el email para ver si te llega bien, y además te cerciores que efectivamente se encuentre en la DB

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #9 (permalink)  
Antiguo 17/12/2003, 12:37
 
Fecha de Ingreso: junio-2003
Ubicación: Santiago de Compostela
Mensajes: 603
Antigüedad: 21 años, 10 meses
Puntos: 0
Perdon por mi insistencia, pero es que no lo veo.
Lo que pasa es lo siguiente:
Hace la búsqueda por el email, si no encuentra el registro entonces da el aviso de que "no se encontro el registro".
Si se pulsa el botón de enviar y se supone que el registro existe entonces da el error siguiente:


-----------------
ADODB.Field error '800a0bcd'

El valor de BOF o EOF es True, o el actual registro se eliminó; la operación solicitada requiere un registro actual.

/agencias/recuerdapassword.asp, línea 62
----------------------

Bien el caso es que si elimino el codigo siguiente del fichero, entonces funciona bien. Es decir, cuando no encuentra el email introducido da el aviso: "No se encontro el registro" y cuando el registro existe manda un mensaje a la cuenta de correo pertinente, pero no aparece información sobre los campos: nombre de usuario y contraseña.
---------------------------------------
'Recogemos los datos de la db
dim usuario
dim password
user = Ob_RS("usuario")
pass = Ob_RS("password")
---------------------------

Envio el código completo de la página para que se vea con mayor claridad.

Código:
----------------------------------------------
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<html>
<head>
<title>Documento sin t&iacute;tulo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_reloadPage(init) { //reloads the window if Nav4 resized
if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
//-->
</script>
</head>

<body>
<div align="center">
<%if (request.form <> "") then%>

<!--Incluimos el fichero de constantes-->
<!--#INCLUDE file="../adovbs.asp"-->
<strong><font color="#CCCCFF" size="5" face="Arial, Helvetica, sans-serif">


<%Set Ob_Conn= Server.CreateObject("ADODB.Connection")%>
<% Set Ob_Command= Server.CreateObject("ADODB.Command")%>
<% Ob_Conn.open "DSN=clubviajesoferta.com.skiviajes" %>
<%Ob_Command.ActiveConnection=Ob_Conn %>
<% Ob_Command.CommandType=adCmdText %>
<% Ob_Command.CommandText= "SELECT * from agencias where email='"&request.form("email")&"'" %>
<% Set Ob_RS=Ob_Command.Execute ()



'Para conexion a ODBC local
'Set Ob_Conn = Server.CreateObject("ADODB.Connection")
'Set Ob_RS=Server.CreateObject("ADODB.RecordSet")
'Ob_Conn.open "skiviajes_odbc"
' Abrimos la tabla, declaramos que conexión esta abierta, tipo de cursor, tipo de cerrojo, y opciones
'Ob_RS.open "agencias", Ob_Conn, adOpenStatic, adCmdTable
'Ob_RS.filter = "email='"&request.form("email")&"'"


'Busqueda de datos
Dim encontrado
encontrado=false
DO WHILE NOT Ob_RS.eof
Ob_RS.movenext
encontrado=true
loop

IF encontrado=false THEN
response.write("No se ha encontrado la dirección de correo electrónico indicada")

else

'Recogemos los datos de la db
dim usuario
dim password
user = Ob_RS("usuario")
pass = Ob_RS("password")

Set Mail = Server.CreateObject("Persits.MailSender")
Mail.Host = "smtp.skiviajes.com"
Mail.From = "[email protected]"
Mail.AddAddress "[email protected]"
Mail.Subject = "Petición de información de skiviajes.com"

'El mensaje en formato html
Mail.IsHTML = true
'Mail.Body = "<HTML><BODY><p><font face=verdana size=2>Empresa: "&empresa&"<br>Nombre: "&nombre&"<br><br></p><br>Enviado el "& Now() &"</font></BODY></HTML>"
Mail.Body= "Le remitimos la información solicitada<p><br>Nombre de usuario: "&user&"<br>Contraseña: "&pass&""

On Error Resume Next
Mail.Send
If Err <> 0 Then
Response.Write "Ha ocurrido el siguiente error: " &Err.Description
else
Response.write("Su nombre de usuario y contraseña han sido enviadas a la dirección de correo electrónico indicada en el formulario de alta de agencias")
End If%>



<% end if %>


<%Ob_RS.close
Ob_Conn.close
%>
</font></strong>
<%else%>
</div>
<div id="Layer1" style="position:absolute; width:364px; height:119px; z-index:1; left: 188px; top: 93px;">
<p align="center"><font size="1" face="Arial, Helvetica, sans-serif">Escriba
la direcci&oacute;n de correo electr&oacute;nico con la que se registro en
el formulario de alta de agencia y le enviaremos a dicho email los datos correspondientes
a su nombre de usuario y contrase&ntilde;a.</font></p>
<form name="form1" method="post" action="recuerdapassword.asp">
<table width="100%" border="0" align="center" bgcolor="#F2F2F2">
<tr align="center">
<td colspan="2" bgcolor="#0000FF"> <p align="center"><font color="#FFFFFF" size="2" face="Arial, Helvetica, sans-serif"><strong>Recuerde
que no puede contener espacios en blanco</strong></font></td>
</tr>
<tr align="center">
<td width="0" height="0"><font size="2" face="Arial, Helvetica, sans-serif">Correo
Electr&oacute;nico</font></td>
<td width="0" height="0"> <input name="email" type="text" id="email" size="30" maxlength="30"></td>
</tr>
<tr align="center">
<td height="0" colspan="2"> <p align="center">
<input type="submit" value="Enviar" name="B1">
</td>
</tr>
</table>
</form>
<%end if%>
</div>
</body>
</html>

----------------------------------------

Gracias por todo.
  #10 (permalink)  
Antiguo 17/12/2003, 13:58
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 3 meses
Puntos: 98
mas bien creo que el error es de lógica:

'Busqueda de datos
Dim encontrado
encontrado=false

DO WHILE NOT Ob_RS.eof
Ob_RS.movenext
encontrado=true
loop


IF encontrado=false THEN response.write("No se ha encontrado la dirección de correo electrónico indicada")

else

'Recogemos los datos de la db
dim usuario
dim password
user = Ob_RS("usuario")
pass = Ob_RS("password")

Bueno, recorres el recordset mediante un loop, pero el recordset recorre hasta el final aun si encontró ese registro...
y se posiciona un lugar antes de EOF (End of File) entonces regrésalo a su posición original después del loop, aunque no creo que sea la mejor solución, principalmente por performance

Ob_Rs.MoveFirst

Otra es que en cuanto lo encuentre, te salgas del Loop
Exit Do

Ahora, la forma de evaluar tu bandera, nunca lo hice así, por eso no se si sea la correcta, en realidad siempre lo he hecho como

If NOT encontrado Then

Espero que te sirva,

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway

Última edición por u_goldman; 17/12/2003 a las 14:02
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 10:36.