| 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: |
|
|
| 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 |
|
 |
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: |
|
|
| 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 |
|
 |
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: |
|
|
| 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 |
|
 |
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 |
|
 |
|