Ir para conteúdo
Fórum Script Brasil
  • 0

Comando Sql (Resolvido)


rjcerri

Pergunta

Não sei como fazer isso, antes usava um while com a tabela, só que estou migrando para o firebird e tenho que usar query. Estou tentando pegar a soma de uma consulta.

ZQueryBaixaVenda.SQL.Clear;

ZQueryBaixaVenda.SQL.Add('select codigoproduto,descricao,cliente,quantidade from baixavenda where dataent between :per1 and :per2 and cliente=:nome and codigoproduto=:cod');

ZQueryBaixaVenda.ParamByName('per1').AsDateTime:=strtodatetime(maskedit1.Text);

ZQueryBaixaVenda.ParamByName('per2').AsDateTime:=strtodatetime(maskedit2.Text);

ZQueryBaixaVenda.ParamByName('nome').AsString:=edit2.Text;

ZQueryBaixaVenda.ParamByName('cod').AsInteger:=strtoint(edit1.Text);

ZQueryBaixaVenda.Open;

label6.Caption:=DataCliente.DMcliente.ZQueryBaixaVenda['descricao'];

label4.Caption:=inttostr(DataCliente.DMcliente.ZQueryBaixaVenda['quantidade']);

o label4 deveria receber essa soma, mas não tenho a menor idea.

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Olá rjcerri,

você pode usar o while na query tambem,

tipo assim:

var qtdade : Real;
begin
  ZQueryBaixaVenda.SQL.Clear;
  ZQueryBaixaVenda.SQL.Add('select codigoproduto,descricao,cliente,quantidade from baixavenda where dataent between :per1 and :per2 and cliente=:nome and codigoproduto=:cod');
  ZQueryBaixaVenda.ParamByName('per1').AsDateTime:=strtodatetime(maskedit1.Text);
  ZQueryBaixaVenda.ParamByName('per2').AsDateTime:=strtodatetime(maskedit2.Text);
  ZQueryBaixaVenda.ParamByName('nome').AsString:=edit2.Text;
  ZQueryBaixaVenda.ParamByName('cod').AsInteger:=strtoint(edit1.Text);
  ZQueryBaixaVenda.Open;

  qtdade := 0;
  ZQueryBaixaVenda.First;
  while not ZQueryBaixaVenda.EOF do begin
     qtdade := qtdade + ZQueryBaixaVenda.FieldByName('quantidade').Value;
     ZQueryBaixaVenda.Next;
  end;
  label4.Caption := FloatToStr(qtdade);
  label6.Caption := ZQueryBaixaVenda.FieldByName('descricao').AsString;
end;
ou você pode usar o "Select Sum" como o pdelphi falou, so que pra isso você precisara usar o "Group by" tambem, tipo assim:
var qtdade : Real;
begin
  ZQueryBaixaVenda.SQL.Clear;
  ZQueryBaixaVenda.SQL.Add('select codigoproduto, descricao, cliente, sum(quantidade)quantidade from baixavenda where dataent between :per1 and :per2 and cliente=:nome and codigoproduto=:cod Group By codigoproduto ,descricao ,cliente');
  ZQueryBaixaVenda.ParamByName('per1').AsDateTime:=strtodatetime(maskedit1.Text);
  ZQueryBaixaVenda.ParamByName('per2').AsDateTime:=strtodatetime(maskedit2.Text);
  ZQueryBaixaVenda.ParamByName('nome').AsString:=edit2.Text;
  ZQueryBaixaVenda.ParamByName('cod').AsInteger:=strtoint(edit1.Text);
  ZQueryBaixaVenda.Open;
  label4.Caption:=FloatToStr(ZQueryBaixaVenda.FieldByName('quantidade').AsFloat);
  label6.Caption:= ZQueryBaixaVenda.FieldByName('descricao').AsString;

end;

Abs. Progr'amador.

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado, mas no caso do while já me disseram que e lento e que a sql e mais rapido. Usando o select sum

a utima linha ficaria assim mesmo?

label4.Caption:=IntToStr(ZQueryBaixaVenda.FieldByName('quantidade').AsFloat);

Olá,

eu errei, inclusive já corrigi o tópico, na verdade ficaria assim:

label4.Caption:=FloatToStr(ZQueryBaixaVenda.FieldByName('quantidade').AsFloat);

No seu código eu só num entendi uma coisa, o uso disso: DataCliente.DMcliente.

Abs. Progr'amador.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,7k
×
×
  • Criar Novo...