Se considera una mala práctica hacer que los módulos de datos accedan a los formularios (por lo general, son los formularios los que conocen y utilizan los módulos de datos pero no al revés).
Lo que yo te recomendaría es que utilizaras los eventos del
DataSource para detectar los cambios de estado o de datos de la tabla en sí y codificar ahí tus operaciones (revisa los eventos:
OnDataChange,
OnStateChange y
OnUpdateData, aunque, en tu caso, el evento que más te va a interesar es el relacionado con el cambio de estado,
OnStateChange).
Si el
DataSource lo tienes en el mismo formulario, entonces, sólo has de especificar las operaciones en el evento de éste que mas de convenga, pero si lo tienes en un módulo de datos, entonces, lo que podrías hacer es, por ejemplo, crear propiedades de tipo "evento" para el módulo y capturar luego éstas en el formulario:
Módulo de datos
Código Delphi
[-]
type
TDataModule1 = class(TDataModule)
DataSource1: TDataSource;
...
procedure DataSource1StateChange(Sender: TObject);
private
FAlCambiarEstado: TNotifyEvent;
public
property AlCambiarEstado: TNotifyEvent read FAlCambiarEstado write FAlCambiarEstado;
end;
...
implementation
procedure TDataModule1.DataSource1StateChange(Sender: TObject);
begin
if Assigned(FAlCambiarEstado) then
FAlCambiarEstado(Self);
end;
...
Formulario
Código Delphi
[-]
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
...
private
procedure AlCambiarEstado(Sender: TObject);
...
end;
...
implementation
procedure TForm1.FormCreate(Sender: TObject);
begin
DataModule1.AlCambiarEstado := AlCambiarEstado; end;
procedure TForm1.AlCambiarEstado(Sender: TObject);
begin
end;
...
(Esta misma técnica la puedes utilizar para capturar otros eventos del
DataSet, pero lo mejor es utilizar los del
DataSource cuando se trata de sincronizar la interfaz)
Saludos!
P.D: Mejorando el ejemplo, también podrías crearte un tipo de evento propio que reciba el estado del DataSet (y así saber si está en inserción, edición, etc.).
Módulo de datos
Código Delphi
[-]
type
TEventoCambioEstado = procedure(Sender: TObject; Estado: TDataSetState);
TDataModule1 = class(TDataModule)
...
private
FAlCambiarEstado: TEventoCambioEstado;
public
property AlCambiarEstado: TEventoCambioEstado read FAlCambiarEstado write FAlCambiarEstado;
...
end;
...
implementation
procedure TDataModule1.DataSource1StateChange(Sender: TObject);
begin
if Assigned(FAlCambiarEstado) then
FAlCambiarEstado(Self, DataSource1.State);
end;
...
Formulario
Código Delphi
[-]
type
TForm1 = class(TForm)
...
private
procedure AlCambiarEstado(Sender: TObject; Estado: TDataSetState);
end;
...
implementation
procedure TForm1.AlCambiarEstado(Sender: TObject; Estado: TDataSetState);
begin
end;
...