DELPHI Catch更新,删除,从TFDMemTable创建事件

时间:2015-08-16 21:18:24

标签: delphi delphi-xe firedac

我从TFDMemTable创建了一个后代组件。现在我需要在更新数据(创建,更新,删除)上捕获事件...以添加更具体的治疗方法。

    unit _DATAAccess;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  System.Rtti, FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param,
  FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf,
  Data.DB, FireDAC.Comp.DataSet, FireDAC.Comp.Client, REST.Response.Adapter,
  REST.Client, System.JSON, REST.JSON,FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs,
  _TOASTER;

type
    // Events type from FireDac.Comp.client
  TFDUpdateRecordEvent = procedure (ASender: TDataSet; ARequest: TFDUpdateRequest; var AAction: TFDErrorAction; AOptions: TFDUpdateRowOptions) of object;
  TFDUpdateErrorEvent = procedure (ASender: TDataSet; AException: EFDException; ARow: TFDDatSRow; ARequest: TFDUpdateRequest; var AAction: TFDErrorAction) of object;
  TFDAfterApplyUpdatesEvent = procedure (DataSet: TFDDataSet; AErrors: Integer) of object;
  TFDReconcileErrorEvent = procedure(DataSet: TFDDataSet; E: EFDException; UpdateKind: TFDDatSRowState; var Action: TFDDAptReconcileAction) of object;



  TDataAccess = class(TFDMemTable)
  private
    FToaster : TToaster;  // another component to create toaster

  public
   constructor Create(AOwner: TComponent); override;

    function DoApplyUpdates(ATable: TFDDatSTable; AMaxErrors: Integer); override;

  published

    property ActiveStoredUsage;
    { TDataSet }
    property Active;
    property AutoCalcFields;
    property BeforeOpen;
    property AfterOpen;
    property BeforeClose;
    property AfterClose;
    property BeforeInsert;
    property AfterInsert;
    property BeforeEdit;
    property AfterEdit;
    property BeforePost;
    property AfterPost;
    property BeforeCancel;
    property AfterCancel;
    property BeforeDelete;
    property AfterDelete;
    property BeforeScroll;
    property AfterScroll;
    property BeforeRefresh;
    property AfterRefresh;
    property OnCalcFields;
    property OnDeleteError;
    property OnEditError;
    property OnNewRecord;
    property OnPostError;
    property FieldOptions;
    property Filtered;
    property FilterOptions;
    property Filter;
    property OnFilterRecord;
    property ObjectView default True;
    property Constraints;
    property DataSetField;
    property FieldDefs stored FStoreDefs;
    { TFDDataSet }
    property CachedUpdates;
    property FilterChanges;
    property IndexDefs stored FStoreDefs;
    property Indexes;
    property IndexesActive;
    property IndexName;
    property IndexFieldNames;
    property Aggregates;
    property AggregatesActive;
    property ConstraintsEnabled;
    property MasterSource;
    property MasterFields;
    property DetailFields;
    property OnUpdateRecord;
    property OnUpdateError;
    property OnReconcileError;
    property BeforeApplyUpdates;
    property AfterApplyUpdates;  // TFDDataSet  --> : TFDAfterApplyUpdatesEvent;
    property BeforeGetRecords;
    property AfterGetRecords;
    property AfterGetRecord;
    property BeforeRowRequest;
    property AfterRowRequest;
    property BeforeExecute;
    property AfterExecute;
    property FetchOptions;
    property FormatOptions;
    property ResourceOptions;
    property UpdateOptions;
    { TFDAdaptedDataSet }
    property LocalSQL;
    property ChangeAlerter;
    property ChangeAlertName;
    { TFDCustomMemTable }
    property AutoCommitUpdates;
    property Adapter;
    property StoreDefs;

    property Toaster : TToaster read FToaster write FToaster;

  end;

procedure Register;

implementation


constructor TDataAccess.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  // self.OnNewRecord :=
  // self.OnUpdateRecord := OnDoApplyUpdates;
  Self.OnAfterApplyUpdates := DoApplyUpdates;
  // self.OnPostError :=

end;  

function TDataAccess.DoApplyUpdates(ATable: TFDDatSTable; AMaxErrors: Integer); override;
var
  T : TToaster;
begin
    inherited;

    T := TToaster.create(application.ActiveForm);
    T.Show('This is the toaster Test when i apply Post the modifications');

end;


end;

我做了很多尝试。这是我做的最后一次尝试,它也没有用。当我可以无错误地编译时,即使数据在stringgrid中正确更新,也不会执行事件代码。

我想我做错了。有人可以帮我吗?遗失了什么...

我喜欢在更新数据时捕获事件以保持继承的行为并添加Toast面板以通知用户诸如“数据已成功保存”。

0 个答案:

没有答案