Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   como valido fechas (https://www.clubdelphi.com/foros/showthread.php?t=37810)

JULIOCTORRESG 23-11-2006 14:51:28

como valido fechas
 
tengo un control DBtext enlazado a un campo fecha de una tabla ....no quiero usar el componente maskedit pero quiero validar que la entrada de datos en el componente dbtext sea correcta chequeando los separadores al menos eso que es lo mas comun olvidar .....xx/xx/xx tengo una funcion que cuenta la barras (/) y si son dos devuelve el resultado positivo ....en caso contrario manda mensaje de alerta no vuelve al dbtext para su reedicion ....el problema es

donde llamo la funcion ....lo hice el el evento onexit del contro dbtext pero revienta la aplicacion primero con aquello de formato de fecha invalido ...por otro lado imagino que existe una funcion que verifica el valor a ver si es valido algo asi como ISDATE en delphi y como se llama esta funcion ....

dec 23-11-2006 14:59:15

Hola,

Prueba con la función "TryStrToDate" o "TryStrToDateTime" de la unidad "SysUtils".

Bicho 23-11-2006 15:00:41

Hola, tienes la función StrToDate, el campo DBText contiene un string, y quieres saber si es una fecha válida. Mételo en un Try..except y si entra en el except es que no es una fecha válida.

Pruébalo a ver que tal.

Saludos

Bicho 23-11-2006 15:01:26

Dec se me ha adelantado y además te ahora el Try, ya que la función existe como tal.
Así pues yo me quedo con la da Dec, y tú? :D

Saludos

luisgutierrezb 23-11-2006 15:49:40

porque no buscas un componente de dbDateTimePicker, los jedi traen uno ademas de que existen otros free por ahi, asi queda el programa con mas vista y no te molestas en validar

Neftali [Germán.Estévez] 23-11-2006 16:41:30

También existe la función IsValidDate que puede ir bien en este caso. ;)
DateUtils.

JULIOCTORRESG 23-11-2006 19:52:12

Eso esta bien ....sin embargo
 
Ok ya tengo las funciones (agradecido estoy) pero lo malo es que El componente es un Dbedit el problema es donde pongo el codigo para validar .... tengo la propiedad autoedit del datasourse en false de modo que para modificar debo llamar al edit del dataset, ahora bien escribo la fecha y si es invalida al salir del componente a otro revienta la aplicacion ... la idea es interceptar este reviente antes de que ocurra ....donde lo intercepto....

dec 24-11-2006 07:25:55

Hola,

Pues si el "reviente" de la aplicación ocurre al salir del "DBEdit"... tal vez puedas usar su evento "OnExit" para validar la fecha... pero, se me hace raro... ¿no estamos hablando de un componente que guarda texto? Si es así (que no lo sé) ¿cómo es que "revienta" nada si se sale del mismo al escribir una fecha no válida? ¿Quién es el que "revienta"? ¿Quién está al tanto de la fecha que se escribe en el "DBEdit" y si no es válida "revienta"? No lo entiendo muy bien...

Por otro lado, si usas un "botón" para actualizar los cambios "editados"... ¿no podrías ahí mismo validar la fecha? Más aún, ¿no existe un evento "BeforeInsert" o similar que pudieras utilizar? Todo son dudas... ya ves que no te aporto mucho, pero, en fin, a ver si damos con la tecla entre todos. ;)

JULIOCTORRESG 24-11-2006 13:39:27

La verdad yo tampoco lo entiendo....
 
es la triste realidad ....voy a ampliar mi explicacion....

el componente es un dbedit enlazado con un campo de una tabla de tipo datetime por medio del datasourse si... esta claro que la aplicacion lanza una excepcion(para no serguir usando el termino "revienta") ya que el componente tedit espera un valor de tipo fecha valido ....eso lo entiendo sin embargo no olvidemos que coloque el valor autoedit del datasourse en false de modo que no puedo editar los valores sin llamar expresamente el metodo edit ...y para guardarlo necesito llamar al metodo post si .... claro esta, basandome en esto y asumiendo que los valores no son enviados a la bd antes del post pues yo puedo validar en el exit del componente o en el beforepost como valido pues si da falso interrumpo cancelo aviso devuelvo un valor predeterminado de fecha por ejemplo 01/01/80 por decir algo ....pero no puedo porque da la exepcion es como si despues de editar el campo en particular se lanzara automaticamente el metodo post y claro la aplicacioon se detiene ante el error ....


La franja horaria es GMT +2. Ahora son las 07:49:54.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi