Array
(
)

Somar dados da Tabela String

Vagner.oliveira
   - 25 nov 2005

Pessoal, é o seguinte, tenho uma tabela PARADOX com os campos ValGasto e ValRecebido que são Alpha gostaria de somar estes campos. Tentei com o Sum do SQL mas da erro, mismatch expression acredito que seja pelo fato do campo ser string, então como poderia resolver este problema :?:


Marcio.theis
   - 25 nov 2005

Vc já tentou efetuar um Cast no campo para efetuar a soma ???


Vagner.oliveira
   - 25 nov 2005


Citação:
/]@t´]Vc já tentou efetuar um Cast no campo para efetuar a soma ???


:arrow: Como eu utilizo este recurso :?:


Ricardo_ascii
   - 25 nov 2005

Olá meu amigo,

Se eu entendi bem eu faria assim:

------------------------------------------
var
d : double;

begin
d:=strtofloat(valgasto) + strtofloat(valrecibo);


Ricardo


Vagner.oliveira
   - 25 nov 2005

desculpe mas não me expressei bem.

tenho uma tabela com estes campos, ValGasto e ValRecebido:
Ex;

Nome ValGasto ValRecebido
fulano 10,00 50,00
ciclano 5,00 0,00
beltrano 0,00 10,00
Total 15,00 60,00

gostaria de somar o total de cada campo utilizando um filtro em SQL, pois esse resultado é feito por mês


Christian_adriano
   - 25 nov 2005

Olá colega tente assim:


#Código

with Query1 do begin
Close;
SQL.Text := ´select Sum(cast(Campo1 as numeric(10,2))) as Soma1, Sum(cast(Campo2 as numeric(10,2))) as Soma2 from dbTabela.db´;
Open;
end;



Espero ter ajudado.

[]´s.


Vagner.oliveira
   - 28 nov 2005

Funcionou perfeitamente :lol:
Muito obrigado :wink:


Vagner.oliveira
   - 28 nov 2005


Citação:
Funcionou perfeitamente :lol:
Muito obrigado :wink:


Ele não somou corretamente quando coloquei o valor com virgula.
Quando troquei para ponto ele somou corretamente, só que deu erro, dizendo que não é um ponto flutuante válido.

Como contornar este erro :?:


Okama
   - 28 nov 2005

A melhor forma seria você alterar o tipo de campo para number, caso não seja possível, faça a varredura do arquivo e some os valores, dessa forma você terá o controle do campo e poderá identificar falhas de digitação como ´1.000,00´ ou ´1 000.00´


Okama
   - 28 nov 2005

#Código

Var S: String;
VALOR : double;
begin

VALOR := 0;
ProgressBar1.Max := TABELA.RecordCount;
ProgressBar1.Position := 0;
ProgressBar1.Step := 1;

While not TABELA.EOF do begin
S := TABELA.FieldByName(´Campo1´).asString;

//Remove espaços
While pos(´ ´, S) > 0 do
Delete(S, Pos(´ ´,S), 1);

//Remove ponto de milhar
While pos(´.´, S) > 0 do
Delete(S, Pos(´.´,S), 1);

//Substitui virgula por ponto decimal
While pos(´,´, S) > 0 do
S[Pos(´,´,S)] := ´.´;

//Testa se S é ponto flutuante
try
StrToFloat( S );
Except On EConvertError do begin
ShowMessage(´Erro convertendo "´ + S + ´"´ );
exit;
end;
end;

//Acumula Valor
VALOR := VALOR + StrToFloat( S );

//Progresso (pra distrair o usuário, rs)
ProgreessBar1.Stepit;

//Avança Tabela
TABELA.Next;

end;



Você pode usar NCampos, NValores e diversos critérios para conversão de dados.


Vagner.oliveira
   - 28 nov 2005

:x Uma coisa tão simples que não me dei conta. :oops: :oops:
Agora funcionou legal, valewwwwssssss :P