| Exibir mensagem anterior :: Exibir próxima mensagem | 
	
	
		| Autor | Mensagem | 
	
		| handynoturno Novato
 
  
 
 Registrado: Domingo, 7 de Fevereiro de 2010
 Mensagens: 70
 
 
 | 
			
				|  Enviada: Qui Fev 25, 2010 9:12 am    Assunto: Soma coluna Dbgrid |   |  
				| 
 |  
				| 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 |  | 
	
		|  | 
	
		| juniormiranda Experiente
 
  
  
 Registrado: Segunda-Feira, 13 de Fevereiro de 2006
 Mensagens: 413
 
 
 | 
			
				|  Enviada: Qui Fev 25, 2010 11:09 am    Assunto: |   |  
				| 
 |  
				| 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 |  | 
	
		|  | 
	
		| handynoturno Novato
 
  
 
 Registrado: Domingo, 7 de Fevereiro de 2010
 Mensagens: 70
 
 
 | 
			
				|  Enviada: Qui Fev 25, 2010 2:14 pm    Assunto: |   |  
				| 
 |  
				| Amigo eu queria um exemplo do loop. a tabela é pequena! você poderia colocar um exemplo aí! |  | 
	
		| Voltar ao Topo |  | 
	
		|  | 
	
		| adriano_servitec Colaborador
 
  
 
 Registrado: Sexta-Feira, 30 de Janeiro de 2004
 Mensagens: 17618
 
 
 |  | 
	
		| Voltar ao Topo |  | 
	
		|  | 
	
		| juniormiranda Experiente
 
  
  
 Registrado: Segunda-Feira, 13 de Fevereiro de 2006
 Mensagens: 413
 
 
 | 
			
				|  Enviada: Sex Fev 26, 2010 9:16 am    Assunto: Re: Soma coluna Dbgrid |   |  
				| 
 |  
				|  	  | 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 |  | 
	
		|  | 
	
		| handynoturno Novato
 
  
 
 Registrado: Domingo, 7 de Fevereiro de 2010
 Mensagens: 70
 
 
 | 
			
				|  Enviada: Sex Fev 26, 2010 4:26 pm    Assunto: |   |  
				| 
 |  
				| 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 |  | 
	
		|  | 
	
		| adriano_servitec Colaborador
 
  
 
 Registrado: Sexta-Feira, 30 de Janeiro de 2004
 Mensagens: 17618
 
 
 | 
			
				|  Enviada: Sex Fev 26, 2010 7:01 pm    Assunto: |   |  
				| 
 |  
				|  	  | 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 |  | 
	
		|  | 
	
		| handynoturno Novato
 
  
 
 Registrado: Domingo, 7 de Fevereiro de 2010
 Mensagens: 70
 
 
 | 
			
				|  Enviada: Dom Fev 28, 2010 1:02 pm    Assunto: |   |  
				| 
 |  
				| 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 |  | 
	
		|  | 
	
		| adriano_servitec Colaborador
 
  
 
 Registrado: Sexta-Feira, 30 de Janeiro de 2004
 Mensagens: 17618
 
 
 | 
			
				|  Enviada: Dom Fev 28, 2010 1:50 pm    Assunto: |   |  
				| 
 |  
				| Existe sim, ou vc pode urar um FOR ou um WHILE 	  | 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!
 | 
 
 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 |  | 
	
		|  | 
	
		| handynoturno Novato
 
  
 
 Registrado: Domingo, 7 de Fevereiro de 2010
 Mensagens: 70
 
 
 | 
			
				|  Enviada: Dom Fev 28, 2010 4:08 pm    Assunto: |   |  
				| 
 |  
				| 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 |  | 
	
		|  | 
	
		| adriano_servitec Colaborador
 
  
 
 Registrado: Sexta-Feira, 30 de Janeiro de 2004
 Mensagens: 17618
 
 
 | 
			
				|  Enviada: Dom Fev 28, 2010 4:35 pm    Assunto: |   |  
				| 
 |  
				| 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. 	  | 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!
 | 
 
 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 |  | 
	
		|  | 
	
		| handynoturno Novato
 
  
 
 Registrado: Domingo, 7 de Fevereiro de 2010
 Mensagens: 70
 
 
 | 
			
				|  Enviada: Seg Mar 01, 2010 8:35 am    Assunto: |   |  
				| 
 |  
				| 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 |  | 
	
		|  | 
	
		| handynoturno Novato
 
  
 
 Registrado: Domingo, 7 de Fevereiro de 2010
 Mensagens: 70
 
 
 | 
			
				|  Enviada: Ter Mar 02, 2010 9:25 am    Assunto: |   |  
				| 
 |  
				| 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 |  | 
	
		|  | 
	
		| adriano_servitec Colaborador
 
  
 
 Registrado: Sexta-Feira, 30 de Janeiro de 2004
 Mensagens: 17618
 
 
 | 
			
				|  Enviada: Ter Mar 02, 2010 9:30 pm    Assunto: |   |  
				| 
 |  
				| 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. 	  | 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!!
 | 
 _________________
 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 |  | 
	
		|  | 
	
		| handynoturno Novato
 
  
 
 Registrado: Domingo, 7 de Fevereiro de 2010
 Mensagens: 70
 
 
 | 
			
				|  Enviada: Sex Mar 05, 2010 6:25 pm    Assunto: |   |  
				| 
 |  
				| 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 |  | 
	
		|  | 
	
		|  |