Delphi:应用更新时访问嵌套的数据集主信息
发布时间:2020-12-15 09:46:56 所属栏目:大数据 来源:网络整理
导读:在将更新应用于嵌套数据集时,是否可以在提供程序的BeforeUpdateRecord事件中访问父数据集信息(如MyField.NewValue)? 原因: 当我将更新应用于具有嵌套详细信息的CDS时,主PK由基础查询(TIBCQuery)生成并传播到主CDS. 但是,在AfterUpdateRecord中更新字段时,
在将更新应用于嵌套数据集时,是否可以在提供程序的BeforeUpdateRecord事件中访问父数据集信息(如MyField.NewValue)?
原因: 当我将更新应用于具有嵌套详细信息的CDS时,主PK由基础查询(TIBCQuery)生成并传播到主CDS. 但是,在AfterUpdateRecord中更新字段时,新密钥在详细信息的BeforeUpdateRecord中不可见: DeltaDS.FieldByName(FieldName).NewValue := SourceDS.FieldByName(FieldName).NewValue) 并且delta尚未合并. 看起来,在详细信息发生调用时,BeforeUpdateRecord事件的DeltaDS参数仅包含嵌套数据集的信息. 如果我可以这样做,那将是很好的: DeltaDS.ParentDS.FieldByName('FIELDNAME').NewValue. 编辑: 使用嵌套数据集时,BeforeUpdateRecord事件被调用两次,一次用于master,一次用于详细信息(如果我们有两个记录).当为详细信息调用事件时,是否有办法访问DeltaDS中包含的主信息? 由于尚未合并更改,因此我们无法访问主CDS的数据.我希望这不会增加更多的混乱. 解决方法
您可以使用提供程序的Resolver来查找相应的TUpdateTree:
function FindDeltaUpdateTree(Tree: TUpdateTree; DeltaDS: TCustomClientDataSet): TUpdateTree; var I: Integer; begin Result := nil; if Tree.Delta = DeltaDS then Result := Tree else for I := 0 to Tree.DetailCount - 1 do begin Result := FindDeltaUpdateTree(Tree.Details[I],DeltaDS); if Assigned(Result) then Break; end; end; 您可以在OnBeforeUpdate处理程序中使用它: var Tree,ParentTree: TUpdateTree; begin if SourceDS = MyDetailDataSet then begin Tree := FindDeltaUpdateTree(TDataSetProvider(Sender).Resolver.UpdateTree,DeltaDS); if Assigned(Tree) then begin ParentTree := Tree.Parent; // here you can use ParentTree.Source (the dataset) and ParentTree.Delta (the delta) end; end; end; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |