anchor.diff:  
   procedure TdmdBaseCadastro.ValidarDadosCadastro;
   begin
  -
  +  // Implementado nos filhos
   end;
   
   function TdmdBaseCadastro.VerificaAlterarRegistro: Boolean;
   begin
  -
  +  Result := (not VerificaEmEdicao) and (not FDataSet.IsEmpty);
  +  // RecordCount  uma proc, mais lenta que isEmpty(funciona para closed tambm)
   end;
   
   function TdmdBaseCadastro.VerificaCancelarRegistro: Boolean;
   begin
  -
  +  Result := VerificaEmEdicao;
   end;
   
   function TdmdBaseCadastro.VerificaEmEdicao: Boolean;
   begin
  -
  +  Result := (FDataSet.State in dsEditModes);
   end;
   
   function TdmdBaseCadastro.VerificaExcluirRegistro: Boolean;
   begin
  -
  +  Result := (not VerificaEmEdicao) and (not FDataSet.IsEmpty);
   end;
   
   function TdmdBaseCadastro.VerificaInserirRegistro: Boolean;
   begin
  -
  +  Result := not VerificaEmEdicao;
   end;
   
   function TdmdBaseCadastro.VerificaIrParaAnterior: Boolean;
   begin
  -
  +  Result := VerificaIrParaPrimeiro;
   end;
   
   function TdmdBaseCadastro.VerificaIrParaPrimeiro: Boolean;
   begin
  -
  +  Result := VerificaNavegacao and (not FDataSet.Bof);
   end;
   
   function TdmdBaseCadastro.VerificaIrParaProximo: Boolean;
   begin
  -
  +  Result := VerificaIrParaUltimo;
   end;
   
   function TdmdBaseCadastro.VerificaIrParaUltimo: Boolean;
   begin
  -
  +  Result := VerificaNavegacao and (not FDataSet.Eof);
   end;
   
   function TdmdBaseCadastro.VerificaNavegacao: Boolean;
   begin
  -
  +  Result := (FDataSet.State = dsBrowse);
   end;
   
   function TdmdBaseCadastro.VerificaSalvarRegistro: Boolean;
   begin
  -
  +  Result := VerificaEmEdicao;
   end;
   
   end.
  
positive.code: interface
  
  uses
    System.SysUtils, System.Classes, Data.Db;
  
  type
    TdmdBaseCadastro = class(TDataModule)
  
negative.code: 
  procedure TdmdBaseCadastro.AlterarRegistro;
  begin
    FDataSet.Edit;
  end;
  
  procedure TdmdBaseCadastro.AtualizarDataSet;
  begin
    //FDataSet.Refresh;
  
    FDataSet.Close;
    FDataSet.Open;
  
    {$MESSAGE HINT 'Tratar abrir com parmetros'}
    //{$MESSAGE WARN 'Tratar abrir com parmetros'}
    //{$MESSAGE ERROR 'Tratar abrir com parmetros'}
  end;
  
  procedure TdmdBaseCadastro.CancelarRegistro;
  begin
    FDataSet.Cancel;
  end;
  
  constructor TdmdBaseCadastro.Create(AOwner: TComponent);
  