Fórum ibquery sum #364337

26/09/2008

0

Ola caros colegas

Estou com uma difilculdade , estou usando uma ibquery para somar uma determinada coluna do meu db, fiz ela assim:

with DMCalc.IBQSomaPrincipal do
begin
close;
sql.Clear;
sql.add(´select sum(valor) as totalp from db_06´);/// where coddev=´+DM.IBTbRequeridosCODDEV.AsString);
open;
end;

Entao o campo totalp eu criei um compa calc para receber o valor da soma mas na hora de jogar para um dbedit ou edit ou maskedit ou label , nao aparace o valor .

Não sei o que fazer ou nao sei o que fiz de errado , pois no editor sql do dbexpert da certo .

se alguem puder ajudar .

Obrigado

Uso Delphi 7 + FireBird 2.0


Pattarelli

Pattarelli

Responder

Posts

26/09/2008

Emerson Nascimento

como você está pegando o valor do campo?


Responder

Gostei + 0

26/09/2008

Pattarelli

Ola,

(Valor) e o nome do campo, estou pegando errado ?

eu nao tinha mexido ainda com o sum e a primeira vez .


Responder

Gostei + 0

26/09/2008

Emerson Nascimento

edit.text := DMCalc.IBQSomaPrincipal.Fields[0].AsString;
edit.text := DMCalc.IBQSomaPrincipal.FieldByName(´totalp´).AsString;


Responder

Gostei + 0

27/09/2008

Pattarelli

Valew Emersom

Deu certo agora, muito obrigado.


Responder

Gostei + 0

27/09/2008

Pattarelli

Valew Emersom Deu certo agora, muito obrigado.



Entao to eu aqui de novo , o passo anterior deu certo com a ajuda do Emerson.
Agora acontece o seguinte , tenho que somar 3 campos calculados da mesma tabela que crio na hora que gero do dbgrid, alguem pode me ajudar pois fica dando erro que nao acha o campo, ate ai sei que é por ser um campo que nao existe fisicamente na tabela como faco.

Alguem pode me ajudar..


Responder

Gostei + 0

27/09/2008

Emerson Nascimento

publique o código que você está usando...


Responder

Gostei + 0

27/09/2008

Pattarelli

publique o código que você está usando...


Eu uso o codigo abaixo no CalcFields do ibquery para calcular a correcao monetaria, juros e honorarios, depois somo tudo em um ultimo campo calculado, tenho que apresentar a soma das colunas unico campo nao calculado e o do valor principal.


seria isto o que vc pediu?




procedure TDMCalc.IBQBuscaTitulosCalcFields(DataSet: TDataSet);
Var descr : String;
vljurdia, ttjurdia: real;
Dia, Mes, Ano, Dia1, Mes1, Ano1: word;
begin
DecodeDate(date,Ano1,Mes1,Dia1);
with dmcalc.IBQBuscaIndiceAtual do
begin
close;
sql.Clear;
sql.add(´select * from db_07 where (mes_c=:dtfim) and (ano_c=:dtini)´);
sql.add(´order by mes_c,ano_c´);
ParamByName(´dtini´).Value:=ano1;
ParamByName(´dtfim´).Value:=mes1;
open;
if IsEmpty then
begin
descr:=´Não existe Comemoração no dia de Hoje´;
end;
end;
if FrmCadRequeridos.ComboBox2.ItemIndex=0 then
begin
IBQBuscaTitulosfator2.Value:=IBQBuscaIndiceAtualBTN_TR.Value;
end;
if FrmCadRequeridos.ComboBox2.ItemIndex=1 then
begin
IBQBuscaTitulosfator2.Value:=IBQBuscaIndiceAtualINDICE2.Value;
end;
if FrmCadRequeridos.ComboBox2.ItemIndex=2 then
begin
IBQBuscaTitulosfator2.Value:=IBQBuscaIndiceAtualMENS_IGPM.Value;
end;
if FrmCadRequeridos.ComboBox2.ItemIndex=3 then
begin
IBQBuscaTitulosfator2.Value:=IBQBuscaIndiceAtualMENS_INPC.Value;
end;
if FrmCadRequeridos.ComboBox2.ItemIndex=4 then
begin
IBQBuscaTitulosfator2.Value:=IBQBuscaIndiceAtualMENS_IPCA.Value;
end;
if FrmCadRequeridos.ComboBox2.ItemIndex=5 then
begin
IBQBuscaTitulosfator2.Value:=IBQBuscaIndiceAtualIPC_FGV.Value;
end;
if FrmCadRequeridos.ComboBox2.ItemIndex=6 then
begin
IBQBuscaTitulosfator2.Value:=IBQBuscaIndiceAtualINCC.Value;
end;
if FrmCadRequeridos.ComboBox2.ItemIndex=7 then
begin
IBQBuscaTitulosfator2.Value:=IBQBuscaIndiceAtualIPC_FIPE.Value;
end;
if FrmCadRequeridos.ComboBox2.ItemIndex=8 then
begin
IBQBuscaTitulosfator2.Value:=IBQBuscaIndiceAtualICV_DIEESE.Value;
end;
if FrmCadRequeridos.ComboBox2.ItemIndex=9 then
begin
IBQBuscaTitulosfator2.Value:=IBQBuscaIndiceAtualIND_TRAB.Value;
end;
if FrmCadRequeridos.ComboBox2.ItemIndex=10 then
begin
IBQBuscaTitulosfator2.Value:=IBQBuscaIndiceAtualIND_SM.Value;
end;
if FrmCadRequeridos.ComboBox2.ItemIndex=11 then
begin
IBQBuscaTitulosfator2.Value:=IBQBuscaIndiceAtualM_BTN_IPCR.Value;
end;
if FrmCadRequeridos.ComboBox2.ItemIndex=12 then
begin
IBQBuscaTitulosfator2.Value:=IBQBuscaIndiceAtualTJSP.Value;
end;
if FrmCadRequeridos.ComboBox2.ItemIndex=13 then
begin
IBQBuscaTitulosfator2.Value:=IBQBuscaIndiceAtualTJMG.Value;
end;
if FrmCadRequeridos.ComboBox2.ItemIndex=14 then
begin
IBQBuscaTitulosfator2.Value:=IBQBuscaIndiceAtualCLIQ.Value;
end;
if FrmCadRequeridos.ComboBox2.ItemIndex=15 then
begin
IBQBuscaTitulosfator2.Value:=IBQBuscaIndiceAtualDLOF.Value;
end;

///// Indice por Vecto

DecodeDate(IBQBuscaTitulosVECTO.Value,Ano,Mes,Dia);
with IBQBuscaIndice do
begin
close;
sql.Clear;
sql.add(´select * from db_07 where (mes_c=:dtfim) and (ano_c=:dtini)´);
sql.add(´order by mes_c,ano_c´);
ParamByName(´dtini´).Value:=ano;
ParamByName(´dtfim´).Value:=mes;
open;
if IsEmpty then
begin
descr:=´Não existe Comemoração no dia de Hoje´;
end;
if FrmCadRequeridos.ComboBox2.ItemIndex=0 then
begin
IBQBuscaTitulosfator1.Value:=IBQBuscaIndiceBTN_TR.Value;
end;
if FrmCadRequeridos.ComboBox2.ItemIndex=1 then
begin
IBQBuscaTitulosfator1.Value:=IBQBuscaIndiceINDICE2.Value;
end;
if FrmCadRequeridos.ComboBox2.ItemIndex=2 then
begin
IBQBuscaTitulosfator1.Value:=IBQBuscaIndiceMENS_IGPM.Value;
end;
if FrmCadRequeridos.ComboBox2.ItemIndex=3 then
begin
IBQBuscaTitulosfator1.Value:=IBQBuscaIndiceMENS_INPC.Value;
end;
if FrmCadRequeridos.ComboBox2.ItemIndex=4 then
begin
IBQBuscaTitulosfator1.Value:=IBQBuscaIndiceMENS_IPCA.Value;
end;
if FrmCadRequeridos.ComboBox2.ItemIndex=5 then
begin
IBQBuscaTitulosfator1.Value:=IBQBuscaIndiceIPC_FGV.Value;
end;
if FrmCadRequeridos.ComboBox2.ItemIndex=6 then
begin
IBQBuscaTitulosfator1.Value:=IBQBuscaIndiceINCC.Value;
end;
if FrmCadRequeridos.ComboBox2.ItemIndex=7 then
begin
IBQBuscaTitulosfator1.Value:=IBQBuscaIndiceIPC_FIPE.Value;
end;
if FrmCadRequeridos.ComboBox2.ItemIndex=8 then
begin
IBQBuscaTitulosfator1.Value:=IBQBuscaIndiceICV_DIEESE.Value;
end;
if FrmCadRequeridos.ComboBox2.ItemIndex=9 then
begin
IBQBuscaTitulosfator1.Value:=IBQBuscaIndiceIND_TRAB.Value;
end;
if FrmCadRequeridos.ComboBox2.ItemIndex=10 then
begin
IBQBuscaTitulosfator1.Value:=IBQBuscaIndiceIND_SM.Value;
end;
if FrmCadRequeridos.ComboBox2.ItemIndex=11 then
begin
IBQBuscaTitulosfator1.Value:=IBQBuscaIndiceM_BTN_IPCR.Value;
end;
if FrmCadRequeridos.ComboBox2.ItemIndex=12 then
begin
IBQBuscaTitulosfator1.Value:=IBQBuscaIndiceTJSP.Value;
end;
if FrmCadRequeridos.ComboBox2.ItemIndex=13 then
begin
IBQBuscaTitulosfator1.Value:=IBQBuscaIndiceTJMG.Value;
end;
if FrmCadRequeridos.ComboBox2.ItemIndex=14 then
begin
IBQBuscaTitulosfator1.Value:=IBQBuscaIndiceCLIQ.Value;
end;
if FrmCadRequeridos.ComboBox2.ItemIndex=15 then
begin
IBQBuscaTitulosfator1.Value:=IBQBuscaIndiceDLOF.Value;
end;
end;

if IBQBuscaTitulosfator1.Value=0 then
begin
Showmessage(´Não existe Valor no Fator de Correção na data de vecto, tente outra vez´);
IBQBuscaTitulosfator1.Value:=1;
end;
if IBQBuscaTitulosfator2.Value=0 then
begin
Showmessage(´Não existe Valor no Fator de Correção na data corrente, tente outra vez´);
IBQBuscaTitulosfator2.Value:=1;
end;

IBQBuscaTitulosCorrecao.Value:=(round((IBQBuscaTitulosVALOR.Value/IBQBuscaTitulosfator1.Value)*IBQBuscaTitulosfator2.Value))-IBQBuscaTitulosVALOR.Value;
IBQBuscaTitulosdias.Value:=(date-IBQBuscaTitulosVECTO.Value);
vljurdia:=strtoint(FrmCadRequeridos.ComboBox3.Text)/30;
ttjurdia:=((IBQBuscaTitulosdias.AsInteger*vljurdia)/100);
IBQBuscaTitulosJuros.Value:=((round((IBQBuscaTitulosVALOR.Value/IBQBuscaTitulosfator1.Value)*IBQBuscaTitulosfator2.Value))*ttjurdia);
IBQBuscaTitulosHono.Value:=(((round((IBQBuscaTitulosVALOR.Value/IBQBuscaTitulosfator1.Value)*IBQBuscaTitulosfator2.Value)+IBQBuscaTitulosJuros.Value)*(strtoint(FrmCadRequeridos.ComboBox4.Text)))/100);
IBQBuscaTitulosVlTotal.Value:=(IBQBuscaTitulosVALOR.Value+IBQBuscaTitulosCorrecao.Value+IBQBuscaTitulosJuros.Value+IBQBuscaTitulosHono.Value);


end;


Responder

Gostei + 0

30/09/2008

Emerson Nascimento

eu reduzi um pouco seu código pra meu melhor entendimento...
procedure TDMCalc.IBQBuscaTitulosCalcFields(DataSet: TDataSet);
const
  campos array[0..15] of string = (´BTN_TR´, ´INDICE2´, ´MENS_IGPM´,
    ´MENS_INPC´, ´MENS_IPCA´, ´IPC_FGV´, ´INCC´, ´IPC_FIPE´, ´ICV_DIEESE´,
    ´IND_TRAB´, ´IND_SM´, ´M_BTN_IPCR´, ´TJSP´, ´TJMG´, ´CLIQ´, ´DLOF´);
var
  icampo: byte;
  descr : String;
  vljurdia, ttjurdia: real;
  Dia, Mes, Ano, Dia1, Mes1, Ano1: word;
begin
  DecodeDate(date, Ano1, Mes1, Dia1);

  with dmcalc.IBQBuscaIndiceAtual do
  begin
    close;
    sql.Clear;
    sql.add(´select * from db_07 where (mes_c=:dtfim) and (ano_c=:dtini)´);
    sql.add(´order by mes_c,ano_c´);
    ParamByName(´dtini´).Value:=ano1;
    ParamByName(´dtfim´).Value:=mes1;
    open;

    if IsEmpty then
      descr:=´Não existe Comemoração no dia de Hoje´;
  end;

  icampo := FrmCadRequeridos.ComboBox2.ItemIndex;

  IBQBuscaTitulosfator2.Value := IBQBuscaIndiceAtual.FieldByName(campos[icampo]).Value;

  ///// Indice por Vencto
  DecodeDate(IBQBuscaTitulosVECTO.AsDateTime, Ano, Mes, Dia);

  with IBQBuscaIndice do
  begin
    close;
    sql.Clear;
    sql.add(´select * from db_07 where (mes_c=:dtfim) and (ano_c=:dtini)´);
    sql.add(´order by mes_c,ano_c´);
    ParamByName(´dtini´).Value:=ano;
    ParamByName(´dtfim´).Value:=mes;
    open;

    if IsEmpty then
      descr:=´Não existe Comemoração no dia de Hoje´;
  end;

  IBQBuscaTitulosfator1.Value := IBQBuscaIndice.FieldByName(campos[icampo]).Value;

  if IBQBuscaTitulosfator1.Value = 0 then
  begin
    Showmessage(´Não existe Valor no Fator de Correção na data de vecto, tente outra vez´);
    IBQBuscaTitulosfator1.Value := 1;
  end;

  if IBQBuscaTitulosfator2.Value = 0 then
  begin
    Showmessage(´Não existe Valor no Fator de Correção na data corrente, tente outra vez´);
    IBQBuscaTitulosfator2.Value := 1;
  end;

  IBQBuscaTitulosCorrecao.Value := (round((IBQBuscaTitulosVALOR.Value / IBQBuscaTitulosfator1.Value) * IBQBuscaTitulosfator2.Value)) - IBQBuscaTitulosVALOR.Value;

  IBQBuscaTitulosdias.Value := (date - IBQBuscaTitulosVECTO.Value);

  vljurdia := strtofloatdef(FrmCadRequeridos.ComboBox3.Text,0) / 30;
  ttjurdia := ((IBQBuscaTitulosdias.AsInteger * vljurdia) / 100);

  IBQBuscaTitulosJuros.Value := ((round((IBQBuscaTitulosVALOR.Value / IBQBuscaTitulosfator1.Value) * IBQBuscaTitulosfator2.Value)) * ttjurdia);

  IBQBuscaTitulosHono.Value := (((round((IBQBuscaTitulosVALOR.Value / IBQBuscaTitulosfator1.Value) * IBQBuscaTitulosfator2.Value) + IBQBuscaTitulosJuros.Value) * (strtointdef(FrmCadRequeridos.ComboBox4.Text,0))) / 100);

  IBQBuscaTitulosVlTotal.Value := (IBQBuscaTitulosVALOR.Value + IBQBuscaTitulosCorrecao.Value + IBQBuscaTitulosJuros.Value + IBQBuscaTitulosHono.Value);

end;

mas você não disse qual é o real problema. onde você está com dificuldade na atribuição dos valores.


Responder

Gostei + 0

08/10/2008

Pattarelli

Desculpe a demora para responder ,

A minha dificuldade e que presciso fazer uma soma de cada campo na pesquisa

tipo o campo valor eu consegui, acho q porque ele e um campo da tabela
os outros (hono,juros,correcao,total) sao campos calculados onde eu nao estou conseguindo somar som o sum.

Sera que espliquei certo

Muito o brigado pela ajuda.

t+


Responder

Gostei + 0

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

Aceitar