Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Capturar insert y post en DBGrid (https://www.clubdelphi.com/foros/showthread.php?t=54575)

Roky 24-03-2008 12:10:41

Capturar insert y post en DBGrid
 
Hola a todos,
Trabajo con Delphi7 y Firebird 2.0.

Estoy desarrollando una aplicación en tres capas. En la capa de la interfaz utilizo el DBGrid del BDE para visualizar algunas entidades. Por otra parte, la lógica del negocio la hago en la 2ª capa.

El caso es que cuando se guardan los cambios realizados sobre la entidad que se visualiza en el DBGrid, se debe hacer una llamada a la 2ª capa para validar los cambios. Sin embargo, ya sabeis que cambiando de fila en el DBGrid, los cambios se guardan directamente en el DataSet asociado.

Por tanto, lo que me gustaría saber es cómo capturar el evento de que el usuario cambie de fila de forma que pueda lanzar el código de validación de la 2ª capa y decidir si guardo o no los cambios en el dataSet.
Por extensión, también me interesa saber cuando el usuario, por cambiar de fila, provoca un insert; o cuándo pulsa ctrl+supr y elimina una fila.

Perdón por la extensión del mensaje y gracias.

eduarcol 24-03-2008 14:54:08

pero eso lo puedes lograr con los eventos del dataset asociado.

Caro 24-03-2008 15:00:13

Hola Roky, lo puedes hacer con los eventos de tu DataSet (BeforePost, BeforeInsert, BeforeDelete) y utilizar el procedimiento Abort para cancelar digamos el Post.

Saluditos

Roky 24-03-2008 17:22:10

¿Se puede evitar llegar al DataSet?
 
Precisamente quisiera evitar que el evento llegara al DataSet.
El DataSet reside en la capa de datos, la cual no entiende de la lógica de negocio (no sabe si los datos son correctos o no, ni qué hacer en consecuencia). Además, quisiera que el flujo de la información fuera lineal, de una capa a otra (interfaz --> negocio --> datos)

Haciendo lo que planteais, de alguna manera la información llegaría directamente a la capa de datos (al dataSet), sin pasar por la de negocio, aunque bien es cierto que con el abort podríamos "rebotar" la información hacia la capa de negocio para que la valide.

Lo que busco es el mismo efecto que pulsando un botón de "Guardar registro". El evento de este botón llamaría al método correspondiente de la capa de negocio y ésta decidiría si pasar la orden a la capa de datos para que hiciera efectivo el post.

Por tanto, insisto en la pregunta. ¿Podemos capturar el insert y post que que se provoca al cambiar de fila en un DBGrid, antes de que llegue al DataSet? (No sé si es posible lo que planteo)

De todas formas, gracias por la aportación.

keyboy 24-03-2008 18:48:15

El DBGrid, al igual que todos los controles llamados DB Aware, están diseñados para comunicarse directamente con el DataSet asociado. La forma en que tú quieres trabajar - muy válida, por cierto -implica en muchos casos tener que olvidarse de este tipo de controles.

Bye

eduarcol 24-03-2008 19:11:59

Cita:

Empezado por keyboy (Mensaje 274925)
El DBGrid, al igual que todos los controles llamados DB Aware, están diseñados para comunicarse directamente con el DataSet asociado. La forma en que tú quieres trabajar - muy válida, por cierto -implica en muchos casos tener que olvidarse de este tipo de controles.

Bye

No estoy al tanto de la programacion multicapas, pero creo que para eso que comenta Keyboy se puede utilizar los ClientDatasets.


La franja horaria es GMT +2. Ahora son las 09:18:53.

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