Fórum Dúvidas com o CreateDataSet #431731
02/01/2013
0
É o seguinte eu ja trabalho com delphi a um bom tempo. E com o ClientDataSet tbm.
Eu gosto de fazer uns sistemas pequenos p me facilitar no dia a dia.. e Geralmente nesses sistema prefiro não usar um banco de dados.
E aproveito a opção que o ClientDataSet oferece, que é o CreateDataSet.
Até ae tudo bem.
eu crio um cdsProjeto com os campos Nome, Ativo.
Rodo o sistema e começo a utilizar.
Depois de uma semana veja que vou precisar adicionar outro campo.
Em tempo de projeto eu consigo fazer isso normal adiciono mais um campo OBS.
Mas ao tentar carregar o arquivo que eu ja tinha salvo os dados antes onde ainda não tinha esse campo. Da erro.
Existe alguma forma pratica de fazer esta atualização?
Obrigado.
Marcos Iwazaki
Curtir tópico
+ 0Posts
02/01/2013
Marco Salles
Mas me surpreende um pouco vc ter conseguido adicionar outro field na estrutura do CDS sem ser Calculado ou Agregado
geralemente tem um macete para isto
[]sds
Gostei + 0
02/01/2013
Marcos Iwazaki
e limpo os DefFields.
dae vc pode adicionar os fields normalmente.
Demorei para aprender esse macete... pois nunca achei nada sobre isso na net. Descobri no desespero. Mas isso ja faz um tempo agora.
Estou pensando em como fazer na mao...
pois eu tentei criar um cds em tempo de execução e dar um load no arquivo... mas ele da erro pois, pelo que percebi p fazer o createDataSet eu sou obrigado a ter os fields no CDS.
Então na verdade para fazer isso de uma forma legal vou ter que criar uma espécie de versão do CDS. Para saber em qual versão o arquivo esta.
vou pensando em mais solução.. e esperar se mais alguem tenha alguma ideia...
se ninguem mais tiver ideia.. vou fazer no modo bruto mesmo.. e depois posto a ideia aqui.
Obrigado.
Gostei + 0
02/01/2013
Marco Salles
e limpo os DefFields.
hummm...
Bem vc precisa é de um CDS com a estrutura do Xlm nova que vc quer
Na mão pe adiconar o conteudo (While not eofo post mesmo)do seu Cds Antigo para o Cds Novo
depois larga mão do Cds Antigo e passe a abrir o Novo
[]sds
Gostei + 0
02/01/2013
Marcos Iwazaki
vou ir tentando fazer uns teste com a estrutura em xml...
qq coisa se tiver mais ideias.. mandae...
vlw por enqto..
T+
Gostei + 0
02/01/2013
Marco Salles
e limpo os DefFields.
So uma curiosidade minha.. Tem certeza que este campo que vc esta adicionando desta forma não é do tipo Calculado não ???
Olha so o link onde foi discutido isto
http://www.activedelphi.com.br/forum/viewtopic.php?t=77283&highlight=clientdataset&sid=5979c57993dec8686e135f6deaed128f
[]sds
Gostei + 0
03/01/2013
Marcos Iwazaki
mas se eu estiver em modo projeto eu consigo adicionar novos campos sem problemas, isso se eu não quiser reaproveitar registros ja gravado na estrutura antiga.
Do jeito que te falei pode testar que funciona ja faço isso a uns 5 anos...
Mas como os sistema q uso o createdataset sempre foram p uso proprio não me preocupei em perder os dados p adicionar novos campos.
E o problema da solução que deram la.. de deixar um cdsTemp como um auxiliar. Vamos supor que hj adiciono 2 campos e daqui um semana adiciono mais 1 e daqui um mes mais 1 so nisso ae vou ter q ter 3 cdsTemp do mesmo cds.
E o pior disso que para saber se vou conseguir carregar é so tentando carregar, se der erro tento carregar o proximo.
Não fica muito legal isso....
Acho que deve ter uma solução melhor.
Gostei + 0
03/01/2013
Marco Salles
mas se eu estiver em modo projeto eu consigo adicionar novos campos sem problemas, isso se eu não quiser reaproveitar registros ja gravado na estrutura antiga.
Vou continuar teimando .. do mesmo modo que teimei no link em que lhe passei .. O Campo que vc adiciona deste modo que vc diz que faz , não é um campo do tipo Field Type Data (... Tite um print da tela do New Field)
E o pior disso que para saber se vou conseguir carregar é so tentando carregar, se der erro tento carregar o proximo.
quando a solução o cdsAux ele so existe para vc carregar ao novo Cds ( Cds com acrescimo de um novo Field ) os dados do Xml ja existentes... Depois desta etapa este CdsAux ou CdsTemporario não sera mais necessário e podera ser descartado
Veja
e daqui um semana adiciono mais 1
Crio o Novo Field no CdsNovo (**** Não do modo que vc disse que cria , mas supor que esteja certo)
Carrego o cdsTemp (LoadFromFile) com o ArquivoXml ja existente
FaçoUmaVarredura nos dados do CdsTemp e para cada registro vou adicionando no CdsNovo
Por Fim dou um CdsNovo.SaveloadFromFile (subescrevo o Arquivo Xml ja existente)
daqui um mes mais 1
Mesma rotina Antenrior.. O mesmo CdsTem e o Mesmo CdsNovo ... Não precisa cirar mais nenhum.. Estes cds podems ate ser criado em RumTime se for o caso
Não sei se foi claro , e quando ao novo Field Type Data vou continuar teimando...
[]sds
Gostei + 0
03/01/2013
Marcos Iwazaki
ehheheheh
https://dl.dropbox.com/u/43263814/CreateDataSet.png esta ae o print...
Gostei + 0
03/01/2013
Marco Salles
e limpo os DefFields.
limpa o FieldsDef .....
Boaaa .. eu faço de outro modo , mas este é melhor .. O meu tinha que carregar o dfm Wiew as text seguido de Wiew as forms
Demorei para aprender esse macete... pois nunca achei nada sobre isso na net. Descobri no desespero. Mas isso ja faz um tempo agora
So quem utiliza o Xml do clientdataset sabe o desespero que dá para inserir um campo no Fieldseditor apos o CreateDataSet
agora deveria existit tb um macete para poder adicionar o field e carregar os dados do xml antigo sem ter que percorrer com while not eof do post ...
[]sds
Gostei + 0
03/01/2013
Marcos Iwazaki
a maneira que estou testando agora é o seguinte...
faço o loadFromFile.
Se der erro eu crio um CdsAux dinamico igual ao CdsOriginal.
dae em baixo vou fazendo assim.
Tento LoadFromFile, se der erro elimino o ultimo field e tento novamente. Até dar certo.
Apos dar certo faço um loop no CdsAux incluindo no CdsOriginal...
Ta bem braçal.. mas pelo menos fiz tudo em um metodo generico que posso usar em qq sistema q fizer daqui p frente.
Mas vou tentar achar mais alguma solução.
Gostei + 0
03/01/2013
Marco Salles
[]sds
Gostei + 0
03/01/2013
Marcos Iwazaki
ehhehhe eu tbm acho meio dificil uma solução menos trabalhosa.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)