Array
(
)

Somar valores

Zangado
   - 13 mar 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.


Paullsoftware
   - 13 mar 2006

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

#Código

Select Sum(nValor) as SomaTotal
Where AlgumaCondicao


espero ter ajudado :wink:


Zangado
   - 13 mar 2006

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));


Zangado
   - 13 mar 2006

Estou tentando desta forma, más sempre retorna 0,00.
#Código


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 ???


Marco Salles
   - 13 mar 2006

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
#Código

var
pSaidas ,pEntradas


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

#Código
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


Zangado
   - 14 mar 2006

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 é:
#Código


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:

#Código

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.


Zangado
   - 14 mar 2006

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 é:
#Código


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:

#Código

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.


Zangado
   - 14 mar 2006

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 é:
#Código


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:

#Código

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.


Zangado
   - 14 mar 2006

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 é:
#Código


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:

#Código

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.


Zangado
   - 14 mar 2006

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 é:
#Código


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:

#Código

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.


Marco Salles
   - 14 mar 2006

Olhe o que voce esta fazendo

#Código

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


Olhe com é o certo

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



Zangado
   - 14 mar 2006

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:
#Código


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...


Marco Salles
   - 14 mar 2006


Citação:
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


Citação:
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


Citação:
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´


Zangado
   - 15 mar 2006

Obrigado Marco Salles. Agora funcionou sem problemas.