Fórum Como fazer cálculo com campo AGGREGATE ? #3087

26/02/2009

0

Caro Consultor,            Tenho uma aplicação que utiliza campo aggregate para sumarizar (sum) uma coluna de um dbgrid. Até ai estou conseguindo perfeitamente, mas quando preciso somar esse campo aggregate com outro campo que se encontra em um clientdataset diferente ou no mesmo clientdataset ele da erro dizendo que nao consegue pegar o conteudo do campo com aquele valor e outras coisas desse tipo. Procurei em artigos, internet, foruns e não achei solução nenhuma. Como posso resolver isso e ainda em relacao ao aggregate como colocar mascara nele e tb campos lookup?.  Estarei trato pela solução.   att,   Leonardo Anselmo      
Leonardo Anselmo

Leonardo Anselmo

Responder

Posts

28/02/2009

Rodrigo Mourão

Olá Leonardo, para que nos possamos ajudá-lo precisamos saber alguns detalhes, o principal é: Qual a versão do Delphi utiliza ??

De qualquer forma já estamos trabalhando na Solução do seu problema !!


Abs !!!


Responder

Gostei + 0

28/02/2009

Leonardo Anselmo

Delphi 2007. Isso teria alguma coisa haver?. att,
Responder

Gostei + 0

28/02/2009

Rodrigo Mourão

Sim tem,

Exitiam algum problemas com campos agregados no delphi 7  que foram corrigidos a partir do 2006, e a partir do delphi 2007 novos metodos foram adicionados.

Abs !!!

Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi

Responder

Gostei + 0

28/02/2009

Rodrigo Mourão

Olá Leonardo problema resolvido !!!


Para pegar o valor de um campo agregado você pode utilizar um dos 4 métodos abaixo. No exemplo suponha que seu ClientDataSet chame-se CdsVendas e que o campo agregado chama-se Total Geral:

CdsVendas.AggFields.FieldByName('TotalGeral').Value;
CdsVendas.AggFields[0].Value;
CdsVendas.AggFields.AggFields.FindField('TotalGeral').Value;
CdsVendas.AggFields.AggFields.FieldByNumber(0).Value;

Repare no uso do .Value, ele é um variant e deve ser usado com campos agregados uma fez que este TField não tem um tipo definido.

Quanto a formatação se for em formato Moeda você poderá selecionar o campo agregado no CDS e alterar a propriedade currency para True. Qualquer outro formato diferente poderá ser feito através da propriedade DisplayFormat, por exemplo para formatar uma valor como porcentagem você poderia fazer #0.00 % ou mesmo valores arredondados com três casas decimais:   ###,##0.000

Em ralação a criar lookup com campos agregados o Delphi não suporte, mesmo pq campos agregados são apenas totalizadores.

Estamos a disposição !!!

Abs!!!

Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
Responder

Gostei + 0

02/03/2009

Rodrigo Mourão

Olá Amigo !!!

Há mais alguma dúvida ???  Podemos encerrar o chamado ???

abs !!!!

Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi

Responder

Gostei + 0

03/03/2009

Leonardo Anselmo

Olha nao conclui nao pois ainda nao deu certo. Pois o dbedit que estou associando o campo aggregate ele so aparece o valor quando passo com o cursor + de 1 vez. ou seja, eu volto o campo pra ele calcular, eh assim mesmo?. att,
Responder

Gostei + 0

03/03/2009

Rodrigo Mourão

Olá amigo !!!

Eu precisaria dar uma olhada no seu código para ver vomo está fazendo !!

Use o Disco Virtual para me enviar os fontes !!

att,

Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi

Responder

Gostei + 0

03/03/2009

Devmedia

Leonardo,
a opção "meu disco virtual" está na home da consultoria. Caso tenha dúvidas sobre como utlizá-lo, acesse ao video explicativo, onde o seu link encontra-se ao lado da opção referida acima.
Lembrando que vc só poderá upar aquivos do tipo .rar ou .zip

Responder

Gostei + 0

06/03/2009

Rodrigo Mourão

Prezado Cliente,

Este chamado foi concluído por falta de retono.

Continuamos a disposição para qualquer esclarecimento.

Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi

Responder

Gostei + 0

10/03/2009

Leonardo Anselmo

Rodrigo, Olha eu estava tentando melhorar o codigo e fazer de uma outra forma para poder te explicar melhor. Mas, veja o que estou tentando fazer: Tenho um campo em um clientdataset chamado de SobrevivenciaCalc que é calculado e tipo variant, como vc tinha me dito pelo post anterior e nesse campo tento receber um agregatte divididos por outros dados como segue abaixo, mas mesmo assim não tenho sucesso, como devo proceder ? O Campo aggregate antes de começar o calculo ele se encontra null, ai coloquei como valor padrao na propriedade DefaultExpression := 0;, pois antes ele dizia que nao podia converter nada null. Quando coloco essa expressao abaixo, ele nao calcula nada , mas vejo a mensagem: E2171 Variable ´Self´ inaccessible here due to optimization pelo debug. CDSItens_LancamentosSobrevivenciaCalc.AsVariant := 100- ((CDSItens_Lancamentos.AggFields.FieldByName('TotalMortalidade').Value*(100))/3300); e tb tentei assim: CDSItens_LancamentosSobrevivenciaCalc.Value := 100-((CDSItens_Lancamentos.AggFields.FieldByName('TotalMortalidade').Value*(100))/3300); Agradeço a Atenção e seria grato pela ajuda. att, Leonardo Anselmo
Responder

Gostei + 0

10/03/2009

Rodrigo Mourão

Olá Leonardo !!!


O problema pode estar no campo calculado. Campos calculados são muito restritos no Delphi. Geralmente eles só podem ser manipulados dentro do evento OnCalcField do ClientDataSet.  Um campo não precisa ser do tipo calculado para receber uma valor como este que você esta fazendo !!!

Experimente criar um campo comum mesmo do tipo Float e depois tentar passar o valor do agregado/3 para este campo.

Outro detalhe é que se possivel post os fontes para que eu possa depurar e analisar assim posso ser mais acertivo e lhe auxiliar mais rapidamente.

Fico no aguardo !!!

Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
Responder

Gostei + 0

11/03/2009

Leonardo Anselmo

Rodrigo, Vc quer que eu envie todo o sistema?. Ou só os arquivos do form que estou fazendo?. E quando tentei criar um campo no clientdataset como tipo DATA e FLOAT ele diz que nao pode achar (found) o campo que tinha criado, como faço entao pra criar esse campo?. // att, // Leonardo Anselmo 
 
Responder

Gostei + 0

11/03/2009

Rodrigo Mourão

Mande só este form !!!  Já será suficiente !!!

Bem quanto a esse erro deve ser por que o cliente data set esta conectado !!

Mandado o form eu posso analisar melhor !!


Abs !!!


Responder

Gostei + 0

11/03/2009

Rodrigo Mourão

Mande só este form !!!  Já será suficiente !!!

Bem quanto a esse erro deve ser por que o cliente data set esta conectado !!

Mandado o form eu posso analisar melhor !!


Abs !!!

Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi

Responder

Gostei + 0

11/03/2009

Leonardo Anselmo

Nao estou conseguindo enviar o arquivo. Vc poderia me dizer um email?. Pois o servidor diz que o arquivo de imagem é invalido e esta gravando o ip e login. att,
Responder

Gostei + 0

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

Aceitar