FoxPro/Visual FoxPro - Validar fecha

 
Vista:

Validar fecha

Publicado por Ánge Isorna (135 intervenciones) el 30/12/2003 01:38:22
Hola a todos:
Yo normalmente cuando quiero validar una fecha en un formulario lo que hago es lo siguiente:
xfecha=ctod(thisform.afechabaja.value)
xfecha=alltrim(dtoc(xfecha))
if len(xfecha)=4
messagebox("Error: fecha no valida.")
endif
*
ahora bien la fecha tiene que llevar datos y no quedar vacia, por que el truco es que el dtoc devuelve una fecha vacia si es nula, 4 espacios.
Pero ahora se me plantea que una fecha lleve datos correctos o quede vacia , sin datos y este método no me vale.
¿Alguien me puede decir como hacer?

Gracias y feliz año 2004.
Ángel.
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
sin imagen de perfil
Val: 29
Ha aumentado su posición en 3 puestos en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

RE:Validar fecha

Publicado por Javier Albornoz (271 intervenciones) el 30/12/2003 12:53:26
Hola:
Me parece que es más cómodo usar un dato de tipo fecha para poder validarla.
En modo diseño pulsa el botón derecho del mouse sobre el control caja de texto y en el generador elegi dato de tipo fecha (es una forma)
Luego en el evento valid controla si es valida.

IF ( Empty( This.Value ) )
....* fecha vacia
....RETURN .F.
ENDIF
RETURN .T.

Espero que te sirva
Saludos
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

RE:Validar fecha

Publicado por Walter (1 intervención) el 01/01/2004 16:01:09
Hola

Yo suelo usar las propiedades Format e InputMask del control TextBox.

Con el TextBox seleccionado, voy a la ventana propiedades y en la Ficha Datos, escribo en la propiedad:

Format el valor RE

InputMask el valor 99/99/9999

R: Sirve para indicar que quiero usar un formato de salida personalizado
E: indica que voy a usar un tipo de datos fecha en formato British (día/mes/año)

99/99/9999: Es el formato de salida personalizado. Dos dígitos para el día, dos diqitos para el mes y cuatro dígitos para el año.

De este modo el TextBox controla que se haya ingresado una fecha válida.

Para evitar que se deje el control vacío, en el evento Valid del TextBox escribo:

IF EMPTY(This.Value)
WAIT "Debe ingresar una fecha." WINDOW

RETURN 0
ENDIF

Escribiendo RETURN 0 (cero) evito que el TextBox pierda el enfoque.
Además no me muestra el mensaje de error por defecto (cosa que pasa con RETURN .F.)
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

RE:Validar fecha

Publicado por Alcydez (1 intervención) el 08/05/2015 16:17:08
Buen día.
También soy nuevo en este tema, y sin mentir me he quedado atascado 2 días tratando con ese tema, buscaba tutoriales y nada, cuando entre a esta web encontré la solución.
Mi formulario es el siguiente:
- txtFecha = esta en formato fecha, el valor ingresará al campo que también está en formato fecha de mi tabla.
Al momento de ejecutar el formulario y me muestra en el txtFecha esto " - - ", para digitar la fecha.
* Init del formulario
SET CENTURY ON
SET DATE ITALIAN **este formato tiene dd-mm-yyyy, el formato BRITISH tiene dd/mm/yyyy, lo que cambia es el "/" por "-"

Ahora en el textbox de la fecha.
Click derecho y BUILDER entra a sus propiedades, y en Data Type (seleccionas "DATE")
....
Siguiendo en el Botón AGREGAR O GUARDAR pones lo siguiente.
* * Para ingresar datos del formulario a la tabla

Select "nombre de la tabla"
APPEND BLANK

replace codigo WITH thisform.txtCodigo.Value
replace nombre WITH thisfomr.txtNombre.Value
replace telefono WITH thisform.txtTelefono.value
replace fecha WITH thisform.txtFecha.value
*** para borrar los campos.
thisform.txtCodigo.value="" ** esta en formato Character
thisform.txtNombre.value="" ** formato character
thisform.txtTelefono.value=0 ** esta en formato numérico
thisform.txtFecha.value= CTOD (" - - ") ** esta en formato fecha, yo puse ("- - ") si quieres que aparezca "/" pones ctod(" / / ")
thisform.txtCodigo.SetFocus()
thisform.refresh.

Usando esos códigos no me da problemas a la hora de ingresar datos de un formulario a una tabla, y tampoco me sale error en los formularios de fecha.

Saludos,
Alcydez.
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

RE:Validar fecha

Publicado por Fidel José (558 intervenciones) el 09/05/2015 18:41:30
Textbox para fechas con campo (o propiedad) tipo "D"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.InputMask="D"
.Value=Ctod("")       && ó .value=Date() si queremos que aparezca con la fecha del día.
 
*ValidEvent
* Si no admite fecha vacía
IF EMPTY(This.value)
          This.value = Date()           && opcional
          RETURN 0
ENDIF
 
* Si no admite fecha superior al dia
IF THIS.VALUE > DATE()
             THIS.VALUE=DATE()
             RETURN 0
ENDIF
 
* Si tiene que estar en un rango de fechas (supongamos que tenemos dos propiedades)
IF !BETWEEN(this.value , Thisform.Fecha1 , thisform.Fecha2)
         Messagebox("Fecha fuera de rango")
         * Acá se puede ajustar al primer o segundo parámetro del Between()
         return 0
endif
 
 
* Recordar que los eventos When y Valid no aceptan SetFocus.
Por lo tanto, si necesitamos redirigir el foco a un cuadro llamado .TextTal:
En lugar de
           Thisform.TextTal.SetFocus
Usar
           RETURN thisform.TextTal
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

RE:Validar fecha

Publicado por eduardo_a2j (1 intervención) el 14/06/2019 21:14:38
Bien, en mi caso, lo he resuelto así:
En el evento "VALID" de mi clase base "Textbox", con formato de Fecha (D) he agregado este código:

1
2
3
4
5
6
7
8
9
IF !EMPTY(THIS.VALUE)
	lnRango = 365.25 * 80		&& no mas atrás de 80 años
	lfMin = DATE() - lnRango
 
	IF THIS.Value < lfMin
		WAIT WINDOW 'Fecha no válida.' NOWAIT
		RETURN 0
	ENDIF
ENDIF

Basicamente lo que hace es evita se digiten fechas anteriores a 80 años de la fecha actual. Así, funcionaría para siempre jamás en el tiempo.
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