GARANTIR DESCONTO

Fórum Dúvidas com o CreateDataSet #431731

02/01/2013

0

Olá pessoas.

É 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

Marcos Iwazaki

Responder

Posts

02/01/2013

Marco Salles

eu achi que esta atualização tem que ser feita na mão

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
Responder

Gostei + 0

02/01/2013

Marcos Iwazaki

Eu deixo Active =false
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.
Responder

Gostei + 0

02/01/2013

Marco Salles

Eu deixo Active =false
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
Responder

Gostei + 0

02/01/2013

Marcos Iwazaki

blz...
vou ir tentando fazer uns teste com a estrutura em xml...

qq coisa se tiver mais ideias.. mandae...

vlw por enqto..
T+
Responder

Gostei + 0

02/01/2013

Marco Salles

Eu deixo Active =false
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
Responder

Gostei + 0

03/01/2013

Marcos Iwazaki

exatamente este o problema....

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.
Responder

Gostei + 0

03/01/2013

Marco Salles

exatamente este o problema....

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 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.


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
Responder

Gostei + 0

03/01/2013

Marcos Iwazaki

Olha amigo.. eu entendo a tua desconfiança
ehheheheh
https://dl.dropbox.com/u/43263814/CreateDataSet.png esta ae o print...
Responder

Gostei + 0

03/01/2013

Marco Salles

hummm

Eu deixo Active =false
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
Responder

Gostei + 0

03/01/2013

Marcos Iwazaki

concordo...

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.
Responder

Gostei + 0

03/01/2013

Marco Salles

Se vc conseguir uma solução menos trabalhosa (o que acho dificil) post para nós

[]sds
Responder

Gostei + 0

03/01/2013

Marcos Iwazaki

pode deixar...
ehhehhe eu tbm acho meio dificil uma solução menos trabalhosa.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar