Aunque el método es totalmente válido, no aconsejaría esa práctica. Si ahora asignas un evento con el inspector de objetos al dsContabledel datamodule, éste evento dejará de funcionar cuando se abra el Form de Contabilidad, lo que hace muy muy dificil encontrar el error.
Lo que propongo es hacer exactamente lo mismo pero con un evento creado por tí:
en el Datamodule:
Código Delphi
[-]
TDatamodule = class(...)
private
FNotifyToTFormContabilidad:TDataChangeEvent;
public
property NotifyToTFormContabilidad:TDataChangeEvent read FNotifyToTFormContabilidad
write FNotifyToTFormContabilidad;
end;
procedure TDatamodule.dsContableDataChange(Sender: TObject; Field: TField);
begin
if Assigned(FNotifyToTFormContabilidad) then
FNotifyToTFormContabilidad(Sender, Fied); end;
Ahora en el form de contabilidad, hacemos la asignacion del evento, pero en lugar de usar dsContableDataChange, usamos el evento recien creado:
Código Delphi
[-]
procedure TFormContabilidad.Create(Sender: TObject);
begin
DataModule.NotifyToTFormContabilidad:=dsContableDataChange;
end;
procedure TFormContabilidad.Close(....);
begin
DataModule.NotifyToTFormContabilidad:= nil;
end;
Por supuesto, al cerrar el form de contabilidad, hay que quitar la asignación del evento. Si no lo hacemos y se destruye el Form de contabilidad, cuando en el Datamodule.dsContable se cambie un dato producirá un Access Violation.
Ahora tenemos todo en orden, si necesitas el evento OnDataChange del Datamodule.dsContable, lo tienes ya creado, y además te acordarás de que tambien se informa al Form de contabilidad, por tanto, es más claro el código (aunque ahora mismo no te lo parezca jejeje).
Edito: Notarás que la variable Privada tiene un F delante, tal y como dicen los Standares de programación, (es un
Field privado). Despues desde TFormContabilidad se accede a la propiedad pública del Datamodule (sin la F).
Saludos