ClientDataSet + Aggregates + InternalCalc = 2x AcessViolation & AcessViolation in module ntdll.dll & EInvalidPointer

08/11/2019

4

Olá comunidade do Devmedia, Tudo bem com vocês?
Então vim aqui procurar um socorro porque estou com um problema que vem me tirando o sossego , o problema é bem simples imagino,mas não sei o que posso estar fazendo errado,já que sou iniciante em Delphi.

Descrição do problema :
Precisei usar um ClienteDataSet em meu projeto em determinada tela , e nas condições que os erros se apresentam já descobri que o erro está no CDS, pois em testes que executei aqui quando eu não o crio não ocorre estes erros.

Informações gerais:
Delphi : https://i.ibb.co/k8wvg3n/infodelphi.png
Computador : https://i.ibb.co/6ZzkXBG/infocomp.png

Trechos do código
- Criação:
 
procedure TF_FinContaReceber.FormShow(Sender: TObject);
begin
   Cds_Lanc.CreateDataSet;
   Cds_Lanc.Open;
{...}
end;


- Fechando o Form:
procedure TF_FinContaReceber.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   Cds_Lanc.Close;
   {...}
   Action := caFree;
end;

procedure TF_FinContaReceber.FormDestroy(Sender: TObject);
begin
   F_FinContaReceber := nil;
end;


Propriedades do ClientDataSet:
object Cds_Lanc: TClientDataSet
    Aggregates = <>
    AggregatesActive = True
    FieldDefs = <>
    IndexDefs = <>
    Params = <>
    StoreDefs = True
    OnCalcFields = Cds_LancCalcFields
    Left = 32
    Top = 389
    object Cds_LancSequencialLanc: TIntegerField
      FieldName = 'SequencialLanc'
    end
    object Cds_Lancflag: TStringField
      DisplayLabel = 'X'
      FieldName = 'flag'
      Size = 1
    end
    object Cds_LancVencimento: TDateField
      FieldName = 'Vencimento'
    end
    object Cds_LancCodEnti: TIntegerField
      FieldName = 'CodEnti'
    end
    object Cds_LancEntidadeNome: TStringField
      FieldName = 'EntidadeNome'
      Size = 67
    end
    object Cds_LancReferencia: TStringField
      FieldName = 'Referencia'
      Size = 65
    end
    object Cds_LancValor: TFloatField
      DefaultExpression = '0'
      FieldName = 'Valor'
      DisplayFormat = '#,###,###,##0.00'
    end
    object Cds_LancJuros: TFloatField
      DefaultExpression = '0'
      FieldName = 'Juros'
      DisplayFormat = '#,###,###,##0.00'
    end
    object Cds_LancDesconto: TFloatField
      DefaultExpression = '0'
      FieldName = 'Desconto'
      DisplayFormat = '#,###,###,##0.00'
    end
    object Cds_LancValorReceber: TFloatField
      DefaultExpression = '0'
      FieldKind = fkInternalCalc
      FieldName = 'ValorReceber'
      DisplayFormat = '#,###,###,##0.00'
    end
    object Cds_LancSelecTotal: TFloatField
      FieldKind = fkInternalCalc
      FieldName = 'SelecTotal'
      DisplayFormat = '#,###,###,##0.00'
    end
    object Cds_LancSelecJuros: TFloatField
      FieldKind = fkInternalCalc
      FieldName = 'SelecJuros'
      DisplayFormat = '#,###,###,##0.00'
    end
    object Cds_LancSelecDesc: TFloatField
      FieldKind = fkInternalCalc
      FieldName = 'SelecDesc'
      DisplayFormat = '#,###,###,##0.00'
    end
    object Cds_LancSelecValor: TFloatField
      FieldKind = fkInternalCalc
      FieldName = 'SelecValor'
      DisplayFormat = '#,###,###,##0.00'
    end
    object Cds_LancVendaCod: TIntegerField
      FieldName = 'VendaCod'
    end
    object Cds_LancDataPagto: TDateField
      FieldName = 'DataPagto'
    end
    object Cds_LancParcela: TStringField
      FieldName = 'Parcela'
      Size = 6
    end
    object Cds_LancDataEmissao: TDateField
      FieldName = 'DataEmissao'
    end
    object Cds_LancFormaPagto: TStringField
      FieldName = 'FormaPagto'
      Size = 40
    end
    object Cds_LancCPFCNPJ: TStringField
      FieldName = 'CPFCNPJ'
      Size = 32
    end
    object Cds_LancDocumento: TStringField
      FieldName = 'Documento'
      Size = 15
    end
    object Cds_LancTotValor: TAggregateField
      FieldName = 'TotValor'
      Active = True
      DisplayName = ''
      DisplayFormat = '#,###,###,##0.00'
      Expression = 'Sum(SelecValor)'
    end
    object Cds_LancTotReceber: TAggregateField
      FieldName = 'TotReceber'
      Active = True
      DisplayName = ''
      DisplayFormat = '#,###,###,##0.00'
      Expression = 'Sum(SelecTotal)'
    end
    object Cds_LancTotDesc: TAggregateField
      FieldName = 'TotDesc'
      Active = True
      DisplayName = ''
      DisplayFormat = '#,###,###,##0.00'
      Expression = 'Sum(SelecDesc)'
    end
    object Cds_LancTotJuros: TAggregateField
      FieldName = 'TotJuros'
      Active = True
      DisplayName = ''
      DisplayFormat = '#,###,###,##0.00'
      Expression = 'Sum(SelecJuros)'
    end
  end


Somente postei estes trechos de código porque os erros que serão mostrados já ocorrem quando eu apenas abro e fecho o formulário em questão.

Erros ao fechar :
https://i.ibb.co/4FJCfg5/erro1.png
https://i.ibb.co/cTskwCh/erro2.png
https://i.ibb.co/Hd7xZn7/erro3.png
https://i.ibb.co/5MvJtLd/erro-4.png


Então é isso ,se alguém me ajudar ficarei muito agradecido,como dito anteriormente,sou iniciante em Delphi e mesmo que possa ser um problema básico ainda não tenho conhecimento necessário para resolvê-lo.
Responder