![]() |
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 .... |
Hola,
Prueba con la función "TryStrToDate" o "TryStrToDateTime" de la unidad "SysUtils". |
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 |
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 |
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
|
También existe la función IsValidDate que puede ir bien en este caso. ;)
DateUtils. |
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....
|
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. ;) |
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 02:18:56. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi