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

Cómo validar una fecha

Estas en el tema de Cómo validar una fecha en el foro de ASP Clásico en Foros del Web. Saludos de nuevo: Tengo un formulario con un campo de texto en donde el usuario introduce una fecha. Si la fecha es correcta (esta mal ...
  #1 (permalink)  
Antiguo 08/09/2004, 10:12
 
Fecha de Ingreso: junio-2003
Ubicación: Santiago de Compostela
Mensajes: 603
Antigüedad: 21 años
Puntos: 0
Cómo validar una fecha

Saludos de nuevo:
Tengo un formulario con un campo de texto en donde el usuario introduce una fecha. Si la fecha es correcta (esta mal escrita o alguien pone 31/02/2004 o simplemente un número) se ingresará a una DB y si es incorrecta, quiero que me envíe un mensaje del tipo: "fecha errónea. Escribala de nuevo".
He pensado en algo así: convertir el valor pasado de la caja de texto a fecha con cdate, si la conversión es correcta la fecha esta bien escrita y por lo tanto se añadirá a la base de datos y si es incorrecta que me envie el mensaje de error.

El problema es que cuando la fecha es incorrecta me devuelve el mensaje de error:
---


Error de Microsoft VBScript en tiempo de ejecuciónerror '800a000d'

No coinciden los tipos: 'cdate' ---

Alguien sabe cómo puedo solucionarlo?.
El código es el siguiente (aún estoy probando por lo que todavía no ingresa el valor correcto en la db):

Código:
 <% 
fechavalidez=request.form("fechavalidez")
response.Write(fechapublicacion & "<br>")
fechavalidez=cdate(fechavalidez)
if fechavalidez ="" then
response.write=("Introduzca la fecha correctamente")
else
response.write fechavalidez
end if
%>
Gracias
  #2 (permalink)  
Antiguo 08/09/2004, 10:16
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
Probá con

If IsDate(fechavalidez)...
__________________
...___...
  #3 (permalink)  
Antiguo 08/09/2004, 10:27
 
Fecha de Ingreso: junio-2003
Ubicación: Santiago de Compostela
Mensajes: 603
Antigüedad: 21 años
Puntos: 0
Ya he probado y da el mismo error.
  #4 (permalink)  
Antiguo 08/09/2004, 10:50
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
pues no puede dar error ya que se usa justamente para determinar si la expresión dada es o no una fecha. Si es una fecha, devuelve true y si no lo es, false.

http://www.devguru.com/Technologies/...ef/isdate.html

En todo caso, poné tu código modificado con IsDate() y marcá la línea donde da error
__________________
...___...
  #5 (permalink)  
Antiguo 08/09/2004, 11:03
 
Fecha de Ingreso: junio-2003
Ubicación: Santiago de Compostela
Mensajes: 603
Antigüedad: 21 años
Puntos: 0
He cambiado el código un poquillo para que me devuelva un error si el campo pasado está en blanco o si es un número. Tanto si el valor es "" como si no es una fecha valida (además tengo que usar el formato dd/mm/aaaa porque sino hace conversiones raras) el error que me da es el mismo.

No coinciden los tipos cdate


Y no entiendo donde está el error.

El código lo he dejado así:

Código:
 <% 
fechavalidez=request.form("fechavalidez")
response.write("La fecha de validez introducida en el formulario es: " &fechavalidez &"<br>") 
'response.Write(fechapublicacion & "<br>")
fechavalidez=cdate(fechavalidez)
if fechavalidez ="false" or fechavalidez="" or not (isnumeric(fechavalidez)) then
response.write("Introduzca la fecha correctamente <br>")
response.write(isnumeric(fechavalidez))
else
response.write "La fecha de validez una vez convertida es" & fechavalidez
end if
%>
Gracias.

Por cierto no he pasado el código del carrito porque he visto un error en el manejo y lo estoy corrigiendo.
  #6 (permalink)  
Antiguo 08/09/2004, 11:18
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
Probña así:

Código:
<% 
fechavalidez=request.form("fechavalidez")
response.write("La fecha de validez introducida en el formulario es: " &fechavalidez &"<br>") 
'response.Write(fechapublicacion & "<br>")

If NOT IsDate(fechavalidez) then
response.write("Introduzca la fecha correctamente <br>")
else
response.write "La fecha de validez una vez convertida es" & Cdate(fechavalidez)
end if
%>

Y cuando tengas lo del carrito, hacemos como quedamos por pribado
__________________
...___...
  #7 (permalink)  
Antiguo 08/09/2004, 11:22
 
Fecha de Ingreso: junio-2003
Ubicación: Santiago de Compostela
Mensajes: 603
Antigüedad: 21 años
Puntos: 0
Tampoco funciona me da el mismo error que antes del cambio
  #8 (permalink)  
Antiguo 08/09/2004, 11:59
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Pues por mas que lo intenté.....no puedo hacer que falle
Código:
<% 
fechavalidez=#12/12/04#
'fechavalidez=""
'fechavalidez=-32.54
'fechavalidez=78
'fechavalidez="cualquier cosa"

response.write("<BR>La fecha de validez introducida en el formulario es: " &fechavalidez &"<br>") 
'response.Write(fechapublicacion & "<br>")

If NOT IsDate(fechavalidez) then
response.write("Introduzca la fecha correctamente <br>")
else
response.write "La fecha de validez una vez convertida es" & Cdate(fechavalidez)
end if
%>
Siempre lo hace bien.
  #9 (permalink)  
Antiguo 08/09/2004, 12:16
 
Fecha de Ingreso: junio-2003
Ubicación: Santiago de Compostela
Mensajes: 603
Antigüedad: 21 años
Puntos: 0
Muchas gracias Myakire. Ahora funciona y no entiendo donde está la diferencia entre el código tuyo y el anterior.

Eso que por si acaso habia borrado los caches.

De todas formas una pregunta, es exactamente igual introducir:
31/04/03 o 31/04/2003 Porque lo he probado anteriormente y logicamente aunque son fechas correctas sintacticamente en la primera fecha me cambiaba el orden del día y el mes.
O la primera se refiere al año 1904.
Gracias
  #10 (permalink)  
Antiguo 08/09/2004, 13:46
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Bueno, una forma rápida de quitarte ese problema, es mandar fechas en formato "canónico" (creo se llama), es decir, YYYY/MM/DD, siempre con 4 caracteres como el año. Y ya ni a mentadas se puede equivocar (Claro, despues de definir correctamente el LCID)

Última edición por Myakire; 08/09/2004 a las 13:52
  #11 (permalink)  
Antiguo 08/09/2004, 13:55
 
Fecha de Ingreso: julio-2002
Ubicación: stgo rec
Mensajes: 438
Antigüedad: 21 años, 10 meses
Puntos: 3
Si a si se llama, bueno asi lo vi en en otro sitio, y lo llamaban canonico a ese formato (AAAA/MM/DD)
__________________
Saludos
Leo
  #12 (permalink)  
Antiguo 10/09/2004, 12:07
 
Fecha de Ingreso: junio-2003
Ubicación: Santiago de Compostela
Mensajes: 603
Antigüedad: 21 años
Puntos: 0
Ya he metido el codigo de validación en la pagina. Y ahora no me funciona del todo bien. Llevo dos días peleandome y no consigo ver el error.
Si dejo la casilla "fecha de validación" en blanco o añado cualquier letra, valida bien.
Si pongo un fecha válida: 14/10/2004 o 14/10/2 me devuelve el siguiente error:

-------------
Microsoft OLE DB Provider for ODBC Driverserror '80004005'


[Microsoft][Controlador ODBC Microsoft Access] Error de sintaxis en la instrucción INSERT INTO. /turofertas/gestion_mayoristas/ofertas/insertar/insertar_ofertas_result.asp, línea 86
-----------------

Por favor podríais echarle un vistazo al código. Es que no entiendo que pasa y me estoy volviendo loco. Ya sueño con la peich.

Gracias

Código:
 
<<A href="mailto:%@LANGUAGE="VBSCRIPT">%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<%
response.Expires=0
Response.AddHeader "PRAGMA", "NO-CACHE" 
%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Administrar Ofertas</title>
</head>
<!--#INCLUDE file="../../../adovbs.asp"-->
<%
'Aquí se usa la coleccion upload.form debido a que el componente AspUplad no
'se lleva bien con el request.form del ASP
Set Upload = Server.CreateObject("Persits.Upload.1")
'Carpeta donde se subirán los ficheros
Upload.Save("d:\xvrt\clubviajesoferta.com\html\amanciodeportes\images\prueba")
'Upload.Save("c:\Inetpub\turofertas\images\prueba")
%>
<%
set Conn= Server.CreateObject("ADODB.Connection")
Conn.ConnectionString = "DSN=clubviajesoferta.com.turofertas"
Conn.open
Set RS=Server.CreateObject("ADODB.Recordset")
rs.activeconnection=conn 
rs.source="ofertasmayoristas"
rs.Locktype = adLockOptimistic
rs.CursorType = adOpenDinamic
rs.open
'Recupera las variables del formulario
referenciaoferta= Trim(upload.Form("referenciaoferta"))
denominacionoferta= Trim(upload.form("denominacionoferta"))
mayoristaoferta= Trim(upload.Form("mayoristaoferta"))
fechavalidezoferta= Trim(upload.form("fechavalidezoferta"))
imagenproducto=trim(upload.form("imagenproducto"))
insertar="True" 
'Validamos el formulario
if referenciaoferta= "" then
 response.write("<ul><div align=""center""><font face= ""Arial, Helvetica, sans-serif"" size=""2"" color=""#FB4C50"">" & "El campo <em>""Referencia""</em> está vacio</font></div>")
 insertar="False"
end if
if denominacionoferta= "" then
 response.write("<div align=""center""><font face= ""Arial, Helvetica, sans-serif"" size=""2"" color=""#FB4C50"">" & "El campo <em>""Denominación""</em> está vacio </font></div>")
 insertar="False"
end if
if mayoristaoferta= "" then
 response.write("<div align=""center""><font face= ""Arial, Helvetica, sans-serif"" size=""2"" color=""#FB4C50"">" & "El campo <em>""Mayorista""</em> está vacio </font></div>")
 insertar="False"
end if
If NOT IsDate(fechavalidezoferta) then
response.write("<div align=""center""><font face= ""Arial, Helvetica, sans-serif"" size=""2"" color=""#FB4C50"">" & "El campo <em>""Fecha Validación""</em> contiene una fecha incorrecta </font></div>")
insertar="False"
'else
'response.write "La fecha de validez una vez convertida es: " & Cdate(fechavalidez) & "<br>"
end if
'Añadimos el registro
 rs.addnew
For each Parametro in upload.Form
 'Aquí recogemos el valor del campo del formulario porque las variables solo
 'se usan para validar el formulario, debido a que no hay forma de recoger
 'los valores que hay en las variables para meterlas en la base de datos
 if rs(parametro.name)="fechavalidezoferta" then
  'rs(parametro.value)=FormatDateTime(Date, 2) 
  rs(parametro.name)=(parametro.value)
 end if
Next
'Este For-Next hace que el fichero se suba al servidor
ruta="../images/prueba/"
For Each File in Upload.Files
  rs(File.name)=ruta & (File.filename)
 'Response.Write File.Name & "= " & File.Path & " (" & File.Size &" bytes)<BR>"
Next
If Insertar="True" then
 rs.Update
%>
 <table width="100%"  border="0">
  <tr>
	<td width="87%"><div align="right"><font face="Arial, Helvetica, sans-serif"><a href="../modulo_gestion.asp"><font size="2">Men&uacute; Principal</font></a> </font></div></td>
	<td width="13%"><div align="right"><font size="2"><a href="frame_insertar.htm" target="_parent"><font face="Arial, Helvetica, sans-serif">Otra Inserci&oacute;n</font></a> </font></div></td>
  </tr>
  <tr>
	<td colspan="2"><div align="center">
	  <font face="Arial, Helvetica, sans-serif" size="3" color="#FB4C50">
   <p>&nbsp;</p>
	  <p>&nbsp;</p>
	  <p>&nbsp;</p>
	  <p><strong>LA OFERTA SE HA AÑADIDO A LA BASE DE DATOS CORRECTAMENTE</p></strong></font>
	</div></td>
  </tr>
</table>
 
<%
else
 rs.cancelupdate
 response.write("<div align=""center""><br><strong><font face= ""Arial, Helvetica, sans-serif"" size=""3"" color=""#FB4C50"">" & "El producto no se ha añadido a la base de datos. <br>El/los campo/s arriba indicados no contienen datos o no son correctos. <p> <a href=""javascript:history.back()"">Pulse aquí para poder completar los datos correctamente</strong></font></a></div>")
End if
rs.close
conn.close
%>
<body>
</body>
</html>
  #13 (permalink)  
Antiguo 10/09/2004, 14:57
 
Fecha de Ingreso: julio-2002
Ubicación: stgo rec
Mensajes: 438
Antigüedad: 21 años, 10 meses
Puntos: 3
Ese error a mi me lo arroja, 80004005, cuando la base de datos (archivo .mdb) no tiene permisos para lectura y escritura.
__________________
Saludos
Leo
  #14 (permalink)  
Antiguo 10/09/2004, 18:46
 
Fecha de Ingreso: junio-2003
Ubicación: Santiago de Compostela
Mensajes: 603
Antigüedad: 21 años
Puntos: 0
Pero ese no es el problema. Seguro. Porque he comprobado los permisos y los tiene bien
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 22:48.