Recently I replaced ZeosLib with SDAC in a 6 years old project.
ZeosLib didn't execute TDataSet.BeforeOpen on an ExecSQL call; just for Open.
Therefore I wrote a wrapper class for its query component, and now I wanna implement it for SDAC.
My question is that should I leave the marked (<- XXX) BeforeOpen call in my derived class (TMyMSQuery), or SDAC does it properly ?
Code: Select all
TMyMSQuery = class(TMSQuery)
private
procedure BeforeOpenHandler(DataSet: TDataSet);
public
constructor Create(AOwner: TComponent); override;
procedure ExecSQL;
procedure Open;
end;
// *********************************************
constructor TMyMSQuery.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
BeforeOpen:=BeforeOpenHandler;
end;
procedure TMyMSQuery.Open;
begin
if IniParams.Database.ProtectQueries then
try
DatabaseRWCriticalSection.Enter;
inherited Open;
finally
DatabaseRWCriticalSection.Leave;
end
else inherited Open;
end;
procedure TMyMSQuery.ExecSQL;
begin
if Assigned(BeforeOpen) then BeforeOpen(Self); // <- XXX - leave it or not ?
if IniParams.Database.ProtectQueries then
try
DatabaseRWCriticalSection.Enter;
inherited ExecSQL;
finally
DatabaseRWCriticalSection.Leave;
end
else inherited ExecSQL;
end;
{$B-}
procedure TMyMSQuery.BeforeOpenHandler(DataSet: TDataSet);
begin
if IniParams.Log.Database and (DataSet.ClassName='TMyMSQuery') then FileLog(DatabaseAll,Linearize((DataSet as TMSQuery).SQL.Text));
end;