25/11/2005

Somar dados da Tabela String

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


Vagner.oliveira

Respostas

25/11/2005

Marcio.theis

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


Responder Citar

25/11/2005

Vagner.oliveira

[quote:ff41acf78b=´/]/]@t´]Vc já tentou efetuar um Cast no campo para efetuar a soma ???[/quote:ff41acf78b]

:arrow: Como eu utilizo este recurso :?:


Responder Citar

25/11/2005

Ricardo_ascii

Olá meu amigo,

Se eu entendi bem eu faria assim:

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

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


Ricardo


Responder Citar

25/11/2005

Vagner.oliveira

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


Responder Citar

25/11/2005

Christian_adriano

Olá colega tente assim:


    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.


Responder Citar

28/11/2005

Vagner.oliveira

Funcionou perfeitamente :lol:
Muito obrigado :wink:


Responder Citar

28/11/2005

Vagner.oliveira

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


Responder Citar

28/11/2005

Okama

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´


Responder Citar

28/11/2005

Okama

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)&93; := ´.´;

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


Responder Citar

28/11/2005

Vagner.oliveira

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


Responder Citar