Fórum TClientDataSet campo intercalc agregate ??? #167806
04/07/2003
0
ou seja, como se calcula esse campo em um outro campo de tipo aggregate?
pois dei um sum(campo_intercalc) no campo aggregate e não funcionou, ou seja, não calculou a coluna.
Help!!!
Obrigado.
Chaplinux
Curtir tópico
+ 0Posts
04/07/2003
Allan
Allan
Gostei + 0
04/07/2003
Chaplinux
Antigamente estava funcionando quando o campo da coluna realmente existia na tabela. Mas eu eleiminei ela do banco , já q o posso fazer campo calculado, mas o aggregado não aceita campo calculado e sim somente internalcalc. mudei para internalcalc e num funionou.
só que essa coluna eu fiz tipo o campo calculado, é a soma de qtde * valor.
mas o total sempre é zero.
Gostei + 0
04/08/2010
Rafael Mattos
Gostei + 0
04/08/2010
Eriley Barbosa
só que essa coluna eu fiz tipo o campo calculado, é a soma de qtde * valor.
mas o total sempre é zero.
Apague o campo agregado que você criou. Selecione o ClientDataset, e modifique a sua propriedade AggregatesActive para True a fim de habilitar o uso de campos agregados. Aplique um duplo clique no ClientDataset e no seu editor de campos clique com o botão direito do mouse e selecione a opção New Field. Na tela de configuração do campo, defina sua propriedade Name como VirtTotalGeral, sua propriedade Type como Float e em Field Type, selecione a opção Aggregate e em seguida clique no botão OK para criar o campo. O campo agregado aparece numa área destacada em virtude de não haver uma ocorrência deste para cada registro como no campo calculado convencional, este ocorre uma vez só para todo o ClientDataSet. Prosseguindo com a sua configuração, selecione o campo VirtTotalGeral no editor de campos e modifique a sua propriedade Active para True a fim de habilitarmos o seu uso. Na propriedade DisplayFormat coloque a máscara #,###,##0.00 e na propriedade Expression defina o seguinte comando SUM(qtde * valor), podemos notar bastante semelhança com o comando referente na linguagem sql, justamente para agregar valores calculados ou não, numa amostragem a partir de um campo. Atenciosamente Eriley
Gostei + 0
04/08/2010
Rafael Mattos
Gostei + 0
04/08/2010
Eriley Barbosa
Gostei + 0
04/08/2010
Rafael Mattos
Gostei + 0
05/08/2010
Rafael Mattos
var
LocalRegTabela: TBookMark; begin
// Marca onde o estva o ponteiro da tabela, pois quando eu dou um refresh na tabela cdsTotalGeralItens, por estar ligada a cdsItens pelo DataSetProvider, tambem era atualizada e o ponteiro ia para o primeiro registeo. LocalRegTabela:= cdsItens.GetBookmark;
//Atualiza a tabela cdsTotalGeralItens e recalcula o total geral dos itens dmPrincipal.cdsTotalGeralItens.Refresh;
// Retorna com o ponteiro onde estava anteriormente na tabela cdsItens cdsItens.GotoBookmark(LocalRegTabela);
//Libera da memória cdsItens.FreeBookmark(LocalRegTabela);
end; Adicionei um DataSetProvider e a sua propriedade DataSet liguei ao cdsItens, adicionei outro ClientDataSet chamado cdsTotalGeralItens. Esse CDS mudei a propriedade ProviderName=DataSetProvider criado anteriormente e AggregatesActive=True, adcionei o campo TotalValorItem(fkData) e criei o campo TotalValor(fkAggregate) com sua propriedades Active= True, Expression = sum(TotalValorItem)e Visible=True. Outra coisa, estou usando Delphi 2009. Bom pessoal espero que tenham entendido, e qualquer dúvida é só postar ai. Abraço...
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)