
¿Cómo capturo las excepciones de un TDBEdit cuando el Mask está en el TField?
#1
Posted 16 May 2009 - 01:19 PM
Saludos.
#2
Posted 16 May 2009 - 04:06 PM
¿Te refieres a que estableces una máscara en la propiedad EditMask y/o EditFormat que ofrecen los objetos derivados de TField (EditMask para los casos de Fields de tipo string, y EditFormat para los Fields numéricos)?
Según lo que veo en la ayuda, para determinar si el texto ingresado es correcto, hay que hacer uso del evento OnValide correspondiente al campo en cuestión:
Use EditMask to restrict the characters a user can enter. If the user attempts to enter a character that is not valid, the character is not accepted. Validation using the EditMask property is performed on a character-by-character basis. Use the OnValidate event instead to validate the entire input, just before it is posted.
Setting EditMask to an empty string removes the mask.
Ahora bien, del código que estuve viendo de los dbedits, datasets, y los fields, no logro ver cuando y desde donde se puede largar alguna excepción así... ¿Haz probado con un try-on exception para ver que excepción se logra capturar? ¿O no se captura nada?
Saludos,
#3
Posted 16 May 2009 - 04:27 PM
..¿Haz probado con un try-on exception para ver que excepción se logra capturar? ¿O no se captura nada?
Sí amigo he probado un Try..Except en ese evento e incluso lo he probado en el evento OnSetText y nada, sale el de Delphi por defecto, por eso abrí este hilo a ver si hay alguna otra manera

Saludos.
#4
Posted 16 May 2009 - 05:54 PM
Habría que mirar bien el código y en como tienes relacionado los componentes...
Lo único relacionado con el tema de las máscaras es que para validar que esté correctamente ingresado es que se debe hacer uso del evento OnValidate.
Hay que estudiar bien esto. Yo estoy medio en blanco, estuve leyendo en como interactúan los dataset, los fields, los datasource para ver por donde puede venir los tiros. El problema con OnValidate es que se dispara en muchas situaciones... y casi siempre es por alguna orden proveniente desde el dataset.
Por allí puede venir la mano amigo

Seguiré viendo.
Saludos,
#5
Posted 17 May 2009 - 01:43 PM
Me gustaría que nos comentases bien como estás llevando todo, asi vemos si podemos recrear las mismas condiciones. Quizá podamos ver por donde atajar el problema.
Saludos,
#6
Posted 19 May 2009 - 02:21 AM
Hola,
¿Se te sale del programa cuando estás modo diseño o directamente utilizando el ejecutable? A mí me ha pasado más de una vez que cuando estoy en diseño salta la excepción y se sale de programa. Pero si ejecuto el programa desde el ejecutable, salta la excepción pero no se cierra el programa.
Un saludo.
#7
Posted 19 May 2009 - 06:42 AM
Saludos.
#8
Posted 19 May 2009 - 11:17 AM
Cuando ocurre un error de validación en la máscara, se dispara la ejecución del método ValidateError.
procedure TCustomMaskEdit.ValidateError; begin MessageBeep(0); raise EDBEditError.CreateResFmt(@SMaskEditErr, [EditMask]); end;
Este método levanta una excepción DBEditError con el mensaje 'Invalid input value. Use escape key to abandon changes'

Edito: Si modificamos el comportamiento del TCustomMask, este cambio afectará a todos los componentes que descienden de él. Por otra parte si añadimos un evento, en principio no afectará a otras clases puesto que mientras no se defina el código del evento no pasa nada.
De cualquier manera no me gusta la idea de meterle mano a los componentes estándar de Delphi
Saludos