Limpar ClientDataSet ...
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?
O que posso fazer para limpar os dados do ClientDataSet da memória para que quando for usar novamente ele vir limpo?
Cicerojr
Curtidas 0
Melhor post
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.
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
02/05/2005
Fecha ele e abre denovo ... se não é isso, explique melhor o seu problema...
GOSTEI 0
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
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.
O meu eu resolvi assim.
GOSTEI 0
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
02/05/2005
Se vc não está ligando o CDS em nenhuma Query... vc pode fazer assim para limpar:
Isso limpará a CDS e a deixará aberta
CDS.Close; CDS.CreateDataSet;
Isso limpará a CDS e a deixará aberta
GOSTEI 0
Dpinho
02/05/2005
Se vc não está ligando o CDS em nenhuma Query... vc pode fazer assim para limpar:
Isso limpará a CDS e a deixará aberta
CDS.Close; CDS.CreateDataSet;
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
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
02/05/2005
[quote:e50e92f2dc=´Marco Salles´]
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
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
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.
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
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.
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
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.
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