Ver Mensaje Individual
  #3  
Antiguo 05-05-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.610
Reputación: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por duilioisola Ver Mensaje
Cuando el CDS detalle cambia de estado el CDS maestro permanece igual [...] Supongo que tienes algún código que al cambiar datos del CDS detalle recalcula o actualiza el CDS maestro.
Hola duilioisola. Eso sería si fuese una relación maestro-detalle típica (MasterSource, MasterFields...), pero en el caso que plantea _Cali se trata de conjuntos de datos anidados (nested data sets), donde el detalle se asocia al maestro mediante la propiedad DataSetField.

_Cali: El comportamiento que observas es normal, pues al ser el detalle un conjunto de datos anidado, es considerado "parte" del conjunto de datos maestro. El código nativo que lo produce está en la clase base TDataSet:
Código Delphi [-]
procedure TDataSet.CheckParentState;
begin
  if DataSetField <> nil then
    DataSetField.DataSet.Edit;
end;

procedure TDataSet.Edit;
begin
  if not (State in [dsEdit, dsInsert]) then
    if FRecordCount = 0 then Insert else
    begin
      CheckBrowseMode;
      CheckCanModify;
      DoBeforeEdit;
      CheckParentState;
      CheckOperation(InternalEdit, FOnEditError);
      GetCalcFields(ActiveBuffer);
      SetState(dsEdit);
      DataEvent(deRecordChange, 0);
      DoAfterEdit;
    end;
end;

En mi opinión está bien que ocurra de esa forma, pues cualquier cambio que hagas en el conjunto de datos detalle necesitarás aplicarlo con el método ApplyUpdates del conjunto de datos maestro. Así que antes de proponer soluciones, indaguemos cuál es el problema realmente. ¿Podrías darnos algo más de información de por qué no deseas que el estado del maestro sea congruente con lo que ocurre en el detalle?

Saludos.

Al González.
Responder Con Cita