ClientDataSet, XML e Query

Delphi

07/05/2009

Bom dia.

Pessoal, dúvida cruel: eu preciso gerenciar uma informação BEM SIMPLES e preciso usar ClientDataSet lendo um arquivo XML diretamente. Isso eu fiz: leio, salvo, edito, tudo muito fácil.

Mas eu precisava que uma Query executasse os dados do ClientDataSet. Por exemplo: ligar a Query nesse CDS e passar uma SELECT. Ou, teria como eu executar Query que lesse diretamente no XML? Não vai ter relacionamento nem um sistema de banco de dados por trás (SQL, FIRE, ORACLE), é no puro XML. Como eu faço isso?

Grato,

Willian


Willian

Willian

Curtidas 0

Respostas

Josehenrique

Josehenrique

07/05/2009

Bom dia. Pessoal, dúvida cruel: eu preciso gerenciar uma informação BEM SIMPLES e preciso usar ClientDataSet lendo um arquivo XML diretamente. Isso eu fiz: leio, salvo, edito, tudo muito fácil. Mas eu precisava que uma Query executasse os dados do ClientDataSet. Por exemplo: ligar a Query nesse CDS e passar uma SELECT. Ou, teria como eu executar Query que lesse diretamente no XML? Não vai ter relacionamento nem um sistema de banco de dados por trás (SQL, FIRE, ORACLE), é no puro XML. Como eu faço isso? Grato, Willian


Não sei bem o que vc pretende com a query, mas se for colocar clausulas where , ao invés disso vc pode carregar o ClientDataSet e depois filtrá-lo. Fique atento as opções que o ClientDataSet te dá pois vc pode utilizar fields do tipo TAggregates para substituir o SUM , COUNT e outras funções do select * ...etc
Procure explorar ao máximo o ClientDataSet e vc verá como esse cara é versátil

espero ter ajudado, qq coisa só falar !!


GOSTEI 0
Willian

Willian

07/05/2009

Obrigado pela ajuda.

Mas eu já tinha conhecimento da opção FILTER. Acontece que o FILTER vai apenas FILTRAR a exibição dos dados após eles terem sido carregados (exemplo: carrego toda a tabela com 500 registros para exibir só 10); se eu usasse a Query com o WHERE eu carregaria somente os 10 que eu quero.

Levando em contato o tráfego por Internet isso faz uma grande diferença. Não vou usar SUM, COUNT, etc. Apenas queria carregar somente os dados necessários. Alguma idéia?

Obrigado,

Willian


GOSTEI 0
Josehenrique

Josehenrique

07/05/2009

Obrigado pela ajuda. Mas eu já tinha conhecimento da opção FILTER. Acontece que o FILTER vai apenas FILTRAR a exibição dos dados após eles terem sido carregados (exemplo: carrego toda a tabela com 500 registros para exibir só 10); se eu usasse a Query com o WHERE eu carregaria somente os 10 que eu quero. Levando em contato o tráfego por Internet isso faz uma grande diferença. Não vou usar SUM, COUNT, etc. Apenas queria carregar somente os dados necessários. Alguma idéia? Obrigado, Willian


Bom se vc faz uma requisição pela internet, vc pode enviar a sentença SQL para a propriedade CommandText do CDS, que irá gerar o arquivo XML que será enviado.
Para que o CDS possa se comunicar com o banco passando a sentença vc tem de setar a propriedade do Provider para [poAllowCommandText=true]
Assim vc faz o CDS aceitar SQL dinâmico e pode gerar os XML com os dados resultantes de querys personalizadas.

Se é que eu entendi a sua arquitetura ....se não ...explique melhor como vc obtem o XML, de onde ele vem..etc....


GOSTEI 0
POSTAR