ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Soma coluna Dbgrid
Ir à página 1, 2  Próximo
 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
handynoturno
Novato
Novato


Registrado: Domingo, 7 de Fevereiro de 2010
Mensagens: 70

MensagemEnviada: Qui Fev 25, 2010 9:12 am    Assunto: Soma coluna Dbgrid Responder com Citação

Galera como faço pra somar a coluna de um dbgrid? mas nao queria todos os campos.

Exemplo: somar os campos 'vl_unitario' onde os campos 'cod_num' fosse igual a 1

queria somar os valores do campo vl_unitario, só onde os valores do campo cod_num fosse igual a 1.

Não sei se soube explicar direito!!
Será que alguem tem alguma dica?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
juniormiranda
Experiente
Experiente


Registrado: Segunda-Feira, 13 de Fevereiro de 2006
Mensagens: 413

MensagemEnviada: Qui Fev 25, 2010 11:09 am    Assunto: Responder com Citação

Se estiver utilizando o ClientDataset uma idéia seria usar um Aggregate com índice. Dá uma olhada nest link http://edn.embarcadero.com/article/29272

Outra saída seria, se a tabela não for grande, fazer um loop condicionando a soma.

[]'s
_________________
Júnior Miranda
Analista de Sistemas.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
handynoturno
Novato
Novato


Registrado: Domingo, 7 de Fevereiro de 2010
Mensagens: 70

MensagemEnviada: Qui Fev 25, 2010 2:14 pm    Assunto: Responder com Citação

Amigo eu queria um exemplo do loop. a tabela é pequena! você poderia colocar um exemplo aí!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Qui Fev 25, 2010 7:43 pm    Assunto: Re: Soma coluna Dbgrid Responder com Citação

handynoturno escreveu:
Galera como faço pra somar a coluna de um dbgrid? mas nao queria todos os campos.

Exemplo: somar os campos 'vl_unitario' onde os campos 'cod_num' fosse igual a 1

queria somar os valores do campo vl_unitario, só onde os valores do campo cod_num fosse igual a 1.

Não sei se soube explicar direito!!
Será que alguem tem alguma dica?


Código:
select sum(vl_unitario)as valor from suatabela
where cod_num = 1

_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
juniormiranda
Experiente
Experiente


Registrado: Segunda-Feira, 13 de Fevereiro de 2006
Mensagens: 413

MensagemEnviada: Sex Fev 26, 2010 9:16 am    Assunto: Re: Soma coluna Dbgrid Responder com Citação

adriano_servitec escreveu:
handynoturno escreveu:
Galera como faço pra somar a coluna de um dbgrid? mas nao queria todos os campos.

Exemplo: somar os campos 'vl_unitario' onde os campos 'cod_num' fosse igual a 1

queria somar os valores do campo vl_unitario, só onde os valores do campo cod_num fosse igual a 1.

Não sei se soube explicar direito!!
Será que alguem tem alguma dica?


Código:
select sum(vl_unitario)as valor from suatabela
where cod_num = 1



Respondi levando em consideração que os dados estariam ainda em memória e não já gravados no banco. Se for uma tela de consulta de dados já gravados, usa a resposta do Adriano. Se for uma tela de moviemento onde os registros são enviados ao banco numa única transação, pense no artigo. Ppis vc estará somando os registro que ainda estão em memória.
_________________
Júnior Miranda
Analista de Sistemas.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
handynoturno
Novato
Novato


Registrado: Domingo, 7 de Fevereiro de 2010
Mensagens: 70

MensagemEnviada: Sex Fev 26, 2010 4:26 pm    Assunto: Responder com Citação

Pleus junior e Adriano eu fiz assim:

Código:
Dbtext1.Caption :=  IntToStr(consulta.SQL.Add('select sum(Vl_Unitario)as Valor from orcamento_item'  +
'where Nr_Orcamento = '+''''+dbedit3.text+''''));


Não deu certo. o resultado aparece 1, mas esse não é o resultado correto!

eu ja tinha feito assim, sera que tem algum erro no codigo?

A tabela e os campos estão certos!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Sex Fev 26, 2010 7:01 pm    Assunto: Responder com Citação

handynoturno escreveu:
Pleus junior e Adriano eu fiz assim:

Código:
Dbtext1.Caption :=  IntToStr(consulta.SQL.Add('select sum(Vl_Unitario)as Valor from orcamento_item'  +
'where Nr_Orcamento = '+''''+dbedit3.text+''''));


Não deu certo. o resultado aparece 1, mas esse não é o resultado correto!

eu ja tinha feito assim, sera que tem algum erro no codigo?

A tabela e os campos estão certos!


Ja que vc quer passar o valor por parametros, então na propriedade sql do dataset coloque o seguinte comando:

Código:
select sum(vl_unitario)as valor from suatabela
where cod_num = :numero


Modifique a propriedade params---> datatype dataset para ftInteger, e também a propriedade ParamType para ptImput
No aplicativo faça o seguinte comando

Código:
var
  vnumero : integer;
begin
  vnumero := strtoint(dbedit3.text);

  with seudataset do
  begin
    close;
    params[0].asinteger := vnumero; //esta variavel é que deve conter o valor para passar para o parametro
    open;
  end;
end;



No dbtext1.caption vc não coloca nada apenas seta o dataset ao datasource da query e o fields vc aponta para o o TFields que vc deve criar ao executar o comando sql na propriedade SQL do dataset.

Ou seja coloque o comando sql dentro da propriedade sql do datast depois de dois cliques no componente dataset e adiciona o campo dentro do editor de tfields do dataset. Ai basta apontar ele no dbtext, como se faz com o dbedit quando vc popula eles.

Obs: Fiz o codigo acima digitando direto no forum, sem testar, se der erro avise.
Duvidas é só postar
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
handynoturno
Novato
Novato


Registrado: Domingo, 7 de Fevereiro de 2010
Mensagens: 70

MensagemEnviada: Dom Fev 28, 2010 1:02 pm    Assunto: Responder com Citação

ok, vou testar desse jeito. Mas deixa eu te fazer uma pergunta:

não há uma forma de somar somente o que aparece no dbgrid?

Exemplo fiz uma consulta no banco, a consulta apareceu no dbgrid, aí eu parto para outro codigo que faça um loop na coluna do dbgrid,( sem usar codigos sql) em um certo campo que apareceu na consulta!!

é como se fosse um loop na coluna que eu quero do dbgrid, sem codigos sql só a linguagem object pascal!

nao sei se soube explicar direito!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Dom Fev 28, 2010 1:50 pm    Assunto: Responder com Citação

handynoturno escreveu:
ok, vou testar desse jeito. Mas deixa eu te fazer uma pergunta:

não há uma forma de somar somente o que aparece no dbgrid?

Exemplo fiz uma consulta no banco, a consulta apareceu no dbgrid, aí eu parto para outro codigo que faça um loop na coluna do dbgrid,( sem usar codigos sql) em um certo campo que apareceu na consulta!!

é como se fosse um loop na coluna que eu quero do dbgrid, sem codigos sql só a linguagem object pascal!

nao sei se soube explicar direito!
Existe sim, ou vc pode urar um FOR ou um WHILE

Exemplo1
Código:
table.first;
for i:= 0 to table.recordcout do
begin
  {faça os calculos dentro do loop}
  next;
end;


Exemplo 2
Código:
table.first;
while not table.eof do
begin
  {faça os calculos dentro do loop}
  next;
end;

_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
handynoturno
Novato
Novato


Registrado: Domingo, 7 de Fevereiro de 2010
Mensagens: 70

MensagemEnviada: Dom Fev 28, 2010 4:08 pm    Assunto: Responder com Citação

Adriano mas neste caso tá pegando a tabela inteira! lembre-se eu vou fazer uma consulta e no dbgrid só vai retornar a minha pesquisa!! nos caso, queria a soma apenas dos registros da minha pesquisa que aparecerão no dbgrid!! entendeu?

não teria algo como: somar os valores dos campos da coluna do dbgrid em um laço sem usar a tabela, só os valores que aparecem em um determinado campo do dbgrid? era isso que eu tava tentando de explicar anteriormente!

tipo,o mesmo que somar uma coluna de uma matriz! fazer o mesmo com o dbgrid. os valores que estão em certa coluna dele!

não sei se tem como!! só se tiver! to meio perdido pq fiz java estruturado!

mesmo assim obrigado!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Dom Fev 28, 2010 4:35 pm    Assunto: Responder com Citação

handynoturno escreveu:
Adriano mas neste caso tá pegando a tabela inteira! lembre-se eu vou fazer uma consulta e no dbgrid só vai retornar a minha pesquisa!! nos caso, queria a soma apenas dos registros da minha pesquisa que aparecerão no dbgrid!! entendeu?

não teria algo como: somar os valores dos campos da coluna do dbgrid em um laço sem usar a tabela, só os valores que aparecem em um determinado campo do dbgrid? era isso que eu tava tentando de explicar anteriormente!

tipo,o mesmo que somar uma coluna de uma matriz! fazer o mesmo com o dbgrid. os valores que estão em certa coluna dele!

não sei se tem como!! só se tiver! to meio perdido pq fiz java estruturado!

mesmo assim obrigado!
Neste caso pelo que eu sei vc vai ter que chamar um select de qualquer forma antes do loop passando na clausula where o que vc quer somar.

Exemplo

Código:
with dataset do
begin
   close;
   sql.clear;
   sql.add (' select * from tabela where campo = 1 );
   if not isempty then //se não retornar vazio então faz o loop
   begin
      first;
      while not eof do
      begin
         {faça os calculos dentro do loop}
         next;
      end;
   end;
end;


Obs: Este exemplo acima fiz digitando aqui no forum, pode haver erros de digitação, mais a logica é esta acima. Tente adaptar no teu projeto.

Duvidas é só postar.
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
handynoturno
Novato
Novato


Registrado: Domingo, 7 de Fevereiro de 2010
Mensagens: 70

MensagemEnviada: Seg Mar 01, 2010 8:35 am    Assunto: Responder com Citação

Adriano deu certo agora, mas deixa te fazer uma pergunta: todas dicas que eu vi 99% utilizavam o select sum, ate vi uns post antigos em que voce dava essa dica e o pessoal lhe agradecia. Agora pq nesse meu exemplo o select sum nao funciona? o resultado só da 1.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
handynoturno
Novato
Novato


Registrado: Domingo, 7 de Fevereiro de 2010
Mensagens: 70

MensagemEnviada: Ter Mar 02, 2010 9:25 am    Assunto: Responder com Citação

Adriano me tira uma dúvida:

Código:
consulta.SQL.Add('select sum(Vl_Unitario)as Total from orcamento_item'  +
'where Nr_Orcamento = '+''''+dbedit3.text+''''));


nesse código aí, no dbgrid que esta ligado ao dataset consulta, era pra criar uma coluna automaticamente com o nome Total?

nao consigo fazer aparecer essa coluna!!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Ter Mar 02, 2010 9:30 pm    Assunto: Responder com Citação

handynoturno escreveu:
Adriano me tira uma dúvida:

Código:
consulta.SQL.Add('select sum(Vl_Unitario)as Total from orcamento_item'  +
'where Nr_Orcamento = '+''''+dbedit3.text+''''));


nesse código aí, no dbgrid que esta ligado ao dataset consulta, era pra criar uma coluna automaticamente com o nome Total?

nao consigo fazer aparecer essa coluna!!
Se a SQL estiver correto....Depois que vc ativar a query ai vai aparecer a coluna. Ou vc pode criar a coluna na grid e apontar para o TFields do dataset, caso vc utilize o tfields no query.
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
handynoturno
Novato
Novato


Registrado: Domingo, 7 de Fevereiro de 2010
Mensagens: 70

MensagemEnviada: Sex Mar 05, 2010 6:25 pm    Assunto: Responder com Citação

Adriano me ajuda aí!

Código:
with consulta do
begin
   consulta.SQL.clear;
   consulta.SQL.Add('select sum(Vl_Unitario * Qt_Item) as Total from          orcamento_item'  +
     ' where Nr_Orcamento =  '+''''+dbedit3.text+'''');
       consulta.Open;
       end;



nesse código esta retornando o erro de que o campo Nr_Consulta nao foi encontrado!!

mas ele existe e tá tudo certo!!

tem alguma dica!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Ir à página 1, 2  Próximo
Página 1 de 2

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB