도우미 (여기서는 필요에 따라 제거됨)을 사용하면 해킹없이 보호 된 메소드를 호출 할 수 있습니다. fCInternalCalc 필드의 경우 OnCalcFields에서 DataSet.State = dsInternalCalc
을 확인하십시오.
type
TClientDataSetHelper = class helper for TClientDataSet
public
function AssureEditing: Boolean;
procedure InternalCalc;
end;
function TClientDataSetHelper.AssureEditing: Boolean;
begin
result := not (State in [dsEdit, dsInsert]);
if result then
Edit;
end;
procedure TClientDataSetHelper.InternalCalc;
var
needsPost: Boolean;
saveState: TDataSetState;
begin
needsPost := AssureEditing;
saveState := setTempState(dsInternalCalc);
try
RefreshInternalCalcFields(ActiveBuffer);
finally
RestoreState(saveState);
end;
if needsPost then
Post;
end;
이 값은 CalculateFields
을 사용하여 정상적인 계산 필드에서 쉽게 확장 할 수 있습니다. 다른 데이터 필드가 변경 될 때마다 계산 된 필드가 다시 계산되므로 필요하지 않습니다.
그럼 데이터를 열어도 작동하지 않습니까? –
@SertacAkyuz 아직 시도하지는 않았습니다. 클라이언트 데이터 세트를 닫지 않아도 클라이언트 데이터 세트의 모든 데이터가 지워지지 않습니까? –
예. ......... –