Somar valores

13/03/2006

Olá programadores,

Tenho uma tabela Paradox com um campo tipo N (Numérico - Float) e sempre que o formulário é aberto, uma rotina de soma dos valores já lançados é acionada.

while not dbContabil.eof do begin
mValor := mValor + dbContabil.FieldByName(´Valor´).AsFloat;
dbContabil.Next;
end;

Acontece que a base está recebendo muitos registros e a rotina desta forma demora a processar a soma e toda vez que o formulário e chamado o operador tem de esperar um bom tempo antes de começar a trabalhar.
Tem com alterar esta rotina usando ´sum´ em tabela paradox ?

Qualquer ajuda será muito bem vinda.

Obrigado.


Zangado

Respostas

13/03/2006

Paullsoftware

Bem, vc pode tentar usar uma Query e fazer assim:

Select Sum(nValor) as SomaTotal
Where AlgumaCondicao


espero ter ajudado :wink:


Responder Citar

13/03/2006

Zangado

Estou tendo desta forma, más sempre me retorna 0,00.

with qSoma do begin
Close;
SQL.Text := ´Select Sum(cast(Valor as numeric(10,2))) as pEntradas, Sum(cast(Valor as numeric(10,2))) as pSaidas from CaixaLanca.db´;
Open;
end;
ShowMessage(FormatFloat(´#,.00´, pEntradas)+´ ´+FormatFloat(´,.00´, pSaidas));


Responder Citar

13/03/2006

Zangado

Estou tentando desta forma, más sempre retorna 0,00.
 with qSoma do begin
     Close;
     SQL.Text := ´Select Sum(cast(Valor as numeric(10,2))) as pEntradas, Sum(cast(Valor as numeric(10,2))) as pSaidas from CaixaLanca.db´;
     Open;
  end;
  ShowMessage(FormatFloat(´#,.00´, pEntradas)+´ ´+FormatFloat(´,.00´, pSaidas));


O que está errado neste código ???


Responder Citar

13/03/2006

Marco Salles

engraçado zangado , não devia nen retornar , de fato não devia nen compilar , a não ser que voce tenha definido uma variavel
var
pSaidas ,pEntradas


bem , eu não sei o proque da instrução cast que vo ce esta usando mas voce pode tentar assim

with qSoma do begin 
     Close; 
     SQL.Text := ´Select Sum(cast(Valor as numeric(10,2))) as pEntradas, Sum(cast(Valor as numeric(10,2))) as pSaidas from CaixaLanca.db´; 
     Open; 
  end; 
  ShowMessage(FormatFloat(´#,.00´,
qSoma.FieldByName(´pEntradas´).AsCurrency)+´ ´+
FormatFloat(´,.00´, qSoma.FieldByName(´pSaidas´).AsCurrency); 


DO jeito que voce fez , ele esta retornando o conteudo de alguma variavel pEntradas e pSaidas , que apesar de ter o mesmo nome não tem nada a ver com o field da qSoma


Responder Citar

14/03/2006

Zangado

Ainda não consegui. O objeto SQL está lincado em uma tabela Caixa (Paradox). Nesta Tabela existe o campo ´Valor´. pEntradas é uma variável da classe ´Real´. Na instrução SQL do objeto tenho ´Select * from Caixa´.

A rotina é:
with qSoma do begin
   Close;
   SQL.Text := ´Select Sum(Valor) as pEntradas from Caixa.db´;
   Open;
end;
  ShowMessage(FormatFloat(´#,.00´, qSoma.FieldByName(´Valor´).AsCurrency));



Sempre recebo a mensagem de erro: qSoma: Campo valor não encontrado.

Na verdade o que pretendo é passar o resultado para a variável ´pEntradas´ e apresenta-la no ShowMessage para ver se está funcionando e a partir dai contruir a rotina.

No caso seria:

ShowMessage(FormatFloat(´,.00´, pEntradas));



Antes eu recebia 0,00 como resultado da soma. Agora recebo: qSoma: campo valor não encontrado.

Toda ajuda será muito bem vinda.

Obrigado.


Responder Citar

14/03/2006

Zangado

Ainda não consegui. O objeto SQL está lincado em uma tabela Caixa (Paradox). Nesta Tabela existe o campo ´Valor´. pEntradas é uma variável da classe ´Real´. Na instrução SQL do objeto tenho ´Select * from Caixa´.

A rotina é:
with qSoma do begin
   Close;
   SQL.Text := ´Select Sum(Valor) as pEntradas from Caixa.db´;
   Open;
end;
  ShowMessage(FormatFloat(´#,.00´, qSoma.FieldByName(´Valor´).AsCurrency));



Sempre recebo a mensagem de erro: qSoma: Campo valor não encontrado.

Na verdade o que pretendo é passar o resultado para a variável ´pEntradas´ e apresenta-la no ShowMessage para ver se está funcionando e a partir dai contruir a rotina.

No caso seria:

ShowMessage(FormatFloat(´,.00´, pEntradas));



Antes eu recebia 0,00 como resultado da soma. Agora recebo: qSoma: campo valor não encontrado.

Toda ajuda será muito bem vinda.

Obrigado.


Responder Citar

14/03/2006

Zangado

Ainda não consegui. O objeto SQL está lincado em uma tabela Caixa (Paradox). Nesta Tabela existe o campo ´Valor´. pEntradas é uma variável da classe ´Real´. Na instrução SQL do objeto tenho ´Select * from Caixa´.

A rotina é:
with qSoma do begin
   Close;
   SQL.Text := ´Select Sum(Valor) as pEntradas from Caixa.db´;
   Open;
end;
  ShowMessage(FormatFloat(´#,.00´, qSoma.FieldByName(´Valor´).AsCurrency));



Sempre recebo a mensagem de erro: qSoma: Campo valor não encontrado.

Na verdade o que pretendo é passar o resultado para a variável ´pEntradas´ e apresenta-la no ShowMessage para ver se está funcionando e a partir dai contruir a rotina.

No caso seria:

ShowMessage(FormatFloat(´,.00´, pEntradas));



Antes eu recebia 0,00 como resultado da soma. Agora recebo: qSoma: campo valor não encontrado.

Toda ajuda será muito bem vinda.

Obrigado.


Responder Citar

14/03/2006

Zangado

Ainda não consegui. O objeto SQL está lincado em uma tabela Caixa (Paradox). Nesta Tabela existe o campo ´Valor´. pEntradas é uma variável da classe ´Real´. Na instrução SQL do objeto tenho ´Select * from Caixa´.

A rotina é:
with qSoma do begin
   Close;
   SQL.Text := ´Select Sum(Valor) as pEntradas from Caixa.db´;
   Open;
end;
  ShowMessage(FormatFloat(´#,.00´, qSoma.FieldByName(´Valor´).AsCurrency));



Sempre recebo a mensagem de erro: qSoma: Campo valor não encontrado.

Na verdade o que pretendo é passar o resultado para a variável ´pEntradas´ e apresenta-la no ShowMessage para ver se está funcionando e a partir dai contruir a rotina.

No caso seria:

ShowMessage(FormatFloat(´,.00´, pEntradas));



Antes eu recebia 0,00 como resultado da soma. Agora recebo: qSoma: campo valor não encontrado.

Toda ajuda será muito bem vinda.

Obrigado.


Responder Citar

14/03/2006

Zangado

Ainda não consegui. O objeto SQL está lincado em uma tabela Caixa (Paradox). Nesta Tabela existe o campo ´Valor´. pEntradas é uma variável da classe ´Real´. Na instrução SQL do objeto tenho ´Select * from Caixa´.

A rotina é:
with qSoma do begin
   Close;
   SQL.Text := ´Select Sum(Valor) as pEntradas from Caixa.db´;
   Open;
end;
  ShowMessage(FormatFloat(´#,.00´, qSoma.FieldByName(´Valor´).AsCurrency));



Sempre recebo a mensagem de erro: qSoma: Campo valor não encontrado.

Na verdade o que pretendo é passar o resultado para a variável ´pEntradas´ e apresenta-la no ShowMessage para ver se está funcionando e a partir dai contruir a rotina.

No caso seria:

ShowMessage(FormatFloat(´,.00´, pEntradas));



Antes eu recebia 0,00 como resultado da soma. Agora recebo: qSoma: campo valor não encontrado.

Toda ajuda será muito bem vinda.

Obrigado.


Responder Citar

14/03/2006

Marco Salles

[b:9b063b53fd]Olhe o que voce esta fazendo[/b:9b063b53fd]

with qSoma do begin 
   Close; 
   SQL.Text := ´Select Sum(Valor) as pEntradas from Caixa.db´; 
   Open; 
end; 
  ShowMessage(FormatFloat(´#,.00´, qSoma.FieldByName(´Valor´).AsCurrency)); 


[b:9b063b53fd]Olhe com é o certo [/b:9b063b53fd]

with qSoma do begin 
   Close; 
   SQL.Text := ´Select Sum(Valor) as pEntradas from Caixa.db´; 
   Open; 
end; 
  ShowMessage(FormatFloat(´,.00´, qSoma.FieldByName(´pEntradas´).AsCurrency)); 



Responder Citar

14/03/2006

Zangado

Está dando erro: ´Invalid field name: valor´ e no entanto é este o nome do campo na tabela Caixa onde está lincado o objeto SQL.

Uma dúvida: pEntradas é uma variável declarada no sistema e não o nome do campo de uma tabela. Então:
ShowMessage(FormatFloat(´#,.00´, qSoma.FieldByName(´pEntradas´).AsCurrency));


Me parece que aqui você está tratando pEntradas como se fosse o nome do campo de qSoma (o nome do objeto SQL). Ou estou errado?

Se puder me ajudar...


Responder Citar

14/03/2006

Marco Salles

Me parece que aqui você está tratando pEntradas como se fosse o nome do campo de qSoma (o nome do objeto SQL). Ou estou errado? Se puder me ajudar...


Apesar de terem o mesmo nome se tratam de tipos diferentes .. Mas nada impede que voce escolha outro Nome para ser atribuido com o operador AS

Está dando erro: ´Invalid field name: valor´ e no entanto é este o nome do campo na tabela Caixa onde está lincado o objeto SQL.


Voce disse do erro que esta dando e jura que existe este campo na tabela Então va no Editor de Camps e Limpe-o , qualquer campo declarado aqui , que não for usado na query o compilador reclamara

Pode -se fazer assim

with qSoma do begin Close; SQL.Text := ´Select Sum(Valor) as NomeQualquer from Caixa.db´; Open; end; ShowMessage(FormatFloat(´#,.00´, qSoma.FieldByName(´NomeQualquer´).AsCurrency));


Lembre-se de deixar o editor de Campos ´PELADO´


Responder Citar

15/03/2006

Zangado

Obrigado Marco Salles. Agora funcionou sem problemas.


Responder Citar