Soma simples dando errado.
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.
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
Curtidas 0
Melhor post
Marcos P
24/03/2015
"Se for o caso, ajuste a query convertendo o retorno para integer..."
Sim... use o cast !
Sim... use o cast !
GOSTEI 1
Mais Respostas
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 ?
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
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 ....
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
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 ? )
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
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 ....
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
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 ....
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
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 ?
"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
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 ????
é 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
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...
Se for o caso, ajuste a query convertendo o retorno para integer...
GOSTEI 0
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 ????
Será q tenho q usar o cast ????
GOSTEI 0
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 ....
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