Como fazer cálculo com campo AGGREGATE ?
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
Curtidas 0
Respostas
Rodrigo Mourão
26/02/2009
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 !!!
De qualquer forma já estamos trabalhando na Solução do seu problema !!
Abs !!!
GOSTEI 0
Leonardo Anselmo
26/02/2009
Delphi 2007. Isso teria alguma coisa haver?.
att,
GOSTEI 0
Rodrigo Mourão
26/02/2009
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
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
GOSTEI 0
Rodrigo Mourão
26/02/2009
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
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
GOSTEI 0
Rodrigo Mourão
26/02/2009
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
Há mais alguma dúvida ??? Podemos encerrar o chamado ???
abs !!!!
Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
GOSTEI 0
Leonardo Anselmo
26/02/2009
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,
GOSTEI 0
Rodrigo Mourão
26/02/2009
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
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
GOSTEI 0
Devmedia
26/02/2009
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
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
GOSTEI 0
Rodrigo Mourão
26/02/2009
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
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
GOSTEI 0
Leonardo Anselmo
26/02/2009
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
GOSTEI 0
Rodrigo Mourão
26/02/2009
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
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
GOSTEI 0
Leonardo Anselmo
26/02/2009
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
GOSTEI 0
Rodrigo Mourão
26/02/2009
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 !!!
Bem quanto a esse erro deve ser por que o cliente data set esta conectado !!
Mandado o form eu posso analisar melhor !!
Abs !!!
GOSTEI 0
Rodrigo Mourão
26/02/2009
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
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
GOSTEI 0
Leonardo Anselmo
26/02/2009
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,
GOSTEI 0
Devmedia
26/02/2009
Leonardo,
o consultor não pode fornecer email para essa troca de arquivos. Para isso a Consultoria dispõe do "Meu disco virtual". Essa opção vc encontra na home da consultoria. Lá vc pode upar arquivos no formato .zip ou .rar.
Depois, vc passa o caminho pro consultor e ele baixará os arquivos.
Se tiver dúvidas, vc pode assistir ao video explicativo que se encontra ao lado da opção "meu disco virtual".
o consultor não pode fornecer email para essa troca de arquivos. Para isso a Consultoria dispõe do "Meu disco virtual". Essa opção vc encontra na home da consultoria. Lá vc pode upar arquivos no formato .zip ou .rar.
Depois, vc passa o caminho pro consultor e ele baixará os arquivos.
Se tiver dúvidas, vc pode assistir ao video explicativo que se encontra ao lado da opção "meu disco virtual".
GOSTEI 0
Leonardo Anselmo
26/02/2009
O caminho é esse: https://www.devmedia.com.br/imagens/discovirtual/27661/Enviar.zip
espero retorno.
GOSTEI 0
Rodrigo Mourão
26/02/2009
Segue Video com demonstração sobre campos agregados !!
Abs !!
Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
[#VIDEO-82#]
[#VIDEO-82#]
GOSTEI 0
Leonardo Anselmo
26/02/2009
Rodrigo,
o link para o downloads do meu sistema e:
https://www.devmedia.com.br/imagens/discovirtual/27661/PSICULTURA.zip
olha realmente com a sua video-aula, conseguir entender melhor e fiz do jeito que vc esplanou, sendo que eu irei colocar dados no grid para ele ir somando o aggregate e o exemplo que vc utilizou foi abrindo uma tabela, quando eu fiz abrindo uma tabela com dados e preenchendo o grid deu certo, mas preciso colocar o ultimo valor em um dbgrid chamado sobrevivencia que se encontra em outro clientdataset, quando vc abrir o projeto vc vera o que estou falando. Mas, estamos chegando lá. Valeu.
att,
Leonardo Anselmo
GOSTEI 0
Rodrigo Mourão
26/02/2009
Olá Amigo !!
Estamos trabalhando no seu chamado, peço apenas que aguardo mais um pouco pois estamos analisando seu código uma vez que as soluções apresentadas abaixo funcionam mas não no seu contexto !!!
Agradeço a compreensão !!!!
Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
Estamos trabalhando no seu chamado, peço apenas que aguardo mais um pouco pois estamos analisando seu código uma vez que as soluções apresentadas abaixo funcionam mas não no seu contexto !!!
Agradeço a compreensão !!!!
Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
GOSTEI 0
Leonardo Anselmo
26/02/2009
Ok, Rodrigo.
Espero que consigam ajudar, pois estou pra entregar esse projeto a um cliente semana que vem. E estou dependendo desse procedimento. Aguardo vc.
att,
Leonardo Anselmo.
GOSTEI 0
Rodrigo Mourão
26/02/2009
Olá Amigo !!
Não estou conseguindo compilar o projeto, parece que você está usando um componente próprio, uma espécie de DBEdit Especial !! Poderia me enviar ???
Preciso compilar o projeto para depurar. Pode me informar também o local exato onde está o código com problema ???
No aguardo !!!
Abs !!!
Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
Não estou conseguindo compilar o projeto, parece que você está usando um componente próprio, uma espécie de DBEdit Especial !! Poderia me enviar ???
Preciso compilar o projeto para depurar. Pode me informar também o local exato onde está o código com problema ???
No aguardo !!!
Abs !!!
Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
GOSTEI 0
Leonardo Anselmo
26/02/2009
Rodrigo,
O link e esse do componente: https://www.devmedia.com.br/imagens/discovirtual/27661/Edits.zip
dentro tem um pacote ou entao vc cria um pacote colocando as .pas dentro e instalando, vai criar uma aba chamanda disney. O codigo fica no oncalcfields no clientdataset do cdsitens_lancamentos. Acho que é isso que vc quer saber, senão, manda a pergunta novamente.
att,
Leonardo Anselmo
GOSTEI 0
Rodrigo Mourão
26/02/2009
Olá Leonardo !!
Eu consegui compilar o projeto e rodar. Olhei sua
rotina, não há nada de errado com ela. Bem rodei o programa, fui até o cadastro
de lançamentos, cliquei em novo e inseri mais uma linha na GRID. O campo
calculado recebeu o valor conforme os de cima. Pode ser que eu não soube "forçar
o erro". Se você tiver condições grave uma vídeo demonstrando o passo-a-passo
para que o erro aconteça. Se não puder descreva em texto mesmo.
Ex.:
Abra o projeto, rode, clique em lançamento, clique
em novo, selecione o lote x, digite 10 no edit tal, 25 no edit tal, e assim por
diante. Eu irei reproduzir aqui para ver se o erro acontece, mas a principio
aqui funcionou!!
No Aguardo !!!
Abs !!!
GOSTEI 0
Rodrigo Mourão
26/02/2009
Olá Leonardo !!!
Estamos no aguardo !!!
Abs !!!!!
Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
Estamos no aguardo !!!
Abs !!!!!
Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
GOSTEI 0
Rodrigo Mourão
26/02/2009
Olá Leodardo !!
Alguma novidade ??? Podemos encerrar o chamado ??
Estamos a Disposição !!!
Abs !!!
Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
Alguma novidade ??? Podemos encerrar o chamado ??
Estamos a Disposição !!!
Abs !!!
Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
GOSTEI 0
Leonardo Anselmo
26/02/2009
Rodrigo,
Espere ate a noite, pois estou cheio de coisa pra fazer e ainda nao testei o que vc disse. A noite te darei um retorno.
att,
Leonardo Anselmo
GOSTEI 0