ClientDataSet + Aggregates + InternalCalc = 2x AcessViolation & AcessViolation in module ntdll.dll & EInvalidPointer
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:
- Fechando o Form:
Propriedades do ClientDataSet:
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.
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.
Isaias Souza
Curtidas 0