* Fix bug #0030379: detect circular refences

git-svn-id: trunk@43143 -
This commit is contained in:
michael 2019-10-06 13:11:17 +00:00
parent 436d73c20f
commit 7e9e0e1965
2 changed files with 15 additions and 2 deletions

View File

@ -559,10 +559,21 @@ begin
end; end;
Function TDataSource.IsLinkedTo(ADataSet: TDataSet): Boolean; Function TDataSource.IsLinkedTo(ADataset: TDataSet): Boolean;
var
DS: TDataSource;
begin begin
Result:=False; Result:=False;
Repeat
DS:=aDataset.GetDataSource;
Result:=(DS=Self);
if Assigned(DS) then
aDataSet := DS.DataSet
else
aDataSet := Nil;
Until Result or (aDataset=Nil)
end; end;
@ -615,6 +626,8 @@ begin
End; End;
If ADataset<>Nil Then If ADataset<>Nil Then
begin begin
if IsLinkedTo(aDataset) then
DatabaseError(SErrCircularDataSourceReferenceNotAllowed,Self);
FDataSet:=ADataset; FDataSet:=ADataset;
ADataset.RegisterDatasource(Self); ADataset.RegisterDatasource(Self);
ProcessEvent(deUpdateState,0); ProcessEvent(deUpdateState,0);

View File

@ -1926,7 +1926,7 @@ type
constructor Create(AOwner: TComponent); override; constructor Create(AOwner: TComponent); override;
destructor Destroy; override; destructor Destroy; override;
procedure Edit; procedure Edit;
function IsLinkedTo(ADataSet: TDataSet): Boolean; function IsLinkedTo(ADataset: TDataSet): Boolean;
property State: TDataSetState read FState; property State: TDataSetState read FState;
published published
property AutoEdit: Boolean read FAutoEdit write FAutoEdit default True; property AutoEdit: Boolean read FAutoEdit write FAutoEdit default True;