Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   OnValidate (https://www.clubdelphi.com/foros/showthread.php?t=5194)

javiermorales 12-11-2003 17:17:24

OnValidate
 
Hola de nuevo foro. La pregunta es la siguiente:

Cuando se desea controlar el valor introducido en un campo, en este caso asociado a una columna de un RxDbGrid aunque daría igual a que estuviese asociado, se utiliza el evento OnValidate, pero si se detecta que el valor no es correcto, ¿como se hace que se vuelva al valor anterior?.

He probado lo siguiente:
1.- DataSet.Cancel: Pero me salta el error de no tener el dataset en modo inserción o edición y como trazándolo me dá en una línea del RxDbCtrl, pues no se como solucionarlo.

2.- Lanzando una excepción (ya que en el histórico de foros se indicaba eso y en la ayuda dice "send a raise" para anular el valor introducido. Pero me salta la excepción generada y no devuelve al valor antiguo.

PD: El campo es una columna de un RxDBGrid y es la única accesible, por lo que al salir de la columna, cambia de registro y provoca el intento del Post, aunque al realizar la cancelación o la excepción no lo realiza.

En fin, ¿alguna idea?. Gracias. Un saludo.

marcoszorrilla 12-11-2003 20:09:36

Quizás:
Sysutils.Abort;

Un Saludo.

javiermorales 12-11-2003 21:08:05

Gracias Marcos. Con tu consejo no se produce ningún error en la ejecución y funciona correctamente. El único inconveniente es que no retorna al valor antiguo, pero lo haré de forma manual.

Muchas Gracias. Un saludo.

jachguate 12-11-2003 22:55:38

Desde un evento OnValidate no te recomiendo volver al valor anterior por código. El usuario regularmente podrá hacerlo presionando Esc sobre el DBControl o bien cancelando la operación de inserción/edición.

Me parece extraño que no te funcione el DataSet.Cancel, dado que el evento se generará siempre que el estado del registro sea dsInsert o dsEdit. Quizas estas tratando de cancelar otro dataset y no el que genera el evento.

Hasta luego.

;)

javiermorales 13-11-2003 08:23:42

Hola Juan Antonio, gracias por contestar. Si que estoy cancelando el DataSet adecuado, el problema está en que al cancelarlo, en algún punto (y no se cual ya que al trazarlo se me produce el error al final de una función (despues del "end.")) me indica que el DataSet no está en modo inserción o edición.

De todas maneras con la recomendación de Marcos, esa parte está salvada. En cuanto a volver a al valor anterior, he llegado a la misma conclusión que tú y debe ser el usuario el que devuelva el valor antiguo.

Gracias de nuevo. Un saludo.

jachguate 13-11-2003 15:52:52

Lo que ocurre seguramente es que el mismo BDE está tratando de aplicar alguna operación sobre el registro después de concluir el evento, y al haber cancelado la edición/inserción dentro de este, se produce la excepción. Por eso ocurre después del end.

;)


La franja horaria es GMT +2. Ahora son las 05:22:50.

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