Ir para conteúdo
  • Cadastre-se

dev botao

Não consigo limpar TNFe


Ver Solução Respondido por Antonio Carlos L,
  • Este tópico foi criado há 1480 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Creio que aqui seja o local devido para essa postagem.

Tenho um DataModule onde está o componente ACBrNFe  existe no private a declaração FNFe  : TNFe;

Logo depois do XML ser lido é atribuído assim : FNFe := ACBrNFe.NotasFiscais.Items[0].NFe;

O processamento é feito sem problema e é feito ACBrNFe.NotasFiscais.Clear;

Entretanto quando leio outro XML e  faço a nova atribuição  FNFe := ACBrNFe.NotasFiscais.Items[0].NFe;

Verifico que os valores que existiam em FNFe não são apagados quando é feito ACBrNFe.NotasFiscais.Clear;

Como FNFe não é criado explicitamente não tenho como dar Free e não existe nesse nível Clear.

No ACBR vi que são criados coleções e elas são excluídas quando se faz o Clear

Alguém já teve que lidar com algo do tipo ?

Obrigado.

  • Fundadores
Postado

FNFe, é apenas uma variável que aponta para um objeto...

Quando você roda o ACBrNFe.NotasFiscais.Clear, esse objeto é liberado... mas o FNFe, continuará apontando para aquela área de memória... por  isso testar
if Assigned(FNFe)
continuará retornando True

Porém se você tentar usar as propriedades de FNFe, após o Clear, receberá um A.V., pois o objeto não existe mais... e você tentou usar uma área "suja" de memória

Você não precisa (nem devem) limpar o FNFe, pois ele apenas está apontando para um objeto que não foi ele que criou

  • Curtir 2
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado

@Daniel Simoes e @Juliomar Marchetti obrigado pela resposta.

Vou testar sua indicação @Juliomar Marchetti, confesso que ignorava isso do debug  ou rodar pela IDE , ja estava a pensar em usar ponteiros.

"Porém se você tentar usar as propriedades de FNFe, após o Clear, receberá um A.V." então @Daniel Simoes isso que me deixou doido, exemplificando, eu carregava um xml com um item, limpava e ao carregar outro, aquele item ficava presente.

Postado

Pessoal, agradeço, mas o problema era outro bem diferente.

Eu criei os fields dos ClientDataSet ( componente no datamodule ) em runtime no evento create do datamodule.

Eu lia do ACbrNFe para o dataset esta em memoria.

Por algum motivo fazer ClientDataSet.Close simplesmente não elimina da memória

 

 

 

  • Solution
Postado (editado)

Oi @Juliomar Marchetti, então os ClientDataSet não são ligados a nenhuma Query, eu uso eles apenas como tabela em memoria.

Eu crio os Fields deles em runtime no evento Create do DataModule.

Se eu fizer simplesmente fizer ClientDataSetITENS.Close isso não some os itens ANTERIORES.

Sempre que preciso limpar o ClientDataSet estou tendo que fazer um ClientDataSet.Close e um ClientDataSet.DataSetCreate  ai limpa.

Como em debug não mostrava o conteudo dos Fields o que aparecia era que FNFe mesmo depois de fazer ACBrNFe.NotasFiscais.Clear mantinha os dados eu fui para um caminho errado.

Ou se após o Open dar um EmptyDataSet funciona da mesma forma, acho que é mais rápido

Editado por Antonio Carlos L
faltou dados
  • Este tópico foi criado há 1480 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.