FoxPro/Visual FoxPro - Sobre el INVALID DATE

 
Vista:
sin imagen de perfil

Sobre el INVALID DATE

Publicado por Josbel Gonzalez (2 intervenciones) el 19/08/2013 19:04:07
Saludos a Toda La comunidad, tiempo sin publicar pero como siempre, esta es la fuente del conocimiento; Mi problema es el siguiente, en un formulario coloque un campo de texto que luego en código asigno para tomar el formato de fecha:

Thisform.fecha_ingreso.Value=CTOD(" / /")

Acá no hay problema me toma la mascara, y me deja asignar la fecha, cabe destacar que previamente en el evento lostfocus del textbox se setearon estos valores:

set century on
set date british

Ok, si por ejemplo yo coloco la fecha 88/88/8888 el mismo fox me muestra una pequeña pantalla que dice "INVALID DATE" esto lo entiendo por que como obviamente no cumple el formato correcto de fecha según fox y su seteo, pero yo quiero evitar esta "pantalla de error" y validarlo con mi código el cual ya tengo realizado, espero haber sido explicito, de verdad gracias por cualquier ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Sobre el INVALID DATE

Publicado por Jose Garcia (1 intervención) el 19/08/2013 20:19:33
Creo que es SET SAFETY OFF para anular los mensajes del visual, pero no te dejaria avanzar al siguiente campo porque esa fecha es ilogica, puedes personalizar el error con ON ERROR ya que este se dispara, con ese tipo de errores, antes que el evento VALID, puedes personalizar el error con el comando DO e ir crear tu propia pantalla de errores para guiar al usuario.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Sobre el INVALID DATE

Publicado por Josbel Gonzalez (2 intervenciones) el 19/08/2013 21:59:42
Hola Amigo Jose muchísimas gracias por tu respuesta!!, probé con el SET SAFETY OFF y aun sigue apareciendo el error, yo tengo mas conocimientos en visual basic sobre implementar el ON ERROR, y ya vi que no es la misma nomenclatura en VISUAL FOX podrías ayudarme con una sintaxis lo que yo uso para la validación es el siguiente ejemplo de código:

IF Fec1=ctod(" / / ")
=MessageBox("Debe Ingresar la fecha de nacimiento...",16,"Atención...")
Thisform.fecha_ingreso.SetFocus
Return .t.
ENDIF

IF Day(Fec1) > 31 then
=MessageBox("El Numero de Día No puede ser mayor que 31",16,"Atención...")
Thisform.fecha_ingreso.SetFocus
Return .t.
ENDIF

IF MONTH(Fec1) > 12 then
=MessageBox("El Numero de Mes No puede ser mayor que 12",16,"Atención...")
Thisform.fecha_ingreso.SetFocus
Return .t.
ENDIF

y con un código similar verifico el año y comparo que no sea menor al actual me imagino que habrá cientos de formas mas fáciles e incluso de depurar el código pero como es algo puntual no necesito mas que evitar el fulano error de visual y validar contra estos IF.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Sobre el INVALID DATE

Publicado por Fidel (558 intervenciones) el 20/08/2013 13:07:26
1) La configuración de un textbox para fecha es:
.FORMAT="D"
La configuración SET DATE BRITISH y SET CENTURY ON deben estar en el inicio de la sesión de datos. Si no utilizas DataSession, deben estar al inicio del programa.

2) para generar un formato de fecha vacío puedes utilizar Ctod(""). Si asocias el Textbox a un campo de tabla por ControlSource, no necesitas declarar el valor, se asume automáticamente. En cambio, si lo asocias a una variable de memoria o a una propiedad del form, la propiedad o variable deben tener un valor fecha válido:
Thisform.MIfecha=Ctod("")
with thisform.TextFEcha
.Format="D"
.Controlsource="Thisform.MiFecha"
ENDWITH
Si quieres establecer una fecha determinada, utiliza la función Date()
mifecha=Date(2013,8,5)
ó Thisform.TExtFecha.Value=Date(2013,8,31)

3) El mensaje que te envía fox no habla de formato, sino del valor del dato. No puedes escribir en un textbox configurado como FORMAT="D" cualquier cosa. Solo puedes colocar una fecha válida. Si la fecha no es válida, no te dejará continuar, aunque no envía ningún mensaje de error.

4) Para el evento Valid del TExtbox
IF Fec1=ctod(" / / ") Esta sentencia es incorrecta.

Correcta: If Empy(this.value)

5) Consejo para el Envento Valid . Fecha de nacimiento
a) no pongas el test de vacío ahí porque si no se conoce la fecha y se debe abandonar el form no habrá modo de hacerlo. La validación de fecha vacía la debes hacer antes de Aceptar los datos.
Si no usas un botón de aceptar (carga en grid), coloca una alternativa para abondar el alta de datos dentro de la validación. Recuerda que en el evento Valid no se admite el SetFocus.
b) En general
IF !EMPTY(THIS.VALUE)
IF This.Value>Date()
Messagebox("Aún no ha nacido esta persona")
return 0
endif
ndays=Date() - This.Value
nYears=Ceiling(nDays/365)
if nYears > 100
Messagebox("Verifique que la persona aún vive (Más de 100 años)")
return 0
endif
* otras consideraciones por el estilo
ENDIF

Para el botón de Aceptar (Click)
IF EMPTY(THISFORM.TextFEcha.value)
Messagebox("Falta la fecha de nacimiento")
Thisform.TextFecha.SetFocus
RETURN
ENDIF
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Sobre el INVALID DATE

Publicado por neo (1604 intervenciones) el 21/08/2013 03:22:38
Si lo que quieres es que no muestre el mensajito de "Invalid Date" solo debes agregar esto:

SET NOTIFY OFF


Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar