Somar determinado campo da uma tabela

12/02/2004

0

Olá pessoal estou com um pequeno problema como somar um determinado campo de um tabela e o resultado em outro campo

Seguinte: uso o delphi 6 e minha tabela e paradox

Na minha tabela (reccond) eu tenho os campos código, apto, ref, valor desconto, TOTAL

O que eu queria era somar todos o valores do campo “TOTAL” e mostrar o resultado em um determinado dbedit12 que corresponde ao campo “TOTALGERAL1” na minha tabela

Obs. Sou iniciante no caso da dica em SQL gostaria de saber detalhes sobre o que colocar na propriedade SQL da query tipo: select *from tabela

E o código em que evento do dbedit12
Tipo: se for no onexit, onenter,oncreate etc....

procedure TF_rectaxa.dbedit12enter(Sender: TObject);
begin
Query1.Close;
Query1.SQL.Clear;

Já pesquisei no fórum, tem algumas coisas falando sobre isso, mais tudo muito vago e incompleto

Agradeço aos Veteranos do Delphi, e aos iniciantes também que já tenha passado por isso e puder me ajudar


Wagner

Wagner

Responder

Posts

12/02/2004

Sremulador

acho que deve ser assim
Select Sum(código apto, ref, valor, desconto) as total


Responder

12/02/2004

Wagner

Não entendi bem ou tambem não expliquei direito,

eu quero apenas somar os valores do campo TOTAL
E quero tambem o codigo a ser colocado no evento
Por favor se puder leia novamente o meu topico


Responder

12/02/2004

Marco Salles

1)Voce Quer Apenas Somar Os Valores Do Campo Total ????
2) Voce Quer o Código a Se Colocado No Evento ???
3)Voce Quer Mostrar o Resultado Em Um DbEdit ???
4)Voce Quer Saber Qual O Evento Do DbEdit ???

Vamos Responder as Perguntas Sem Que as Mesmas Estejam Em Ordem.

3) É Melhor Voce Escolher Um Edit Para Mostrar o Resultado e Não Um DbEdit

4) O Evento É Voce Que Escolhe. Qual o Momento Da Sua Aplicação Que Voce Quer Mostrar a
Soma.? Pode Ser Na Abertura Do Form (Evento OnShow) , Pode Ser No Envento On Click Do
Botão Etc... A Hora Que Voce Deseja Mostrar a Soma No Edit Não Necessariamente Está
Relacionado a Um Evento Do Edit. Então Vamos Determinar Que Seu Projeto Tenha Um Botão
Chamado Somar.....

1)e 2) Respondido Simultaneamente....

Inicialmente Insira Um Query e Um DataSource No Form...Ligue-os Como Se Estivesse Fazendo Como No Componente Table... Há Porem Um Diferença Crucial. No Table tem a Propiedade Table1.Name , O Query Não. Por Sua Vez Ele Tem a Propiedade Sql, Como Voce Mencionou Anteriormente. Então Vamos Fazer Em Duas Etapas.

1)No Sql Do Query Escreva : Select *From NOMEDASUATABELA . OK
2)Na Propiedade Active Do Query Coloque Em True . Ok
3)Veja Se Não Deu Nenhuma Mensagem De Erro. Se Ocorreu é Porque Houve Erro No Passo 2
4)Se OK No Passo 3 No Evento On Show Do Form Ou Num
Evento Onclick Do Botão Somar Escreva o Seguinte Código

procedure TForm1.FormShow(Sender: TObject);
var
Soma:Integer;
begin
Query1.Close;
Query1.SQL.Clear;
query1.SQL.Add(´Select Sum(Total) TotalGeral1 From Nome_Tabela´);
Query1.Prepare;
query1.open;
Soma:=Query1.FieldByName(´TotalGeral1´).AsInteger;
Edit1.Text:=IntToStr(Valor);
end;

Obs) o Campo Total Deve Ser Numérico

Obs) Não PRECISSA GUARDAR O RESULTADO EM NENHUM CAMPO DA TABELA,POIS ESTE RESULTADO É UNICO E VOCE TEM ACESSO A ELE A QUALQUER HORA... AGORA SE VOCE QUER GUARDAR NA TABELA A SOMA PASSO A PASSO (LINHA POR LINHA) DO CAMPO TOTAL, AÍ JÁ É OUTRA HISTÓRIA E NÃO É COM A FUNÇÃO SUM() QUE SE RESOLVE ISTO

5) Teste e Nos Comuinique Do Resultado


Responder

13/02/2004

Aavanco

Wagner,

De uma olhada na Matéria Agregates no ClientDataSet do Guinther Pauli no endereço http://www.clubedelphi.com.br/portal/
Achei muito boa e limpa a solução da Matéria e eu acho que é bem o que você está precisando.


Responder

13/02/2004

Wagner

Primeiro gostaria de agradecer a atenção de todo, valeu mesmo pelas dicas postadas, :D
Aavanco, não encontrei o que eu queria onde você indicou, mais acabei achando alguma coisa falando sobre usercontrol que eu também estava atrás..valeu... :D

Grande Marcos Sales, você como sempre resolvendo meus problemas, funcionou perfeitamente. So uma questão como faço para ficar como o valor do edit de 200 para 200,00 a direita do edit.
Tentei, edit1 := formatfloat (#,......mais não me lembro do resto :lol:

Estou como outro problema, não sei se abro outro tópico ou resolvermos por aqui mesmo. :lol:
Seguinte:

Nesta mesma tabela o que eu queria também era fechar o mês informar a data de 01/01/2004 a 31/01/2004 e me mostrar o resultado da soma do campo TOTAL da tabela daí eu fechava o mês nenhum valor mais entraria nesse mês e jogar par um relatorio
Ah! quando eu puder ficar mais tempo conectado vou te manda aquele projeto :wink:


Responder

13/02/2004

Marco Salles

Fico Feliz Em Ter-lo Ajudado . Vamos ao Segundo Passo. 1) Quanto a Formatação Tente a Instrução :edit1.text:=formatfloat(´#,0.00´,Soma)+´ R$´; 2) Para Somar Para Uma Data Específica Voce Tem Que Ter Um Campo Data Na Sua Tabela.. Voce Diz : &8220;Na minha tabela (reccond) eu tenho os campos código, apto, ref, valor desconto, TOTAL Na minha tabela (reccond)&8221;.Como Podemos Notar ESTA FALTANDO O CAMPO DATA, Na Sua Tabela. O Campo Data é o CAMPO ONDE NOS IREMOS DETERMINAR UMA CONDIÇÃO&8221;. Sem Este Campo Acredito Não Ser Possível Uma Seleção Por Data. Acrescente Este Campo e nos Comunique , Falei...


Responder

14/02/2004

Wagner

Ops! Esqueci de colocar eu tenho um campo na tabela apos ref. dt.pagamento

Fica assim oh!

Codigo
apto
ref
dt.pagamento
taxa
desconto
total

Ah! quanto aquele codigo, não deu certo
edit1.text:=formatfloat(´#,0.00´,Soma)+´ R$´; 2)

Fim de semana esta começando estamos aqui

um abraço


Responder

14/02/2004

Marco Salles

Fico Feliz Em Ter-lo Ajudado . Vamos ao Segundo Passo. [color=red:7e1f61e2a7]1) [/color:7e1f61e2a7]Quanto a Formatação Tente a Instrução :edit1.text:=formatfloat(´#,0.00´,Soma)+´ R$´; ........... [color=red:7e1f61e2a7]2) [/color:7e1f61e2a7]Para Somar Para Uma Data Específica Voce Tem Que Ter Um Campo Data Na Sua Tabela.. Voce .......
Note Que o 2 Não Faz Parte Da Instrução De Formatação . Realmente Da Maneira Que Escrevi Deu Para Confundir...

Istrução Correta: edit1.text:=formatfloat(´,0.00´,Soma)+´ R$´;

Obs:) Quanto a Outra Dúvida Daqui a Pouco Eu Respondo.


Responder

14/02/2004

Marco Salles

Instrução Correta: edit1.text:=formatfloat(´#,0.00´,Soma)+´ R$´;

Vamos a Segunda Parte :´Nesta mesma tabela o que eu queria também era fechar o mês informar a data de 01/01/2004 a 31/01/2004 e me mostrar o resultado da soma do campo TOTAL da tabela daí eu fechava o mês nenhum valor mais entraria nesse mês e jogar par um relatorio ´.etc.

Inclua No Seu Form Dois MaskEdit, Eles Serão Usados Para Informar o Período Que Voce Quer Efetuar a Soma. Pode Ser No Inicio e Fim Do Mes
Como Qualquer Outra Data...Pode Se Criar Tambem Uma Rotina Para Incluir a Data Inicio Do mes Corrente e Fim Do Mes Corrente Automaticamente No MaskEdit. Isto Porém é Outra História....Vamos ao Código:
Num Evento Qualquer( Desde Que os Valores Das Datas Estejam Previamente Definidos) Escreva O Seguinte Código:

var
Soma:Currency;
Begin
Query1.Close;
Query1.Sql.Clear;
query1.SQL.Add(´Select Sum(Total) TotalGeral1 From Nome_Tabela´);
Query1.Sql.Add(´Where dt.pagamento >= :DataInicial´);
Query1.ParamByName(´DataInicial´).Asdate:=StrTodate(MaskEdit1.Text);
Query1.Sql.Add(´and dt.pagamento <=:DataFinal´);
Query1.ParamByName(´DataFinal´).Asdate:=StrTodate(MaskEdit2.Text);
Query1.Prepare;
Query1.Open;
Soma:=Query1.FieldByName(´TotalGeral´).AsCurrency;
edit1.text:=formatfloat(´#,0.00´,Soma)+´ R$´;
end;

Obs: O Campo Total é Do Tipo Currency :!: :!: :!:

Para Imprimir Num Relatório. Já Fizemos Isto Anteriormente, Onde Nos Usamos Uma Seleção Por Data...Para Imprimir Num Relatório, Alem Da Soma Os Outros Campos Da Tabela , Voce Deve Ter Um Outro Query Com As Mesmes Condições Do Query 1. A Exceção Ocorre Na Linha Do Select: Para O Query 2 No Mesmo Evento Escreva:

//ESCREVER NO MESMO EVENTO

Query2.Close;
Query2.Sql.Clear;
query2.SQL.Add(´Select *From Nome_Tabela´);
Query2.Sql.Add(´Where dt.pagamento >= :DataInicial´);
Query2.ParamByName(´DataInicial´).Asdate:=StrTodate(MaskEdit1.Text);
Query2.Sql.Add(´and dt.pagamento <=:DataFinal´);
Query2.ParamByName(´DataFinal´).Asdate:=StrTodate(MaskEdit2.Text);
Query2.Prepare;
Query2.Open;
end;

[color=red:cfe4a64690]O Que Voce Deve Levar Para O Relatório :?: ..Os Campos Definidos Pela QUERY2, O PERIODO DEFINIDOS PELOS MASKEDIT(Isto Nos Ja Fizemos) E O VALOR DO EDIT1 (QUE RECEBEU A SOMA)

obs importante:Se Voce Quiser Mostrar O Resultado Previamente Num DBGRID , Deve Incluir Um DataSource e Linka-lo Ao QUEREY2 E NÃO AO
QUERY1....[/color:cfe4a64690]

Finaliso , Nada Deve Dar Erro...Esta Tudo Conforme O Combinado...A Semana Esta Começando :lol: , Mas Acaba Rápido :cry: Falei....


Responder

14/02/2004

Wagner

Marco desculpe as minhas perguntas, deve ser falta de segurança em mim mesmo :lol:

veja so!

Criar 2 editmask no forma :?: no form que eu já estou usando para receber o total geral :?:

Criar em qualquer evento aquele codigo :idea: no evento do form :?:
Já tenho uma query1 para o total geral da dica anterior uso essa mesma query ou tenho que inserir outra :?:


Responder

14/02/2004

Marco Salles

Marco desculpe as minhas perguntas, deve ser falta de segurança em mim mesmo :lol: veja so! Criar 2 editmask no forma :?: no form que eu já estou usando para receber o total geral :?: Criar em qualquer evento aquele codigo :idea: no evento do form :?: Já tenho uma query1 para o total geral da dica anterior uso essa mesma query ou tenho que inserir outra :?:


1) Na Verdade é Criar Dois MaskEdit No Form Que Voce Está Usando Para Calcular O TTTALGERAL1. É Onde Voce Vai Inserir as Datas. Esta Inserção Pode Ser Feita Manualmente Ou Automaticamente...

2)Vamos Começar No Evento Onclick De Um Botão... Para Criar Num Evento Do Form Voce Tem Que Estar Com as Datas Iniciais e Finais Pre-Selecionadas. Aí Voce Depende De Uma Rotina Para Estas Datas. Como Voce Ainda Não Tem Essa Rotina, Vamos Colocar o Código No Evento OnClick De Um Botão...

3)Voce Tem Que Ter São Dois Query... Query1 e Query2... O Código De Ambos Devem Neste Exemplo Específico Estarem No Mesmo Evento e Terem as Mesmas Condições(DataInical e DtaFinal Iguais)...Se Voce Não Quiser No Relatorio Os Outros Campos Da Tabela, Não Precisa De Dois Querys. MAS SE VOCE QUISER UM RELATÓRIO COMPLETO, É RECOMENDAVEL USAR DOIS QUERYS

4)Não Tem Que Pedir Desculpa Por Perguntar... Tem Que Fazer Dar Certo. Eu Só Fico Chateado Quando Dá Errado :( ... Para Não Dar Errado Tem Que Tirar ás Dúvidas :idea: ... Mais Alguma :?:


Responder

14/02/2004

Wagner

:D Grande Marco vamos por parte, a 1º parte funcionou legal.
So uma duvida como faço nesse codigo ou de uma outra forma preparar os meus Maskedit´s para ___/___/_____

procedure TF_rectaxa.BitBtn12Click(Sender: TObject);
var
Soma:Currency;
Begin
Query1.Close;
Query1.Sql.Clear;
query1.SQL.Add(´Select Sum(Total) TotalGeral1 From reccond´);
Query1.Sql.Add(´Where datapag >= :DataInicial´);
Query1.ParamByName(´DataInicial´).Asdate:=StrTodate(MaskEdit1.Text);
Query1.Sql.Add(´and datapag <=:DataFinal´);
Query1.ParamByName(´DataFinal´).Asdate:=StrTodate(MaskEdit2.Text);
Query1.Prepare;
Query1.Open;
Soma:=Query1.FieldByName(´TotalGeral1´).AsCurrency;
edit1.text:= ´ R$´ + formatfloat(´#,0.00´,Soma);
end;

Ate aqui tudo bem.

So não entendi bem a 2º parte onde voce escreveu

[color=red:681374d1c3]Para Imprimir Num Relatório. Já Fizemos Isto Anteriormente, Onde Nos Usamos Uma Seleção Por Data...Para Imprimir Num Relatório, Alem Da Soma Os Outros Campos Da Tabela , Voce Deve Ter Um Outro Query Com As Mesmes Condições Do Query 1. A Exceção Ocorre Na Linha Do Select: Para O Query 2 No Mesmo Evento Escreva:

//ESCREVER NO MESMO EVENTO

Query2.Close;
Query2.Sql.Clear;
query2.SQL.Add(´Select *From Nome_Tabela´);
Query2.Sql.Add(´Where dt.pagamento >= :DataInicial´);
Query2.ParamByName(´DataInicial´).Asdate:=StrTodate(MaskEdit1.Text);
Query2.Sql.Add(´and dt.pagamento <=:DataFinal´);
Query2.ParamByName(´DataFinal´).Asdate:=StrTodate(MaskEdit2.Text);
Query2.Prepare;
Query2.Open;
end; [/color:681374d1c3]


Responder

14/02/2004

Marco Salles

1) Para Preparar MaskEdit elecione a Porpiedade EditMask Do Objeto MaskEdit. Abre o IMPUT MASK EDITOR... Selecione DATE ...LOGO A SEGUIR Complete o Código Do Imput Mask Onde Previamnte Esta Inscrito : !99/99/00;1;_ Por !99/99/9999;1;_ e Desmarque a Opção
Save Literal Caracters.. No Fim o ImputMask Deve Ficar Com Esta Cara:
[color=red:57e6b1bc26]!99/99/9999;0;_[/color:57e6b1bc26]


2) Tente Fazer O Seguinte. Neste Form Coloque Um DbGrid e Um DataSource e Link o DataSource No Query1 e O DbGrid1 No DataSource...
Selecione a Propiedade DatabaseNames Do Query e Na Sua Propiedade Sql
Digite : Select *From reccond´.. Ative a Propiedade Active Do Query e Veja O Acontece. Se Der Tudo Certo Rode o Aplicativo e Me Comunique O Que Vai Ocorrer Na Execução Do Aplicativo..Estou Aguardando


Responder

14/02/2004

Wagner

Ops! :lol: Eu tinha esquecido dessa propriedade

Valos Lá:

O que aconteceu é que esta mostrando no dbgrid so valor Totalgeral,
Era isso mesmo que era para acontecer :?:


Responder

14/02/2004

Marco Salles

Seu Relátorio Só Vai Ter o Valor Total :?: E Os Registros Dos Outro Campos. Voce Não Vai Querer Apresenta-los :?:


Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar