GARANTIR DESCONTO

Fórum Duvida Sobre a Linguagem Sql Função Sum() #203145

27/12/2003

0

Amigos Esta Dúvida Já Está a Alguns Dias No Forum Mas Acho Que Não Estou Conseguindo Me Espressar Corretamente.
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

Marco Salles

Responder

Posts

27/12/2003

Pr.mas

Olá Marcos Sales,

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


Responder

Gostei + 0

27/12/2003

Carlosrm

marco, tente o seguinte:

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


Responder

Gostei + 0

27/12/2003

Marco Salles

Vou Tentar Depois. Agora Tenho Um Compromisso.Amanhã Tenho a Resposta. Mas Mesmo Assim Obrigado Pela Contribuição.

P:S Eu Prefiro Um Livro Em Que Eu Possa Ler e Acompanhar Passo a
Passo Cada Exemplo.

Boa Noite a Todos.....


Responder

Gostei + 0

28/12/2003

Marco Salles

Definivamente Não Consigo.Tem Dias Que Estoui Tentando. Será Que Vou Ter Que Ficar Com Meu Código ´While Not Query1.Eof do´ Ultrapassado. Vou Tentar Ser Mais Detalhista.Minha Tabela Tem Os Seguintes Campos: Codigo_Venda,Codigo_Vendador,Total,Desconto,
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....


Responder

Gostei + 0

28/12/2003

Edilcimar

o programa está reclamando sobre um campo chamado total que não existe, verifique o código ou se utilizou este código anteriormente talvez o mesmo não tenha sido apagado, mas de qualquer forma procure por algo chamado TOTAL pois é disto que o programa está reclamando, eu já tive problemas com alguns campos e as vezes eu os apagava fisicamente porém lógicamente o programa continuava com o mesmo


Responder

Gostei + 0

28/12/2003

Marco Salles

Ele Existe. Tanto é Que Se Eu Tirar da instrução Select a Propiedade Sum()
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().


Responder

Gostei + 0

28/12/2003

Edilcimar

se o campo existe verifique as aspas


Responder

Gostei + 0

28/12/2003

Marco Salles

se o campo existe verifique as aspas


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


Responder

Gostei + 0

28/12/2003

Marco Salles

Sobe


Responder

Gostei + 0

29/12/2003

Marco Salles

Sobe


Responder

Gostei + 0

29/12/2003

Aroldo Zanela

Colega,

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.


Responder

Gostei + 0

29/12/2003

Demian Soares

seguinte marco... vc esta tentando soma o valor de um campo da tabela de vendas... pelo que entendi..eu pergunto uma coisa o campo que vc esta querendo somar se chama mesmo TOTAL? la na tabela? pq se nao for total, mas um outro nome seria por isso a msg de total nao existe. primeiro... se vc fizer um teste basico com o comando sum nesta mesma query q vc fez coloque somente select sum(campo) as ´nomecriadoparaessasoma´ from tabela e veja o resultado...
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.


Responder

Gostei + 0

29/12/2003

Marco Salles

Acho Que Devo Se Um Único Mortal Que Não Consegui Usar a Propriedade Sum().O Programa Regrama Que o Cmpo Total Não Existe.
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 :?: :?:


Responder

Gostei + 0

29/12/2003

Marco Salles

sobe


Responder

Gostei + 0

30/12/2003

Marco Salles

Sobe


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar