Limpar ClientDataSet ...

Delphi

02/05/2005

Gostaria de saber como limpar os dados do ClientDataSet, pois o [b:34dd4e31dc]EmptyDataSet[/b:34dd4e31dc] as vezes não limpa corretamente o cache de memória do ClientDataSet.

O que posso fazer para limpar os dados do ClientDataSet da memória para que quando for usar novamente ele vir limpo?


Cicerojr

Cicerojr

Curtidas 0

Melhor post

Rafael Marin

Rafael Marin

13/04/2017

Sei que o tópico é antigo mas vou postar aqui como resolvi este problema pra ficar registrado.

As vezes acontece, depois de muitos FieldDefs.CLEAR; e FieldDefs.Add ficar alguma sujeira nas propriedades de Fields, oq faz com que o CreateDataSet apresente erro mesmo depois da estrutura refeita.

Para corrigir isso faça:

cds.Fields.CLEAR;

e também

cds.FieldDefs.CLEAR;

o CreateDataSet não apresentara mais o problema.
GOSTEI 1

Mais Respostas

Juliopedroni

Juliopedroni

02/05/2005

Fecha ele e abre denovo ... se não é isso, explique melhor o seu problema...


GOSTEI 0
Dpinho

Dpinho

02/05/2005

Fecha ele e abre denovo ... se não é isso, explique melhor o seu problema...

Mesmo fechando e abrindo novamente o clientedatset ele sempre retornar um registro antigo.
como fazer para limpa-lo


GOSTEI 0
Raserafim

Raserafim

02/05/2005

se o seu clientdataset está pegando os dados de uma query e esta query pega os dados com um parâmetro em uma cláusula where, então vc pode tentar esperimentar atribui um valor que não existirá (por exemplo 0) e depois fechar e abrir novamente o clientdataset.
O meu eu resolvi assim.


GOSTEI 0
Dpinho

Dpinho

02/05/2005

se o seu clientdataset está pegando os dados de uma query e esta query pega os dados com um parâmetro em uma cláusula where, então vc pode tentar esperimentar atribui um valor que não existirá (por exemplo 0) e depois fechar e abrir novamente o clientdataset. O meu eu resolvi assim.



Na verdade meu CDS não esta ligado a nenhuma tabela, ou query esta ligado a um DAtaSource e em uma grid, ele é utilizado como cache para os itens da nota fiscal.


GOSTEI 0
Marcelo_mileris

Marcelo_mileris

02/05/2005

Se vc não está ligando o CDS em nenhuma Query... vc pode fazer assim para limpar:

CDS.Close;
CDS.CreateDataSet;


Isso limpará a CDS e a deixará aberta


GOSTEI 0
Dpinho

Dpinho

02/05/2005

Se vc não está ligando o CDS em nenhuma Query... vc pode fazer assim para limpar:
CDS.Close;
CDS.CreateDataSet;
Isso limpará a CDS e a deixará aberta


Esta ligado em um query
preciso limpar estes cds criado em memoria (Buffer), ja fechei, tendo fazer um loop, mas sempre fica um item gravado, engraçado que tenho em uma rotina o mesmo codigo e ele limpa na saida normal... preciso de ajuda


GOSTEI 0
Marco Salles

Marco Salles

02/05/2005

Na verdade meu CDS não esta ligado a nenhuma tabela, ou query


Esta ligado em um query


coloque aqui os eus componentes de acesso , bem com a sua base de dados(Firebird, MyBase etc...) por favor


GOSTEI 0
Dpinho

Dpinho

02/05/2005

[quote:e50e92f2dc=´Marco Salles´]
Na verdade meu CDS não esta ligado a nenhuma tabela, ou query


Esta ligado em um query


coloque aqui os eus componentes de acesso , bem com a sua base de dados(Firebird, MyBase etc...) por favor[/quote:e50e92f2dc]


me desculpa, Este cds esta ligado a um datasource, ele recebe os itens do cupom fiscal e vai mostrando em uma query, no final faço a leitura e gravo na tabela do banco interbase, meu problema esta quando tenho que cancelar a venda e começar outra, estou utilizando um loop, mas sempre sobra um item.
Ja tentei dar um close, acitve = false, mas nada resolveu


GOSTEI 0
Sergio Agostinho

Sergio Agostinho

02/05/2005

Pessoal, fechar e abrir o clientdataset resolve mas pode não ser o ideal, no meu caso, uso uma aplicação de 3 camadas e fechar e abrir para recarregar gera uma fila no meu servidor, porque a utilização é muito concorrida.Trata-se de parte que faz cotação de venda.O Sistema abre uma cotação e você vai adicionando itens, cada item adicionado para atualizar era dado um close open, as vezes demorava até recarregar tudo gerando um desconforto para o usuário inserir o próximo item. Se a cotação tem 99 itens e eu vou inserir o item Nro. 100, o sistema não deveria fechar e abrir para recarregar tudo de novo, bastaria só atualizar o item nr. 100 recém lançado.

Nessa rotina eu não utilizo controle de transação nem ApplyUpdates, simplesmente preencho a grade e passo como parâmetro para executar uma procedure no banco (Oracle), assim que a base é atualizada eu preciso atualizar a informação na tela.
Tenho cdsCotacao e um cdsCotacaoItem como master detail, dbexpress campo Datasetfield.

Para resolver isso bastou eu enviar o seguinte comando após cada item inserido :

cdsCotacao.MergeChangeLog;
cdsCotacao.Refresh;

O Comando MergeChangeLog dá um reset no clientdataset para ele não controlar e permitir o refresh.

Não se esqueçam de configurar os campos parametros do detalhe ProviderFlags - pfInkeys ;

Espero ter ajudado os colegar.
GOSTEI 0
Marco Antônio

Marco Antônio

02/05/2005

Quem eh q está com dúvida: CiceroJr ou Dpinho?

Bom, na verdade clientDataSet não é ligado a DataSource, e sim o DataSource que é linkado ao ClientDataSet.
Pelo que entendi vc deve estar utilizando de ClientDataSet 'Virtual'. Correto?

Não está utilizando de nenhum artifício para clonar o ClientDataSet?

Desculpa estas perguntas. Mas até onde eu uso o ClientDataSer 'virtual' e se for esse o seu caso. Confesso que nunca tive problemas e EmptyDataSet é
a forma mais correta para a rotina desejada.

Particularmente eu utilizo os clientDataSet 'virtuais' criando em tempo de execução.

Peço que coloque todo o font se possível para q possamos testar melhor sua situação.

Abc.
GOSTEI 0
Augusto Santana

Augusto Santana

02/05/2005

Sei que o tópico é antigo mas vou postar aqui como resolvi este problema pra ficar registrado.

As vezes acontece, depois de muitos FieldDefs.CLEAR; e FieldDefs.Add ficar alguma sujeira nas propriedades de Fields, oq faz com que o CreateDataSet apresente erro mesmo depois da estrutura refeita.

Para corrigir isso faça:

cds.Fields.CLEAR;

e também

cds.FieldDefs.CLEAR;

o CreateDataSet não apresentara mais o problema.


Rmadmac

mesmo o post sendo antigo... me ajudou muito sua resposta... obrigado.
GOSTEI 0
POSTAR