Somar determinado campo da uma tabela
12/02/2004
0
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
Posts
12/02/2004
Sremulador
Select Sum(código apto, ref, valor, desconto) as total
12/02/2004
Wagner
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
12/02/2004
Marco Salles
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
13/02/2004
Aavanco
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.
13/02/2004
Wagner
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:
13/02/2004
Marco Salles
14/02/2004
Wagner
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
14/02/2004
Marco Salles
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.
14/02/2004
Marco Salles
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....
14/02/2004
Wagner
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 :?:
14/02/2004
Marco Salles
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 :?:
14/02/2004
Wagner
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]
14/02/2004
Marco Salles
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
14/02/2004
Wagner
Valos Lá:
O que aconteceu é que esta mostrando no dbgrid so valor Totalgeral,
Era isso mesmo que era para acontecer :?:
14/02/2004
Marco Salles
Clique aqui para fazer login e interagir na Comunidade :)