Como criar campo via program. num ClienteDataSet (XML) ?
É 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
Valeu.
Paulo Serra
Paulo-serra
Curtidas 0
Respostas
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;
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
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
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
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
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;
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