Como criar campo via program. num ClienteDataSet (XML) ?

Delphi

29/09/2005

É o seguinte... tenho um programa que utiliza um ClienteDataSet que aponta para um determinado arquivo XML. Eu preciso criar, via programação, um campo nesse arquivo XML para que o meu ClienteDataSet não dê uma mensagem de erro quando eu tentar abrí-lo, pois ele vai exigir esse campo no arquivo XML que ainda não existe.

Valeu.

Paulo Serra


Paulo-serra

Paulo-serra

Curtidas 0

Respostas

Vagner Monteiro

Vagner Monteiro

29/09/2005

Olha, creio que a maneira mais fácil é criar os campos em um outro CDS e depois adicionar no CDS que vale para a aplicação.

Crie o CDS2 e os campos a serem adicionados posteriormente e depois, quando precisar incrementar algum campo no CDS1, use esta função:

Cds1.Fields.Add(Cds2.Fields[0]);
Cds1.CreateDataSet;


GOSTEI 0
Paulo-serra

Paulo-serra

29/09/2005

Mas dessa maneira, os dados contidos no meu CDS1 serão perdidos quando eu executar o comando CDS1.CreateDataSet ?


GOSTEI 0
Vagner Monteiro

Vagner Monteiro

29/09/2005

Pior que é maninho.Mas posso te sugerir outra solução.Dê o Loadfromfile em um data set, e carreggue outro com o campo já adicionado.Por exemplo:

Try
CDS2.Loadfromfile(´Teste.xml´);
except
CDS1.LoadfromFile(´Teste.xml´);
end;
While not CDS2.Eof do
Begin
CDS1Campo1.Asstring := CDS2Campo1.Asstring;
CDS1Campo2.ASInteger := CDS2Campo2.Asinteger;
CDS1CampoAdicional.Asstring := ´´;
CDS2.Next;
End;
CDS2.EmptyDataset;

Assim, ele não vai berrar pq o campo não existe, pois será carregado como nulo.Depois de carregá-lo(CDS1) é só trabalhar com ele e salvar em .xml.A exceção é para que dá próxima vez que vc for carregar, o arquivo terá um campo a mais, assim o CDS2 não conseguirá carregar o xml, pois terá um campo a menos, porém o CDS1 terá todos os campos.Aí é um abraço.hehehe


GOSTEI 0
Vagner Monteiro

Vagner Monteiro

29/09/2005

Ops!

O correto é assim:

Try
CDS2.Loadfromfile(´Teste.xml´);
While not CDS2.Eof do
Begin
CDS1Campo1.Asstring := CDS2Campo1.Asstring;
CDS1Campo2.ASInteger := CDS2Campo2.Asinteger;
CDS1CampoAdicional.Asstring := ´´;
CDS2.Next;
End;
CDS2.EmptyDataset;
except
CDS1.LoadfromFile(´Teste.xml´);
end;


GOSTEI 0
POSTAR