XML TClientDataSet Registro não é excluído

Delphi

11/06/2007

Ola a todos, estou usando CDS para gravar meu dados em XML, uso SaveToFile, para gravar os dados, e LoadFromFile para carregar nos CDS,

O problema é que quando excluo o registro beleza não aparece mais no meu CDS, mas fisicamente no arquivo ele ainda esta la, quando autero um registro uma nova linha é criada no XML, e um outro problema é que quando dou um close no CDS o arquivo perde o UTL8, e da problema de acentução.

Pesquisei aqui e todos falam para usar Logchanges:=false, depois de abrir o CDS, mas fiz isso e não resolvel, alguma forma especial, ou alguma outra forma de resolver isso ?


Atgomes

Atgomes

Curtidas 0

Respostas

Atgomes

Atgomes

11/06/2007

Alguem tem alguma idéia ????


Ola a todos, estou usando CDS para gravar meu dados em XML, uso SaveToFile, para gravar os dados, e LoadFromFile para carregar nos CDS, O problema é que quando excluo o registro beleza não aparece mais no meu CDS, mas fisicamente no arquivo ele ainda esta la, quando autero um registro uma nova linha é criada no XML, e um outro problema é que quando dou um close no CDS o arquivo perde o UTL8, e da problema de acentução. Pesquisei aqui e todos falam para usar Logchanges:=false, depois de abrir o CDS, mas fiz isso e não resolvel, alguma forma especial, ou alguma outra forma de resolver isso ?



GOSTEI 0
Khundalini

Khundalini

11/06/2007

Alguns pontos a observar:

1) Quando vc diz UTL8, na verdade é UTF-8;

2) Pelo que deu pra deduzir, você estã carregando explícitamente o arquivo XML. Partindo deste fato, e também do suposto de que este XML já está no formato de XML datapacket do próprio ClientDataSet, após você fazer qualquer atividade de manutenção (inclusão, alteração ou exclusão), você deverá _obrigatoriamente_ seguir o seguinte roteiro:

ClientDataSet.SaveToFile(<nome_do_arquivo.xml>);
ClientDataSet.Close;
ClientDataSet.LoadFromFile(<nome_do_arquivo.xml>);
ClientDataSet.Open;

Se você estivesse usando transformações XML, através do componente TXMLTransformProvider, você poderia usar o método ApplyUpdates, que faria a atualização do arquivo XML de forma bastante transparente. Se este tópico sobre transformações XML lhe interessar, a Internet possui vasto conteúdo falando sobre o assunto.

Sds.,
Rubem Rocha
Manaus, AM


GOSTEI 0
Atgomes

Atgomes

11/06/2007

Amigo Khundalini muito obrigado pela ajuda, perdão pelo UTL8 ao invés de UTF-8 de fato escrevi errado.

Acabei descobrindo o grande problema e espero talvez ajudar qualquer um que tenha o mesmo.

Bem esta perfeitamente correto usar o comando Logchanges:=false, logo após a abertura do CDS, no meu caso o grande problema era que meus arquivos DataPacket XML ja estavam gerados no padrão Logchanges:=true, sena assim uma TAG chamda PARMS com uma série de números estava preenchida, a solução foi apagar todo o conteúdo desta TAG a PARMS e pronto o programa passou a excluir fisicamente os registros e passou a não duplicar nas alterações.

Quanto ao LoadFromFile e o SaveToFILE ja estou usando, muito obriga pela dica.






Alguns pontos a observar: 1) Quando vc diz UTL8, na verdade é UTF-8; 2) Pelo que deu pra deduzir, você estã carregando explícitamente o arquivo XML. Partindo deste fato, e também do suposto de que este XML já está no formato de XML datapacket do próprio ClientDataSet, após você fazer qualquer atividade de manutenção (inclusão, alteração ou exclusão), você deverá _obrigatoriamente_ seguir o seguinte roteiro: ClientDataSet.SaveToFile(<nome_do_arquivo.xml>); ClientDataSet.Close; ClientDataSet.LoadFromFile(<nome_do_arquivo.xml>); ClientDataSet.Open; Se você estivesse usando transformações XML, através do componente TXMLTransformProvider, você poderia usar o método ApplyUpdates, que faria a atualização do arquivo XML de forma bastante transparente. Se este tópico sobre transformações XML lhe interessar, a Internet possui vasto conteúdo falando sobre o assunto. Sds., Rubem Rocha Manaus, AM



GOSTEI 0
POSTAR