Ir al contenido


Foto

¿Cómo capturo las excepciones de un TDBEdit cuando el Mask está en el TField?


  • Por favor identifícate para responder
7 respuestas en este tema

#1 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 16 mayo 2009 - 01:19

Hola compañeros, tengo esta duda, tengo un Dataset y a uno de los campos le coloqué una máscara, cuando en el DBEdit se dispara su evento OnExit me marca el error 'Invalid Input, Press escape', perfecto, ¿cómo capturo esos errores para poder personalizarlos?, tengo campos con máscaras para teléfonos y Fechas, ¿alguien sabe?  :^)  :^)

Saludos.
  • 0

#2 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 16 mayo 2009 - 04:06

Hola Fernando,
¿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,

  • 0

#3 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 16 mayo 2009 - 04:27

..¿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.
  • 0

#4 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 16 mayo 2009 - 05:54

Pues amigo, es raro...
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,
  • 0

#5 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 17 mayo 2009 - 01:43

Pues la verdad amigo, no se por donde mirar.

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,
  • 0

#6 Ayla

Ayla

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 98 mensajes

Escrito 19 mayo 2009 - 02:21


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.

  • 0

#7 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 19 mayo 2009 - 06:42

Hola Ayla, no me sucede nada de eso, simplemente quiero personalisar las excepciones que se producen en esos eventos, ya que no me cabe usar los que están por defectos en Delphi.

Saludos.
  • 0

#8 Héctor Randolph

Héctor Randolph

    501st Legion

  • Moderadores
  • PipPipPip
  • 664 mensajes
  • LocationMéxico

Escrito 19 mayo 2009 - 11:17

EL componente TDBEdit desciende de TCustomMaskEdit declarado en la unidad  Mask.pas.

Cuando ocurre un error de validación en la máscara, se dispara la ejecución del método ValidateError.



delphi
  1. procedure TCustomMaskEdit.ValidateError;
  2. begin
  3.   MessageBeep(0);
  4.   raise EDBEditError.CreateResFmt(@SMaskEditErr, [EditMask]);
  5. end;



Este método levanta una excepción DBEditError con el mensaje 'Invalid input value.  Use escape key to abandon changes'

*-) No lo sé, si quisieramos modificar este comportamiento, tal vez una opción serí­a añadir un evento al componente TCustomMaskEdit y que se active justo antes de levantar la excepción.

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


  • 0




IP.Board spam blocked by CleanTalk.