Fórum cd.nirlan #1768
10/01/2009
0
Nirlan Fundao
Curtir tópico
+ 0Posts
10/01/2009
Ricardo Boaro
Para que eu entenda bem a situação e possa apresentar uma solução plausível, o seu ClientDataSet esta ligado a um Provider ou vc usa ele apenas em memória?
Abraço
Gostei + 0
10/01/2009
Nirlan Fundao
Gostei + 0
11/01/2009
Ricardo Boaro
Sendo assim ja tenho a solução para o seu problema, vamos criar um campo Aggregate.
Para isso, acesse o Field Editor do seu ClientDataSet, clique com o direito do mouse e selecione NEW.
Defina um nome para o seu Field, por exemplo TotalValor, em TYPE selecione Aggregate, e em FIELD TYPE marque a opção Aggregate.
Depois acesse a propriedade Expression e coloque la o que vc precisa, por exemplo, para efetuar a soma da coluna da um field SUM(NomeFieldASerSomado). Se vc der uma olhada no help do delphi na opçao Field Aggregate do ClientDataSet, verá que podemos fazer várias operacoes com esse tipo.
Feito isso deixe seu Field aggregate selecionado e no Object Inspector mude a propriedade ACTIVE para True.
com isso vc ativa o seu FIELD AGGREGATE.
Após selecione seu ClientDataSet e no Object Inspector mude a propriedade AggregatesActive para True, dessa forma vc habilitou os field aggregates no ClientDataSet.
Bom com essas configuraçoes, vc pode utilizar o seu Aggregate Field, lembrando que como vc ja deve ter os fields criados em seu clientDataSet é necessário antes de fazer esse procedimento, clicar com o direito sobre o ClientDataset e selecionar CLEAR Data, depois acessar a propriedade FieldDefs e apagar todos os fields, ai sim vc cria o seu field Aggregate e após repita o procedimento clicando com o direito do mouse e selecionando Create DataSet.
Agora no seu código fonte, para atribuir o valor do seu campo aggregate para um Label por exemplo, faça o seguinte:
Label1.Caption := FloatToStr(ClientDataSet1TotalValor.Value); nesse caso o TotalValor é o meu campo aggregate.
Com isso resolvemos seu problema.
Se vc tiver mais alguma dúvida estou a disposição, caso contrário me passe seu OK para fecharmos o chamado.
Abraço
Gostei + 0
11/01/2009
Nirlan Fundao
Gostei + 0
12/01/2009
Ricardo Boaro
Vou passar a vc uma solução que testei aqui e funcionou. Veja para criarmos Fields dinâmicamente usamos:
var
CampoCalc : TField;
Qtde, valor : TField;
CampoCalc := TFloatField.Create(application);
Qtde := TFloatField.Create(application);
Valor := TFloatField.Create(application);
Feito isso podemos acessá-los pelo método FieldByName.
No caso do campo calculado, eu criei uma função que faz o field CampoCalc, receber a Qtde * o valor, e no evento OnCalcField do ClientDataSet eu chamo a função que faz o calculo.
Dessa forma funcionou, veja se isso resolve o seu problema
Abraço
Gostei + 0
12/01/2009
Nirlan Fundao
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)