ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

(resolvido)somar campo de uma tabela e jogar em uma variavel

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
brunocesarbarra
Novato
Novato


Registrado: Quinta-Feira, 6 de Dezembro de 2012
Mensagens: 32

MensagemEnviada: Sex Dez 14, 2012 10:55 am    Assunto: (resolvido)somar campo de uma tabela e jogar em uma variavel Responder com Citação

Ola pessoal do active delphi! Bom dia a todos!

Preciso de um help ae, estou tentando somar os valores de um campo e jogar em uma variável quando é chamado o formulário, mas esta dando o seguinte erro:
query: Field 'Campo' not found
ta dizendo que o campo nao foi encontrado, e se eu deleto os campos ae do query não da erro, mas tambem não funciona

olhem o codigo, acho que minha lódica não esta correta
uso delphi 2010, mysql e zeos para manipular o banco



Código:
    with query do
    begin
        close;
        sql.Clear;
        TotalVenda:= sql.Add('select sum(subtotal) from itensVenda');
        execSql;
        open;
        edtTotalVenda.Text := floattostr(totalvenda);
    end;


alguem da um help ae por favor, agradeço desde ja.


Editado pela última vez por brunocesarbarra em Sex Dez 14, 2012 11:13 am, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Sex Dez 14, 2012 11:02 am    Assunto: Responder com Citação

Bom dia,

Experimente desta forma:

Código:
    with query do
     begin
         close;
         sql.Clear;
         sql.Add('select sum(subtotal) as Total from itensVenda');
         open;
         edtTotalVenda.Text := FieldByName('Total').DisplayText;
     end;


Espero que ajude.


Editado pela última vez por imex em Sex Set 29, 2023 11:39 am, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
felipekk
Colaborador
Colaborador


Registrado: Quinta-Feira, 5 de Janeiro de 2012
Mensagens: 1531
Localização: Pirapora - MG

MensagemEnviada: Sex Dez 14, 2012 11:03 am    Assunto: Re: somar campo de uma tabela e jogar em uma variavel Responder com Citação

brunocesarbarra escreveu:
Ola pessoal do active delphi! Bom dia a todos!

Preciso de um help ae, estou tentando somar os valores de um campo e jogar em uma variável quando é chamado o formulário, mas esta dando o seguinte erro:
query: Field 'Campo' not found
ta dizendo que o campo nao foi encontrado, e se eu deleto os campos ae do query não da erro, mas tambem não funciona

olhem o codigo, acho que minha lódica não esta correta
uso delphi 2010, mysql e zeos para manipular o banco



Código:
    with query do
    begin
        close;
        sql.Clear;
        TotalVenda:= sql.Add('select sum(subtotal) from itensVenda');
        execSql;
        open;
        edtTotalVenda.Text := floattostr(totalvenda);
    end;


alguem da um help ae por favor, agradeço desde ja.
Vc só precisa jogar o valor em uma variavel?
Tente mais ou menos assim:
Código:
var
TotalVenda : Real;
begin
//
TotalVenda := 0;
SuaQuery.First;
  while not SuaQuery.Eof do
    begin
    TotalVenda := TotalVenda + SuaQuery.fieldbyname('Campo').AsFloat;
    SuaQuery.Next;
    end;
  Edt.Text := FormatFloat ('R$ #,##0.00', TotalVenda); // Caso queria mostrar o valor em um Edit.
end;
Qualquer coisa posta ae.
Abraços.
_________________
"Esteja ligado em melhora contínua: hoje melhor do que ontem e pior do que amanhã."


Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
brunocesarbarra
Novato
Novato


Registrado: Quinta-Feira, 6 de Dezembro de 2012
Mensagens: 32

MensagemEnviada: Sex Dez 14, 2012 11:13 am    Assunto: Re: somar campo de uma tabela e jogar em uma variavel Responder com Citação

Opa felipe com o seu codigo deu certo agora!
antes eu estava tentando fazer esse while para somar tudo mas desisti e optei por sum mas tambem nao consegui


obrigado mesmo a todos vocês pela atenção, abraços e tenham uma otima tarde!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
felipekk
Colaborador
Colaborador


Registrado: Quinta-Feira, 5 de Janeiro de 2012
Mensagens: 1531
Localização: Pirapora - MG

MensagemEnviada: Sex Dez 14, 2012 1:50 pm    Assunto: Re: somar campo de uma tabela e jogar em uma variavel Responder com Citação

brunocesarbarra escreveu:
Opa felipe com o seu codigo deu certo agora!
antes eu estava tentando fazer esse while para somar tudo mas desisti e optei por sum mas tambem nao consegui


obrigado mesmo a todos vocês pela atenção, abraços e tenham uma otima tarde!
Opa Bruno que bom que deu certo.
Ótima tarde pra ti também.
Abraços.
_________________
"Esteja ligado em melhora contínua: hoje melhor do que ontem e pior do que amanhã."


Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
maizena
Colaborador
Colaborador


Registrado: Terça-Feira, 20 de Março de 2012
Mensagens: 1497
Localização: Laguna - SC

MensagemEnviada: Sex Dez 14, 2012 1:53 pm    Assunto: Re: somar campo de uma tabela e jogar em uma variavel Responder com Citação

brunocesarbarra escreveu:
Opa felipe com o seu codigo deu certo agora!
antes eu estava tentando fazer esse while para somar tudo mas desisti e optei por sum mas tambem nao consegui


obrigado mesmo a todos vocês pela atenção, abraços e tenham uma otima tarde!


Qual sua dificuldade em fazer o calculo utilizando o SUM?
_________________
Canal Delphi+ INSCREVA-SE: http://www.youtube.com/channel/UCnVF5ly5PRwZONE-U7xZM6w?feature=watch
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
neltonarsi
Novato
Novato


Registrado: Terça-Feira, 15 de Outubro de 2013
Mensagens: 40

MensagemEnviada: Sáb Jun 20, 2015 8:13 pm    Assunto: Responder com Citação

imex escreveu:
Bom dia,

Experimente desta forma:

Código:
    with query do
     begin
         close;
         sql.Clear;
         sql.Add('select sum(subtotal) as Total from itensVenda');
         open;
         edtTotalVenda.Text := FieldByName('Total').DisplayText;
     end;


Espero que ajude.


imex, sei que o post é antigo, mas estou precisando de uma ajuda a respeito deste assunto e, se possível, gostaria de contar com seu apoio.

Tenho uma tabela de contratos e gostaria de somar o valor de contratos e aditivos.

Para chegar a este objetivo, fiz estou tentando por meio do seguinte código:

with dmConexao.qrContratos do
begin
Close;
SQL.Clear;
SQL.Add('SELECT codContrato, valorContrato, SUM(valorContrato) as somaContrato FROM contratos ');
SQL.Add('GROUP BY numContrato ');
SQL.Add('ORDER BY codContrato ASC ');
Open;
ShowMessage('A soma dos Contratos e Aditivos de número ' +
FieldByName('numContrato').AsString + ' é: ' + FieldByName('somaContrato').DisplayText);
end;

O problema é que o campo somaContrato não é reconhecido. Aparece a seguinte mensagem: "qrContratos: Field 'somaContrato' not found."

Não estou conseguindo resolver este problema.

Agradeço a atenção.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Sáb Jun 20, 2015 8:49 pm    Assunto: Responder com Citação

Desconfio que esse erro ocorre em outra parte do seu código, talvez porque os Fields foram adicionados no componente dmConexao.qrContratos, entre eles o somaContrato, e a query utilizada nessa outra parte não retorna nenhum campo com esse nome.
Não entendi que valor você quer obter exatamente com essa query que você postou, mas acredito que ela não vai funcionar, pois existem campos que estão no Select sem funções de agregação (codContrato e valorContrato) e não estão no Group By.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
neltonarsi
Novato
Novato


Registrado: Terça-Feira, 15 de Outubro de 2013
Mensagens: 40

MensagemEnviada: Seg Jun 22, 2015 10:33 am    Assunto: Responder com Citação

imex escreveu:
Desconfio que esse erro ocorre em outra parte do seu código, talvez porque os Fields foram adicionados no componente dmConexao.qrContratos, entre eles o somaContrato, e a query utilizada nessa outra parte não retorna nenhum campo com esse nome.
Não entendi que valor você quer obter exatamente com essa query que você postou, mas acredito que ela não vai funcionar, pois existem campos que estão no Select sem funções de agregação (codContrato e valorContrato) e não estão no Group By.


Bom dia imex!

Na verdade eu realmente adicionei todos os Fields no componente mesmo, com exceção do "somaContrato", já que não existe este campo na tabela.

O que eu quero obter é o seguinte: Tenho um formulário de cadastro de contratos e aditivos e toda vez que eu incluir um aditivo para um contrato existente, gostaria de informar em um edit a soma dos contratos e aditivos.

Eu criei uma procedure chamada inicio que é chamada no evento on show do formulário, pois assim eu carrego as informações de contrato já cadastradas, então este select que postei está nesta procedure, mas eu retirei algumas informações para diminuir o tamanho do texto que eu ia postar.

Segue abaixo o código completo da procedure inicio.

procedure TfrmContratos.inicio;
begin
with dmConexao.qrContratos do
begin
Close;
SQL.Clear;
// SQL.Add('SELECT * FROM contratos ORDER BY codContrato ASC ');
SQL.Add('SELECT codContrato, status, dataCadastro, dataAtCadastro, codPessoa, codEmpresa, ');
SQL.Add('modLicitacao, tipoAcordo, numContrato, numAditivo, tipoAditivo, objeto, vigenciaDe, vigenciaAte, ');
SQL.Add('valorContrato, SUM(valorContrato) as somaContrato, horasTecnicas, valorHorasTecnicas, gestorContrato ');
SQL.Add('FROM contratos ');
SQL.Add('GROUP BY numContrato ');
SQL.Add('ORDER BY codContrato ASC ');
Open;

ShowMessage('A soma dos Contratos e Aditivos de número ' +
FieldByName('numContrato').AsString + ' é: ' + FieldByName('somaContrato').DisplayText);

end;
frmPublic.desabilitaCampos(frmContratos);
if (dmConexao.qrContratos.RecordCount < 1) then
begin
frmContratos.lblMensagem.Caption:= '';
frmContratos.btnPrimeiro.Enabled:= false;
frmContratos.btnAnterior.Enabled:= false;
frmContratos.btnProximo.Enabled:= false;
frmContratos.btnUltimo.Enabled:= false;
frmContratos.btnNovo.Enabled:= true;
frmContratos.btnAlterar.Enabled:= false;
frmContratos.btnPesquisar.Enabled:= false;
frmContratos.btnSalvar.Enabled:= false;
frmContratos.btnExcluir.Enabled:= false;
frmContratos.btnCancelar.Enabled:= false;
frmContratos.btnSair.Enabled:= true;
frmPublic.limpaCampos(frmContratos);
end
else if (dmConexao.qrContratos.RecordCount = 1) then
begin
frmContratos.lblMensagem.Caption:= Format('%d registro encontrado', [dmConexao.qrContratos.RecordCount]);
frmContratos.btnPrimeiro.Enabled:= false;
frmContratos.btnAnterior.Enabled:= false;
frmContratos.btnProximo.Enabled:= false;
frmContratos.btnUltimo.Enabled:= false;
frmContratos.btnNovo.Enabled:= true;
frmContratos.btnAlterar.Enabled:= true;
frmContratos.btnPesquisar.Enabled:= false;
frmContratos.btnSalvar.Enabled:= false;
frmContratos.btnExcluir.Enabled:= true;
frmContratos.btnCancelar.Enabled:= false;
frmContratos.btnSair.Enabled:= true;
preencheCampos;
end
else
begin
frmContratos.lblMensagem.Caption:= Format('%d registros encontrados', [dmConexao.qrContratos.RecordCount]);
frmContratos.btnPrimeiro.Enabled:= false;
frmContratos.btnAnterior.Enabled:= false;
frmContratos.btnProximo.Enabled:= true;
frmContratos.btnUltimo.Enabled:= true;
frmContratos.btnNovo.Enabled:= true;
frmContratos.btnAlterar.Enabled:= true;
frmContratos.btnPesquisar.Enabled:= true;
frmContratos.btnSalvar.Enabled:= false;
frmContratos.btnExcluir.Enabled:= true;
frmContratos.btnCancelar.Enabled:= false;
frmContratos.btnSair.Enabled:= true;
preencheCampos;
end;
end;

Se puder dar uma olhada e me ajudar a resolver ficarei grato, pois realmente não estou conseguindo obter esta informação.

Em tempo: Usando o mesmo código para a SELECT, funciona certinho direto no mysql.

Desde já, agradeço.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Seg Jun 22, 2015 1:52 pm    Assunto: Responder com Citação

Boa tarde,

Eu não tenho nenhuma experiência com o MySQL, mas sinceramente acredito que essa query não deveria funcionar:

Código:
SELECT codContrato, status, dataCadastro, dataAtCadastro, codPessoa, codEmpresa;
modLicitacao, tipoAcordo, numContrato, numAditivo, tipoAditivo, objeto, vigenciaDe, vigenciaAte,
valorContrato, SUM(valorContrato) as somaContrato, horasTecnicas, valorHorasTecnicas, gestorContrato 
FROM contratos
GROUP BY numContrato
ORDER BY codContrato ASC


Se funciona, acredito que seja o caso de adicionar o campo somaContrato na Fields Editor já que a query retorna esse campo.

Espero que ajude.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
neltonarsi
Novato
Novato


Registrado: Terça-Feira, 15 de Outubro de 2013
Mensagens: 40

MensagemEnviada: Seg Jun 22, 2015 2:38 pm    Assunto: Responder com Citação

imex escreveu:
Boa tarde,

Eu não tenho nenhuma experiência com o MySQL, mas sinceramente acredito que essa query não deveria funcionar:

Código:
SELECT codContrato, status, dataCadastro, dataAtCadastro, codPessoa, codEmpresa;
modLicitacao, tipoAcordo, numContrato, numAditivo, tipoAditivo, objeto, vigenciaDe, vigenciaAte,
valorContrato, SUM(valorContrato) as somaContrato, horasTecnicas, valorHorasTecnicas, gestorContrato 
FROM contratos
GROUP BY numContrato
ORDER BY codContrato ASC


Se funciona, acredito que seja o caso de adicionar o campo somaContrato na Fields Editor já que a query retorna esse campo.

Espero que ajude.


Acabei de testar novamente e a query funciona perfeitamente quando executada direto no mysql.

Já tentei fazer isso que você mencionou (adicionar o campo somaContrato na Fields Editor), porém o valor retornado é zero.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Seg Jun 22, 2015 3:59 pm    Assunto: Responder com Citação

E o campo somaContrato retornou o valor desejado quando você fez o teste direto no MySQL?
Uma curiosidade... qual versão do MySQL você está utilizando?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
neltonarsi
Novato
Novato


Registrado: Terça-Feira, 15 de Outubro de 2013
Mensagens: 40

MensagemEnviada: Seg Jun 22, 2015 4:06 pm    Assunto: Responder com Citação

imex escreveu:
E o campo somaContrato retornou o valor desejado quando você fez o teste direto no MySQL?
Uma curiosidade... qual versão do MySQL você está utilizando?


Quando faço esse select direto no mysql, ele retorna a soma de todos os contratos ordenados por grupo, conforme GROUP BY.

Meu mysql é versão 5.6.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Seg Jun 22, 2015 5:07 pm    Assunto: Responder com Citação

Aquele ShowMessage que você colocou logo depois do Open não está exibindo a soma correta para o número do contrato?
Deveria ser exibido o mesmo valor que a query retorna no MySQL.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
neltonarsi
Novato
Novato


Registrado: Terça-Feira, 15 de Outubro de 2013
Mensagens: 40

MensagemEnviada: Seg Jun 22, 2015 5:14 pm    Assunto: Responder com Citação

imex escreveu:
Aquele ShowMessage que você colocou logo depois do Open não está exibindo a soma correta para o número do contrato?
Deveria ser exibido o mesmo valor que a query retorna no MySQL.


Ai é que está o problema. Quando faço no MYSQL retorna o valor desejado, mas quando no Delphi (ShowMessage) o valor retornado é zero.

Coloquei o ShowMessage para testar, pois quando estiver funcionando perfeitamente, vou exibir esta informação em um edit.

Realmente não consegui entender porque esta dando este erro.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB