我从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面板以通知用户诸如“数据已成功保存”。