Soma simples dando errado.

Delphi

24/03/2015

Boa tarde a todos.

Estou fazendo um loop onde incremento um valor, esse valor é uma string onde eu converto em integer e depois somo 1.
Oque acontece é que quando chega no numero 10, a soma para de funcionar. Sempre me retorna o numero 10.

Oque será q eu fiz de errado ???

O trecho do código e esse ...


COD_1 := inttostr(strtoint(COD_1) + 1);


no loop vai bem até 9 depois do 10 fica repetindo o 10 .....

Fico no aguardo dos colegas.
Vilson Pereira

Vilson Pereira

Curtidas 0

Melhor post

Marcos P

Marcos P

24/03/2015

"Se for o caso, ajuste a query convertendo o retorno para integer..."

Sim... use o cast !
GOSTEI 1

Mais Respostas

Marcos P

Marcos P

24/03/2015

Olá,

A ideia é somar na mesma variável (COD_1 ) ?

Você tentou usar uma outra variável como inteiro, apenas para controlar o loop ?

Consegue colocar o trecho do código com o loop ?
GOSTEI 0
Vilson Pereira

Vilson Pereira

24/03/2015

Opa Marcos P.

o loop é enorme, mas essa parte deste incremento é só isso msm ...
é bem assim .

eu carrego uma var tipo string com um valor string '0' por exemplo ... depois converto pra integer e vou só incrementando em cada passagem do loop.
tipo

while not eof do
begin
COD_1 := inttostr(strtoint(COD_1) + 1);
next;
end;

tem mais coisas no loop mas nada q afete essa soma. o estranho é q vai certinho até o 9 ... depois do 10 começa a repetir e não soma mais ... não vai para o 11 ....
GOSTEI 0
Marcos P

Marcos P

24/03/2015

Por ser string, o Delphi está truncando em apenas um byte !

Você consegue controlar esse contador por uma variável declarada com integer ?
( e talvez, fora do loop, voltar o controle pra string... se necessário ? )
GOSTEI 0
Vilson Pereira

Vilson Pereira

24/03/2015

Vou ver aqui oq da pra fazer e já retorno.

o engraçado é que eu coloquei um showmessage logo após o trecho e ele me retorna 0 depois 1 depois 2 ate 9 ... depois fica retornando 10 ... mas se retornou 10 então não ta só um byte ... senão seria 0 não é ?

já retorno o resultado ....
GOSTEI 0
Vilson Pereira

Vilson Pereira

24/03/2015

Marcos ... é coisa do satanas ...

eu fiz assim ....

COD_1_INTEGER := strtoint(COD_1);
COD_1_INTEGER := COD_1_INTEGER + 1;

e o efeito é o mesmo ... chega no 10 e começa a repetir ... doidera ....
GOSTEI 0
Marcos P

Marcos P

24/03/2015

Você comentou que o loop é extenso... será que não tem algo ajustado indevidamente o valor de COD_1 ?

"Limpe" o código dentro do loop ( comentando-o, por exemplo... ) e deixe apenas o controle do contador e a condição de controle do eof...

O problema persiste ?
GOSTEI 0
Vilson Pereira

Vilson Pereira

24/03/2015

Marcos ... descobri onde esta o erro ...
é que eu carrego a variavel pegando o valor do banco de dados ... ai eu uso uma sql ...

'select max(COD_1)as COD_1 from CADASTRO';

ela volta certo até o 9 depois ta voltando sempre 9 ... ai no incremento sempre vai dar 10 mesmo .... agora a duvida é outra ... porque essa sql não ta funcionado ? lembrando que o campo no banco de dados é varchar ... será q é isto ? o select max não funciona pra campo varchar ????
GOSTEI 0
Marcos P

Marcos P

24/03/2015

Teste direto no banco... existem outros valores maiores que nove ?

Se for o caso, ajuste a query convertendo o retorno para integer...
GOSTEI 0
Vilson Pereira

Vilson Pereira

24/03/2015

Sim ... tem valores maiores q 9 ... por exemplo o 10 ... mas sempre me retorna o 9 ....

Será q tenho q usar o cast ????
GOSTEI 0
Vilson Pereira

Vilson Pereira

24/03/2015

Agora foi Marcos ...

eu fiz assim ...

'select max(cast(COD_1 as integer))as COD_1 from CADASTRO';

e agora a sequencia continua certinho ...

Valeu msm ....

Resolvido ....
GOSTEI 0
POSTAR