Fórum Duvida Sobre a Linguagem Sql Função Sum() #203145
27/12/2003
0
No Evento OnClick De Um Botão Realizo Uma Consulta Onde Limito a Saída Da Consulta Pela Data e Pelo Codigo Do Funcionário.Atê Este Ponto,
Usando Um Componente Query e Linguagem Sql Consigo Obter a Saida
Desejada. Mas O Problema e Que Preciso Somar o Valor De Um Campo Desta Pesquisa.Usei Para Isto a Instrução Abaixo.
Evento Onclick De Um Botao
Query1.disablecontrols;
Query1.Close;
Query1.SQL.Clear;
//Instrucoes Que Definem a Pesquisa.Por Data e Pelo Codigo Do
Funcionário Etc....Não Aparece Por Não Estar No Contexto Da Dúvida
Query1.Prepare;
Query1.open;
//Abaixo o Código Que Gostaria de Substituir Pela Propiedade Sum()
Do Sql Se For Possível.
Soma:=0;
Query1.First;
while not(Query1.Eof) do
begin
Soma:=Soma + Query1Liquido.Value;
Query1.Next;
end;
edit1.text:=formatfloat(´R$ : ´+´#,0.00´,Soma);
// O Código Acima Soma Individualmente o Valor De Query1Liquido e
Armazena Numa Variável Temporária Soma.O Código Funciona Mas
Acho Ele Meio Ultrapassado, Já Que Irei Percorrer Todos Os Registros
Pela Instrução While Not(Query1).eof Do.
//Finalizo
Query1.EnableControls;
// Etc....
end.
Aparentemente o Que Quero é Muito Simples. Tenho Pouquíssima Prática Na Linguagem Sql. O Pouco Que Sei é Tipo Receita De Bolo(Sigo Alguns Exemplos). Gostaria Muito De Receber Ajuda. Se Alguem Conhecer Um
Livro Que Contenha Delphi e a Linguagem Sql e Quiser Sugerir Sinta-se a
Vontade... Por Fim Agradeço Aos Meus Colegas Toda e Qualquer Tipo De Ajuda.
Marco Salles
Curtir tópico
+ 0Posts
27/12/2003
Pr.mas
Vou te ensinar como usar a função SUM.
Primeiro apague tudo o que você fez mantendo apenas a query.
Digite no SQL da query o seguinte:
Select SUM(VALOR) ´VALOR é o nome do campo a ser somado´
from TABELA ´TABELA é o nome da tabela´
where CAMPO > 0 ´CAMPO é o campo para condição >0 é a condição´
order by CAMPO ´CAMPO é o campo para ordenação´
Asc ´Ordem Ascendente e Desc ordena Descendente´
Depois de colocada a instrução sql abrir a tabela
Dê um duplo click sobre a tabela e click com o botão esquerdo do mouse
e escolha ´Add All Fields´
Ira aparecer o campo chamado SUM que é o campo que retornará a soma do campo que colocou na instrução sql.
A partir daí é só você colocar um comando para abir a query pegar o valor do campo SUM e fechar a query. Exemplo:
begin
Query1.Open;
Variavel:=DM.Query1.FieldByName(´SUM´).AsCurrency;
Query1.Close;
end;
entendeu?
Não precisa de While, for ou repeat until, você poderá fazer tudo dentro da query.
Espero ter ajudado
Abraços
pr.mas
Gostei + 0
27/12/2003
Carlosrm
elimine
Soma:=0;
Query1.First;
while not(Query1.Eof) do
begin
Soma:=Soma + Query1Liquido.Value;
Query1.Next;
end;
e acrescente no Select da query1 mais um campo a ser exibido (retornado), modificado por SUM:
Select campo1, campo2,... SUM(Liquido) as Soma... from...
Será criado um campo (coluna) no result da sua query1, chamado de Soma, que conterá a soma de todos os conteúdos da campo liquido, conforme a sua query1 tenha especificado (where, group by...).
Se der erro de sintaxe, além de revisar letra por letra, sinal por sinal, experimente retirar a palavrinha ´as´ .
Depois de executada a query1, apenas faça:
edit1.text := format.....query1Soma.AsFloat...
Na página principal deste fórum, nas seções Guia de Referência e Apostilas, você vai encontrar alguma coisa sobre Sql. . Os comandos de Sql presentes no Delphi são apenas uma parte do que existe. Há uma quantidade imensa de sites que disponibilizam apostilas, tutoriais e exemplos sobre Sql gratuitos. Simplificando, há vários exemplos de programas prontos neste próprio fórum. Qualquer exemplo que falar em Cliente/Servidor, Interbase, Firebird estará usando algum tipo de SQL. Os comandos mais comuns do Sql são iguais para todos. Leia e pratique, leia e pratique, leia e pratique... carlosrm
Gostei + 0
27/12/2003
Marco Salles
P:S Eu Prefiro Um Livro Em Que Eu Possa Ler e Acompanhar Passo a
Passo Cada Exemplo.
Boa Noite a Todos.....
Gostei + 0
28/12/2003
Marco Salles
Data.No Evento On Click De Um Botao Escrevi o Seguintes Códigos:
NO EVENTO ONCLICK DE UM BOTÃO
Query1.disablecontrols;
Query1.Close;
Query1.SQL.Clear;
Query1.Sql.Add(´Select Codigo_Venda,Codigo_Cliente,´+
´Sum(Total) as Soma ,Desconto,Data From TabVen´);
Query1.Sql.Add(´Where Data>=:Datainicial´);
Query1.ParamByName(´datainicial´).asdate:=strtodate(Maskedit1.text);
Query1.Sql.Add(´And Data<=:DataFinal´);
Query1.ParamByName(´DataFinal´).asdate:=strtodate(maskedit2.text);
//Tenho Dúvida Na Linha Abaixo
Query1.Sql.Add(´Group By Codigo_Venda,Codigo_Cliente,Desconto,Data´)
Query1.Prepare;
Query1.open;
edit1.text:=formatfloat(´R$ : ´+´#,0.00´,Soma);
Query1.EnableControls;
Tudo Isto é Feito Na Execução Do Projeto.E Aparece Um Erro Dizendo Que
O Campo Total Não Existe. :?: :?:
Ora Amigos Eu So Quero é Efetuar Uma Pesquisa Onde o Fator Data que Limita a Quantidade De Registro. E Finalmente Somar o Total De Vendas
Usando A Função SUM() Desde Período.
Diga-se De Passagem Que Minha Tabela ´TabVen´ Foi Desenvolvida Usando o ´Piradox´<Como Dizem Alguns>.
Peço Ajuda e Agradeço a Todos....
Gostei + 0
28/12/2003
Edilcimar
Gostei + 0
28/12/2003
Marco Salles
Query1.Sql.Add(´Select Codigo_Venda,Codigo_Cliente,´+
´Sum(Total) as Soma ,Desconto,Data From TabVen´);
e Troca-=la Por
Query1.Sql.Add(´Select *From TabVen´);
Ps:É Claro Que Agora a Instrução Abaixo Não Faz Mais Sentido
Query1.Sql.Add(´Group By Codigo_Venda,Codigo_Cliente,Desconto,Data´)
e Tenho Que Exclui-la T.B
Feito Estas Duas Modifiacções o Evento Funciona.Porém Não Soma o Valor Do Campo Total. E Eu Volto a Estaca Zero. Continuo a Pedir Ajuda.
Quero Aprender a Usar a Função Sum().
Gostei + 0
28/12/2003
Edilcimar
Gostei + 0
28/12/2003
Marco Salles
Escrevi Como o Sugerido.
Query1.Sql.Add(´Select Codigo_Venda,Codigo_Vendedor,Total,Data
From TabVen´);
e Funciona...Como e Qual Ponto Devo Usar Corretamente a Função Sum() Para Calcular O Do Camp Total...
Gostei + 0
28/12/2003
Marco Salles
Gostei + 0
29/12/2003
Marco Salles
Gostei + 0
29/12/2003
Aroldo Zanela
Manda a tabela compactada para o meu e-mail: aroldo_zanela@hotmail.com (populada) e se possível o formulário que você está trabalhando.
Gostei + 0
29/12/2003
Demian Soares
execute a query e pegue o resultado valor:=querynomecriadoparaessasoma.value e vc tera a soma que quiser.. depois desse passo e vc vendo como funciona, vc implanta as outras condicoes where group ou o que quiser
quanto a apostila vc encontra ate mesmo algumas aqui no site de clube... mas eu indicaria um livro excelente.. aprendendo sql em 24 horas... taz detalhado todos os comando sql...com exemplos praticos.
Gostei + 0
29/12/2003
Marco Salles
Então Resolvir Escrever De Forma Diferente.
No Componete Query Na Sua Propriedade Sql... Escrevi:
Select
Codigo_Venda,Codigo_Cliente,Total ,Sum(Total) as Soma ,Desconto,Data
From
TabVen
Order By
Codigo_Venda,Codigo_Cliente,Total , Soma ,Desconto,Data
Pronto . Esta Criado o Campo Soma.
Dois Click No Componente Query e Adiciono Este Campo...
Volto No Meu Botão Manipulador De Evento.E Escrevo o Codigo Tla Como Escrevi No Sql Do Query
Evento OnClick Do Botão
begin
Query1.Close;
Query1.Clear;
Query1.Sql.Add(´Codigo_Venda,Codigo_Cliente,Total ,Sum(Total) as
Soma ,Desconto,Data From TabVen´);
//Faço Minha Seleção Como Escrevi No Inicíio Do Tópico.
Query1.Sql.Add(Group By ´Codigo_Venda,Codigo_Cliente,Total ,
Soma ,Desconto,Data);
Query1.Prepare;
Query1.Open;
Edit1.Text:=FormatCurr(Query1.FieldByName(´Soma´).AsCurrency);
End;//FIM
Gostaria Que o Conteudo Do Edit Fosse a Soma Do Valor Do Campo Total De Todos Registro Selecionados.MAS PARA A MINHA SURPRESA,
O VALOR APRESENTADO NO EDIT1 É SIMPLESMENTE O VALOR DO PRIMEIRO REGISTRO E NÃO A SOMA.
Exemplo Suponha Que Selecionamos Quatro Registro:
ps:Conteúdo Do DbGrid Apos a Pesquisa No Query1...
COD_VENDA COD_VENDEDOR TOTAL DESCONTO DATA
001 001 100,00 10,00 28/12/2003
002 001 200,00 10,00 28/12/2003
002 001 300,00 10,00 28/12/2003
002 001 100,00 10,00 28/12/2003
Edit1.Text= 100,00 // Obs:Valor Esperado Seria De 700,00
E Agora Jose :?: :?:
Gostei + 0
29/12/2003
Marco Salles
Gostei + 0
30/12/2003
Marco Salles
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)