|
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
brunocesarbarra Novato
Registrado: Quinta-Feira, 6 de Dezembro de 2012 Mensagens: 32
|
Enviada: Sex Dez 14, 2012 10:55 am Assunto: (resolvido)somar campo de uma tabela e jogar em uma variavel |
|
|
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 |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Sex Dez 14, 2012 11:02 am Assunto: |
|
|
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 |
|
|
felipekk Colaborador
Registrado: Quinta-Feira, 5 de Janeiro de 2012 Mensagens: 1531 Localização: Pirapora - MG
|
Enviada: Sex Dez 14, 2012 11:03 am Assunto: Re: somar campo de uma tabela e jogar em uma variavel |
|
|
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 |
|
|
brunocesarbarra Novato
Registrado: Quinta-Feira, 6 de Dezembro de 2012 Mensagens: 32
|
Enviada: Sex Dez 14, 2012 11:13 am Assunto: Re: somar campo de uma tabela e jogar em uma variavel |
|
|
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 |
|
|
felipekk Colaborador
Registrado: Quinta-Feira, 5 de Janeiro de 2012 Mensagens: 1531 Localização: Pirapora - MG
|
Enviada: Sex Dez 14, 2012 1:50 pm Assunto: Re: somar campo de uma tabela e jogar em uma variavel |
|
|
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 |
|
|
maizena Colaborador
Registrado: Terça-Feira, 20 de Março de 2012 Mensagens: 1497 Localização: Laguna - SC
|
Enviada: Sex Dez 14, 2012 1:53 pm Assunto: Re: somar campo de uma tabela e jogar em uma variavel |
|
|
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 |
|
|
neltonarsi Novato
Registrado: Terça-Feira, 15 de Outubro de 2013 Mensagens: 40
|
Enviada: Sáb Jun 20, 2015 8:13 pm Assunto: |
|
|
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 |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Sáb Jun 20, 2015 8:49 pm Assunto: |
|
|
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 |
|
|
neltonarsi Novato
Registrado: Terça-Feira, 15 de Outubro de 2013 Mensagens: 40
|
Enviada: Seg Jun 22, 2015 10:33 am Assunto: |
|
|
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 |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Seg Jun 22, 2015 1:52 pm Assunto: |
|
|
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 |
|
|
neltonarsi Novato
Registrado: Terça-Feira, 15 de Outubro de 2013 Mensagens: 40
|
Enviada: Seg Jun 22, 2015 2:38 pm Assunto: |
|
|
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 |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Seg Jun 22, 2015 3:59 pm Assunto: |
|
|
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 |
|
|
neltonarsi Novato
Registrado: Terça-Feira, 15 de Outubro de 2013 Mensagens: 40
|
Enviada: Seg Jun 22, 2015 4:06 pm Assunto: |
|
|
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 |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Seg Jun 22, 2015 5:07 pm Assunto: |
|
|
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 |
|
|
neltonarsi Novato
Registrado: Terça-Feira, 15 de Outubro de 2013 Mensagens: 40
|
Enviada: Seg Jun 22, 2015 5:14 pm Assunto: |
|
|
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 |
|
|
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|