From: Andrea P. <and...@us...> - 2004-09-12 11:17:43
|
Update of /cvsroot/instantobjects/Source/Core In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8543 Modified Files: InstantPersistence.pas Log Message: Bugs fixing : External TParts and External TReferences Index: InstantPersistence.pas =================================================================== RCS file: /cvsroot/instantobjects/Source/Core/InstantPersistence.pas,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** InstantPersistence.pas 10 Sep 2004 10:16:59 -0000 1.8 --- InstantPersistence.pas 12 Sep 2004 11:17:33 -0000 1.9 *************** *** 56,60 **** QGraphics, {$ENDIF} ! Dialogs, Classes, Contnrs, SysUtils, DB, InstantClasses, InstantCommand; type --- 56,60 ---- QGraphics, {$ENDIF} ! Classes, Contnrs, SysUtils, DB, InstantClasses, InstantCommand; type *************** *** 6303,6308 **** begin Result := ObjectList.Add(AObject); - if Metadata.IsExternal=ceLinked then - AObject.FindAttribute(Metadata.ExternalLinkedName).AsObject:=Self.Owner; SetOwnerContext(AObject); end; --- 6303,6306 ---- *************** *** 6349,6354 **** begin ObjectList.Insert(Index, AObject); - if Metadata.IsExternal=ceLinked then - AObject.FindAttribute(Metadata.ExternalLinkedName).AsObject:=Self.Owner; SetOwnerContext(AObject); end; --- 6347,6350 ---- *************** *** 6505,6510 **** Ref: TInstantObjectReference; begin - if Metadata.IsExternal=ceLinked then - AObject.FindAttribute(Metadata.ExternalLinkedName).AsObject:=Self.Owner; Ref := CreateObjectReference(AObject); try --- 6501,6504 ---- *************** *** 6517,6525 **** procedure TInstantReferences.InternalClear; - var - i: integer; begin - for i:=0 to Pred(Self.Count) do - Self.Items[i].FindAttribute(Metadata.ExternalLinkedName).AsObject:=Nil; ObjectReferenceList.Clear; end; --- 6511,6515 ---- *************** *** 6527,6531 **** procedure TInstantReferences.InternalDelete(Index: Integer); begin - Self.Items[Index].FindAttribute(Metadata.ExternalLinkedName).AsObject:=Nil; ObjectReferenceList.Delete(Index); end; --- 6517,6520 ---- *************** *** 6580,6585 **** Ref: TInstantObjectReference; begin - if Metadata.IsExternal=ceLinked then - AObject.FindAttribute(Metadata.ExternalLinkedName).AsObject:=Self.Owner; Ref := CreateObjectReference(AObject); try --- 6569,6572 ---- *************** *** 7288,7295 **** procedure TInstantObject.Dispose(ConflictAction: TInstantConflictAction); begin - {if IsOwned then - Owner.DisposeOwnedObject(Self, ConflictAction) - else - PerformUpdate(DoDispose, otDispose, ConflictAction);} PerformUpdate(DoDispose, otDispose, ConflictAction); end; --- 7275,7278 ---- *************** *** 13004,13020 **** SelectParams, DeleteParams: TParams; SelectStatement, DeleteStatement: string; begin for i := 0 to Pred(Map.Count) do if Map[i].AttributeType = atParts then begin ! if Map[i].IsExternal = ceLinked then begin ! //select and delete all SelectParams:=TParams.Create; try SelectStatement:=Format(SelectExternalLinkedSQL, ! [ Map[i].ObjectClassMetadata.TableName, ! Map[i].ExternalLinkedName + InstantClassFieldName, ! Map[i].ExternalLinkedName + InstantIdFieldName ]); AddStringParam(SelectParams, InstantIdFieldName, AObject.Id); AddStringParam(SelectParams, InstantClassFieldName, AObject.ClassName); --- 12987,13006 ---- SelectParams, DeleteParams: TParams; SelectStatement, DeleteStatement: string; + AttributeMetadata: TInstantAttributeMetadata; begin for i := 0 to Pred(Map.Count) do + begin + AttributeMetadata := Map[i]; if Map[i].AttributeType = atParts then begin ! if AttributeMetadata.IsExternal = ceLinked then begin ! //select and dispose all SelectParams:=TParams.Create; try SelectStatement:=Format(SelectExternalLinkedSQL, ! [ AttributeMetadata.ObjectClassMetadata.TableName, ! AttributeMetadata.ExternalLinkedName + InstantClassFieldName, ! AttributeMetadata.ExternalLinkedName + InstantIdFieldName ]); AddStringParam(SelectParams, InstantIdFieldName, AObject.Id); AddStringParam(SelectParams, InstantClassFieldName, AObject.ClassName); *************** *** 13025,13033 **** while not Eof do begin ! PartObject := Map[i].ObjectClass.Retrieve(Fields[1].AsString, False, False, AObject.Connector); if Assigned(PartObject) then try ! PartObject.SetPersistentId(Fields[1].AsString); ! Broker.DisposeObject(PartObject, caIgnore); finally PartObject.Free; --- 13011,13019 ---- while not Eof do begin ! PartObject := AttributeMetadata.ObjectClass.Retrieve( ! Fields[1].AsString, False, False, AObject.Connector); if Assigned(PartObject) then try ! PartObject.ObjectStore.DisposeObject(PartObject, caIgnore); finally PartObject.Free; *************** *** 13048,13059 **** if Map[i].IsExternal = ceStored then begin ! //Delete all objects SelectParams:=TParams.Create; try ! SelectStatement:=Format(SelectExternalStoredSQL, [Map.Items[i].ExternalStoredName]); AddStringParam(SelectParams, InstantParentIdFieldName, AObject.Id); AddStringParam(SelectParams, InstantParentClassFieldName, AObject.ClassName); ! AddStringParam(SelectParams, InstantParentAttributeFieldName, Map[i].Name); ! AddStringParam(SelectParams, InstantChildClassFieldName, Map[i].ObjectClassName); with Broker.CreateDataSet(SelectStatement, SelectParams) do try --- 13034,13045 ---- if Map[i].IsExternal = ceStored then begin ! // dispose all objects SelectParams:=TParams.Create; try ! SelectStatement:=Format(SelectExternalStoredSQL, [AttributeMetadata.ExternalStoredName]); AddStringParam(SelectParams, InstantParentIdFieldName, AObject.Id); AddStringParam(SelectParams, InstantParentClassFieldName, AObject.ClassName); ! AddStringParam(SelectParams, InstantParentAttributeFieldName, AttributeMetadata.Name); ! AddStringParam(SelectParams, InstantChildClassFieldName, AttributeMetadata.ObjectClassName); with Broker.CreateDataSet(SelectStatement, SelectParams) do try *************** *** 13062,13070 **** while not Eof do begin ! PartObject := Map[i].ObjectClass.Retrieve(Fields[1].AsString, False, False, AObject.Connector); if Assigned(PartObject) then try ! PartObject.SetPersistentId(Fields[1].AsString); ! Broker.DisposeObject(PartObject, caIgnore); finally PartObject.Free; --- 13048,13056 ---- while not Eof do begin ! PartObject := AttributeMetadata.ObjectClass.Retrieve( ! Fields[1].AsString, False, False, AObject.Connector); if Assigned(PartObject) then try ! PartObject.ObjectStore.DisposeObject(PartObject, caIgnore); finally PartObject.Free; *************** *** 13086,13090 **** try DeleteStatement := Format(DeleteExternalSQL, ! [ Map.Items[i].ExternalStoredName, InstantParentClassFieldName, InstantParentIdFieldName, --- 13072,13076 ---- try DeleteStatement := Format(DeleteExternalSQL, ! [ AttributeMetadata.ExternalStoredName, InstantParentClassFieldName, InstantParentIdFieldName, *************** *** 13092,13096 **** AddStringParam(DeleteParams, InstantParentClassFieldName, AObject.ClassName); AddStringParam(DeleteParams, InstantParentIdFieldName, AObject.id); ! AddStringParam(DeleteParams, InstantParentAttributeFieldName, Map[i].Name); Broker.Execute(DeleteStatement, DeleteParams); finally --- 13078,13082 ---- AddStringParam(DeleteParams, InstantParentClassFieldName, AObject.ClassName); AddStringParam(DeleteParams, InstantParentIdFieldName, AObject.id); ! AddStringParam(DeleteParams, InstantParentAttributeFieldName, AttributeMetadata.Name); Broker.Execute(DeleteStatement, DeleteParams); finally *************** *** 13099,13124 **** end; end; end; procedure DeleteExternalReferencesMap; var ! i, ii: integer; ! DeleteParams: TParams; ! DeleteStatement: string; begin for i := 0 to Pred(Map.Count) do ! if Map[i].AttributeType = atReferences then begin ! if Map[i].IsExternal = ceLinked then begin ! //Store all ! for ii:=0 to Pred((AObject.AttributeByName(Map.Items[i].Name) as TInstantReferences).Count) do ! begin ! (AObject.AttributeByName(Map.Items[i].Name) as TInstantReferences).Items[ii].CheckId; ! (AObject.AttributeByName(Map.Items[i].Name) as TInstantReferences).Items[ii].FindAttribute(Map[i].ExternalLinkedName).AsObject := Nil; ! Broker.StoreObject((AObject.AttributeByName(Map.Items[i].Name) as TInstantReferences).Items[ii], caIgnore); end; end; ! if Map[i].IsExternal = ceStored then begin //Delete all links --- 13085,13143 ---- end; end; + end; end; procedure DeleteExternalReferencesMap; var ! i: integer; ! ReferenceObject: TInstantObject; ! SelectParams, DeleteParams: TParams; ! SelectStatement, DeleteStatement: string; ! AttributeMetadata: TInstantAttributeMetadata; begin for i := 0 to Pred(Map.Count) do ! begin ! AttributeMetadata := Map[i]; ! if AttributeMetadata.AttributeType = atReferences then begin ! if AttributeMetadata.IsExternal = ceLinked then begin ! //set all to nil ! SelectParams:=TParams.Create; ! try ! SelectStatement:=Format(SelectExternalLinkedSQL, ! [ AttributeMetadata.ObjectClassMetadata.TableName, ! AttributeMetadata.ExternalLinkedName + InstantClassFieldName, ! AttributeMetadata.ExternalLinkedName + InstantIdFieldName ]); ! AddStringParam(SelectParams, InstantIdFieldName, AObject.Id); ! AddStringParam(SelectParams, InstantClassFieldName, AObject.ClassName); ! with Self.Broker.CreateDataSet(SelectStatement, SelectParams) do ! try ! Open; ! try ! while not Eof do ! begin ! ReferenceObject := AttributeMetadata.ObjectClass.Retrieve( ! Fields[1].AsString, False, False, AObject.Connector); ! if Assigned(ReferenceObject) then ! try ! ReferenceObject.AttributeByName(AttributeMetadata.ExternalLinkedName).AsObject := Nil; ! ReferenceObject.ObjectStore.StoreObject(ReferenceObject, caIgnore); ! finally ! ReferenceObject.Free; ! end; ! Next; ! end; ! finally ! Close; ! end; ! finally ! Free; ! end; ! finally ! SelectParams.Free; end; end; ! if AttributeMetadata.IsExternal = ceStored then begin //Delete all links *************** *** 13126,13135 **** try DeleteStatement := Format(DeleteExternalSQL, ! [ Map.Items[i].ExternalStoredName, InstantParentClassFieldName, InstantParentAttributeFieldName ]); AddStringParam(DeleteParams, InstantParentClassFieldName, AObject.ClassName); AddStringParam(DeleteParams, InstantParentIdFieldName, AObject.id); ! AddStringParam(DeleteParams, InstantParentAttributeFieldName, Map[i].Name); Broker.Execute(DeleteStatement, DeleteParams); finally --- 13145,13154 ---- try DeleteStatement := Format(DeleteExternalSQL, ! [ AttributeMetadata.ExternalStoredName, InstantParentClassFieldName, InstantParentAttributeFieldName ]); AddStringParam(DeleteParams, InstantParentClassFieldName, AObject.ClassName); AddStringParam(DeleteParams, InstantParentIdFieldName, AObject.id); ! AddStringParam(DeleteParams, InstantParentAttributeFieldName, AttributeMetadata.Name); Broker.Execute(DeleteStatement, DeleteParams); finally *************** *** 13138,13141 **** --- 13157,13161 ---- end; end; + end; end; *************** *** 13253,13263 **** i, ii: integer; PartObject: TInstantObject; SelectParams, DeleteParams, InsertParams: TParams; SelectStatement, DeleteStatement, InsertStatement: string; begin for i := 0 to Pred(Map.Count) do ! if Map[i].AttributeType = atParts then begin ! if Map[i].IsExternal = ceLinked then begin //select and delete all --- 13273,13288 ---- i, ii: integer; PartObject: TInstantObject; + PartsAttribute: TInstantParts; + AttributeMetadata: TInstantAttributeMetadata; SelectParams, DeleteParams, InsertParams: TParams; SelectStatement, DeleteStatement, InsertStatement: string; begin for i := 0 to Pred(Map.Count) do ! begin ! AttributeMetadata := Map[i]; ! if AttributeMetadata.AttributeType = atParts then begin ! PartsAttribute := TInstantParts(AObject.AttributeByName(AttributeMetadata.Name)); ! if AttributeMetadata.IsExternal = ceLinked then begin //select and delete all *************** *** 13265,13271 **** try SelectStatement:=Format(SelectExternalLinkedSQL, ! [ Map[i].ObjectClassMetadata.TableName, ! Map[i].ExternalLinkedName + InstantClassFieldName, ! Map[i].ExternalLinkedName + InstantIdFieldName ]); AddStringParam(SelectParams, InstantIdFieldName, AObject.Id); AddStringParam(SelectParams, InstantClassFieldName, AObject.ClassName); --- 13290,13296 ---- try SelectStatement:=Format(SelectExternalLinkedSQL, ! [ AttributeMetadata.ObjectClassMetadata.TableName, ! AttributeMetadata.ExternalLinkedName + InstantClassFieldName, ! AttributeMetadata.ExternalLinkedName + InstantIdFieldName ]); AddStringParam(SelectParams, InstantIdFieldName, AObject.Id); AddStringParam(SelectParams, InstantClassFieldName, AObject.ClassName); *************** *** 13276,13284 **** while not Eof do begin ! PartObject := Map[i].ObjectClass.Retrieve(Fields[1].AsString, False, False, AObject.Connector); if Assigned(PartObject) then try ! PartObject.SetPersistentId(Fields[1].AsString); ! Broker.DisposeObject(PartObject, caIgnore); finally PartObject.Free; --- 13301,13309 ---- while not Eof do begin ! PartObject := AttributeMetadata.ObjectClass.Retrieve( ! Fields[1].AsString, False, False, AObject.Connector); if Assigned(PartObject) then try ! PartObject.ObjectStore.DisposeObject(PartObject, caIgnore); finally PartObject.Free; *************** *** 13297,13304 **** //Store all ! for ii:=0 to Pred((AObject.AttributeByName(Map.Items[i].Name) as TInstantParts).Count) do begin ! (AObject.AttributeByName(Map.Items[i].Name) as TInstantParts).Items[ii].CheckId; ! Broker.StoreObject((AObject.AttributeByName(Map.Items[i].Name) as TInstantParts).Items[ii], caIgnore); end; end; --- 13322,13331 ---- //Store all ! for ii:=0 to Pred(PartsAttribute.Count) do begin ! PartObject := PartsAttribute.Items[ii]; ! PartObject.CheckId; ! PartObject.FindAttribute(AttributeMetadata.ExternalLinkedName).AsObject := AObject; ! PartObject.ObjectStore.StoreObject(PartObject, caIgnore); end; end; *************** *** 13309,13317 **** SelectParams:=TParams.Create; try ! SelectStatement:=Format(SelectExternalStoredSQL, [Map.Items[i].ExternalStoredName]); AddStringParam(SelectParams, InstantParentIdFieldName, AObject.Id); AddStringParam(SelectParams, InstantParentClassFieldName, AObject.ClassName); ! AddStringParam(SelectParams, InstantParentAttributeFieldName, Map[i].Name); ! AddStringParam(SelectParams, InstantChildClassFieldName, Map[i].ObjectClassName); with Broker.CreateDataSet(SelectStatement, SelectParams) do try --- 13336,13344 ---- SelectParams:=TParams.Create; try ! SelectStatement:=Format(SelectExternalStoredSQL, [AttributeMetadata.ExternalStoredName]); AddStringParam(SelectParams, InstantParentIdFieldName, AObject.Id); AddStringParam(SelectParams, InstantParentClassFieldName, AObject.ClassName); ! AddStringParam(SelectParams, InstantParentAttributeFieldName, AttributeMetadata.Name); ! AddStringParam(SelectParams, InstantChildClassFieldName, AttributeMetadata.ObjectClassName); with Broker.CreateDataSet(SelectStatement, SelectParams) do try *************** *** 13320,13328 **** while not Eof do begin ! PartObject := Map[i].ObjectClass.Retrieve(Fields[1].AsString, False, False, AObject.Connector); if Assigned(PartObject) then try ! PartObject.SetPersistentId(Fields[1].AsString); ! Broker.DisposeObject(PartObject, caIgnore); finally PartObject.Free; --- 13347,13355 ---- while not Eof do begin ! PartObject := AttributeMetadata.ObjectClass.Retrieve( ! Fields[1].AsString, False, False, AObject.Connector); if Assigned(PartObject) then try ! PartObject.ObjectStore.DisposeObject(PartObject, caIgnore); finally PartObject.Free; *************** *** 13344,13353 **** try DeleteStatement := Format(DeleteExternalSQL, ! [ Map.Items[i].ExternalStoredName, InstantParentClassFieldName, InstantParentAttributeFieldName ]); AddStringParam(DeleteParams, InstantParentClassFieldName, AObject.ClassName); AddStringParam(DeleteParams, InstantParentIdFieldName, AObject.id); ! AddStringParam(DeleteParams, InstantParentAttributeFieldName, Map[i].Name); Broker.Execute(DeleteStatement, DeleteParams); finally --- 13371,13380 ---- try DeleteStatement := Format(DeleteExternalSQL, ! [ AttributeMetadata.ExternalStoredName, InstantParentClassFieldName, InstantParentAttributeFieldName ]); AddStringParam(DeleteParams, InstantParentClassFieldName, AObject.ClassName); AddStringParam(DeleteParams, InstantParentIdFieldName, AObject.id); ! AddStringParam(DeleteParams, InstantParentAttributeFieldName, AttributeMetadata.Name); Broker.Execute(DeleteStatement, DeleteParams); finally *************** *** 13356,13375 **** //Store all objects and links ! for ii:=0 to Pred((AObject.AttributeByName(Map.Items[i].Name) as TInstantParts).Count) do begin ! (AObject.AttributeByName(Map.Items[i].Name) as TInstantParts).Items[ii].CheckId; ! Broker.StoreObject((AObject.AttributeByName(Map.Items[i].Name) as TInstantParts).Items[ii], caIgnore); InsertParams:=TParams.Create; try InsertStatement := Format( InsertExternalSQL, ! [ Map.Items[i].ExternalStoredName ] ); AddStringParam(InsertParams, InstantIdFieldName, InstantGenerateId); AddStringParam(InsertParams, InstantParentClassFieldName, AObject.ClassName); AddStringParam(InsertParams, InstantParentIdFieldName, AObject.Id); ! AddStringParam(InsertParams, InstantParentAttributeFieldName, Map[i].Name); AddStringParam(InsertParams, InstantChildClassFieldName, ! (AObject.AttributeByName(Map.Items[i].Name) as TInstantParts).Items[ii].ClassName); AddStringParam(InsertParams, InstantChildIdFieldName, ! (AObject.AttributeByName(Map.Items[i].Name) as TInstantParts).Items[ii].Id); Broker.Execute(InsertStatement, InsertParams); finally --- 13383,13406 ---- //Store all objects and links ! for ii:=0 to Pred(PartsAttribute.Count) do begin ! // store the object ! PartObject := PartsAttribute.Items[ii]; ! PartObject.CheckId; ! PartObject.ObjectStore.StoreObject(PartObject, caIgnore); ! ! // insert the link InsertParams:=TParams.Create; try InsertStatement := Format( InsertExternalSQL, ! [ AttributeMetadata.ExternalStoredName ] ); AddStringParam(InsertParams, InstantIdFieldName, InstantGenerateId); AddStringParam(InsertParams, InstantParentClassFieldName, AObject.ClassName); AddStringParam(InsertParams, InstantParentIdFieldName, AObject.Id); ! AddStringParam(InsertParams, InstantParentAttributeFieldName, AttributeMetadata.Name); AddStringParam(InsertParams, InstantChildClassFieldName, ! PartsAttribute.Items[ii].ClassName); AddStringParam(InsertParams, InstantChildIdFieldName, ! PartsAttribute.Items[ii].Id); Broker.Execute(InsertStatement, InsertParams); finally *************** *** 13379,13382 **** --- 13410,13414 ---- end; end; + end; end; *************** *** 13384,13403 **** var i, ii: integer; ! DeleteParams, InsertParams: TParams; ! DeleteStatement, InsertStatement: string; begin for i := 0 to Pred(Map.Count) do ! if Map[i].AttributeType = atReferences then begin ! if Map[i].IsExternal = ceLinked then begin //Store all ! for ii:=0 to Pred((AObject.AttributeByName(Map.Items[i].Name) as TInstantReferences).Count) do begin ! (AObject.AttributeByName(Map.Items[i].Name) as TInstantReferences).Items[ii].CheckId; ! Broker.StoreObject((AObject.AttributeByName(Map.Items[i].Name) as TInstantReferences).Items[ii], caIgnore); end; end; ! if Map[i].IsExternal = ceStored then begin //Delete all links --- 13416,13480 ---- var i, ii: integer; ! AttributeMetadata: TInstantAttributeMetadata; ! ReferenceObject: TInstantObject; ! ReferencesAttribute: TInstantReferences; ! SelectParams, DeleteParams, InsertParams: TParams; ! SelectStatement, DeleteStatement, InsertStatement: string; begin for i := 0 to Pred(Map.Count) do ! begin ! AttributeMetadata := Map[i]; ! if AttributeMetadata.AttributeType = atReferences then begin ! ReferencesAttribute := TInstantReferences(AObject.AttributeByName(AttributeMetadata.Name)); ! ! if AttributeMetadata.IsExternal = ceLinked then begin + //set all to nil + SelectParams:=TParams.Create; + try + SelectStatement:=Format(SelectExternalLinkedSQL, + [ AttributeMetadata.ObjectClassMetadata.TableName, + AttributeMetadata.ExternalLinkedName + InstantClassFieldName, + AttributeMetadata.ExternalLinkedName + InstantIdFieldName ]); + AddStringParam(SelectParams, InstantIdFieldName, AObject.Id); + AddStringParam(SelectParams, InstantClassFieldName, AObject.ClassName); + with Self.Broker.CreateDataSet(SelectStatement, SelectParams) do + try + Open; + try + while not Eof do + begin + ReferenceObject := AttributeMetadata.ObjectClass.Retrieve( + Fields[1].AsString, False, False, AObject.Connector); + if Assigned(ReferenceObject) then + try + ReferenceObject.AttributeByName(AttributeMetadata.ExternalLinkedName).AsObject := Nil; + ReferenceObject.ObjectStore.StoreObject(ReferenceObject, caIgnore); + finally + ReferenceObject.Free; + end; + Next; + end; + finally + Close; + end; + finally + Free; + end; + finally + SelectParams.Free; + end; //Store all ! for ii:=0 to Pred(ReferencesAttribute.Count) do begin ! ReferenceObject := ReferencesAttribute.Items[ii]; ! ReferenceObject.CheckId; ! ReferenceObject.FindAttribute(AttributeMetadata.ExternalLinkedName).AsObject := AObject; ! ReferenceObject.ObjectStore.StoreObject(ReferenceObject, caIgnore); end; end; ! ! if AttributeMetadata.IsExternal = ceStored then begin //Delete all links *************** *** 13405,13409 **** try DeleteStatement := Format(DeleteExternalSQL, ! [ Map.Items[i].ExternalStoredName, InstantParentClassFieldName, InstantParentIdFieldName, --- 13482,13486 ---- try DeleteStatement := Format(DeleteExternalSQL, ! [ AttributeMetadata.ExternalStoredName, InstantParentClassFieldName, InstantParentIdFieldName, *************** *** 13411,13436 **** AddStringParam(DeleteParams, InstantParentClassFieldName, AObject.ClassName); AddStringParam(DeleteParams, InstantParentIdFieldName, AObject.id); ! AddStringParam(DeleteParams, InstantParentAttributeFieldName, Map[i].Name); Broker.Execute(DeleteStatement, DeleteParams); finally DeleteParams.Free; end; - //Store all links ! for ii:=0 to Pred((AObject.AttributeByName(Map.Items[i].Name) as TInstantReferences).Count) do begin InsertParams:=TParams.Create; try InsertStatement := Format( InsertExternalSQL, ! [ Map.Items[i].ExternalStoredName ] ); ! AddStringParam(InsertParams, InstantIdFieldName, InstantGenerateId); AddStringParam(InsertParams, InstantParentClassFieldName, AObject.ClassName); AddStringParam(InsertParams, InstantParentIdFieldName, AObject.Id); ! AddStringParam(InsertParams, InstantParentAttributeFieldName, Map[i].Name); AddStringParam(InsertParams, InstantChildClassFieldName, ! (AObject.AttributeByName(Map.Items[i].Name) as TInstantReferences).Items[ii].ClassName); AddStringParam(InsertParams, InstantChildIdFieldName, ! (AObject.AttributeByName(Map.Items[i].Name) as TInstantReferences).Items[ii].Id); Broker.Execute(InsertStatement, InsertParams); finally --- 13488,13515 ---- AddStringParam(DeleteParams, InstantParentClassFieldName, AObject.ClassName); AddStringParam(DeleteParams, InstantParentIdFieldName, AObject.id); ! AddStringParam(DeleteParams, InstantParentAttributeFieldName, AttributeMetadata.Name); Broker.Execute(DeleteStatement, DeleteParams); finally DeleteParams.Free; end; //Store all links ! for ii:=0 to Pred(ReferencesAttribute.Count) do begin + ReferenceObject := ReferencesAttribute.Items[ii]; + ReferenceObject.CheckId; + ReferenceObject.ObjectStore.StoreObject(ReferenceObject, caIgnore); + InsertParams:=TParams.Create; try InsertStatement := Format( InsertExternalSQL, ! [ AttributeMetadata.ExternalStoredName ] ); AddStringParam(InsertParams, InstantIdFieldName, InstantGenerateId); AddStringParam(InsertParams, InstantParentClassFieldName, AObject.ClassName); AddStringParam(InsertParams, InstantParentIdFieldName, AObject.Id); ! AddStringParam(InsertParams, InstantParentAttributeFieldName, AttributeMetadata.Name); AddStringParam(InsertParams, InstantChildClassFieldName, ! ReferencesAttribute.Items[ii].ClassName); AddStringParam(InsertParams, InstantChildIdFieldName, ! ReferencesAttribute.Items[ii].Id); Broker.Execute(InsertStatement, InsertParams); finally *************** *** 13440,13443 **** --- 13519,13523 ---- end; end; + end; end; *************** *** 13646,13651 **** with (Attribute as TInstantReferences) do begin ! (Attribute as TInstantReferences).ObjectReferenceList.Clear; ! //Clear; Params:=TParams.Create; try --- 13726,13730 ---- with (Attribute as TInstantReferences) do begin ! Clear; Params:=TParams.Create; try *************** *** 13682,13687 **** with (Attribute as TInstantReferences) do begin ! //Clear; ! (Attribute as TInstantReferences).ObjectReferenceList.Clear; Params:=TParams.Create; try --- 13761,13765 ---- with (Attribute as TInstantReferences) do begin ! Clear; Params:=TParams.Create; try |