× Linguagem de Programação ADVPL

Perguntas Dúvida while

Mais
10 anos 1 mês atrás #21943 por lsoliv
Dúvida while foi criado por lsoliv
Bom dia pessoal, estou fazendo um relatório e num determinado trecho do código, o while está dando loop infinito. Já quebrei a cabeça e não consigo ver o erro. Alguém pode me ajudar?

Obrigado,


DO WHILE _cARQTMP3->(!Eof())
DBSELECTAREA("TEMPO")
DBAPPEND()
IF !EMPTY(_cARQTMP3->D2_DOC)
_FIELD->DTSAIDA :=_cARQTMP3->D2_EMISSAO
_FIELD->SERIESAID :=_cARQTMP3->D2_SERIE
_FIELD->NFSAIDA :=_cARQTMP3->D2_DOC
_FIELD->QTDESAIDA :=_cARQTMP3->D2_QUANT
_FIELD->VUNITSAID :=_cARQTMP3->D2_PRCVEN
_FIELD->TESSAIDA :=_cARQTMP3->D2_TES
_FIELD->SUBLOTESA :=_cARQTMP3->D2_NUMLOTE
ENDIF

DBSELECTAREA("_cARQTMP3")
DBSKIP()
ENDDO

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 1 mês atrás #21944 por kanaamlrr
Respondido por kanaamlrr no tópico Dúvida while
Quando você executa esse comando:
DBSELECTAREA("_cARQTMP3")
Ele volta para o inicio do arquivo.

O ideal seria gravar o Recno do registro corrente antes de mudar a área para o append, e após o DBSELECTAREA("_cARQTMP3") utilizar uma dbgoto(recno) para posicionar a tabela no lugar certo.
Abraço!

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 1 mês atrás #21948 por lsoliv
Respondido por lsoliv no tópico Dúvida while
Olá Kanaãm.

Desculpe a ignorância, mas não trabalho com programação frequentemente e me perco nesses detalhes, mas poderia me explicar melhor?

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 1 mês atrás #21952 por kanaamlrr
Respondido por kanaamlrr no tópico Dúvida while
Leandro,
Dei uma olhada melhor no seu código e dá para resolver de uma forma bem mais simples.

Deveria ficar mais ou menos assim:
Local nRecno := 0
DO WHILE _cARQTMP3->(!Eof())
DBSELECTAREA("TEMPO")
DBAPPEND()
IF !EMPTY(_cARQTMP3->D2_DOC)
_FIELD->DTSAIDA :=_cARQTMP3->D2_EMISSAO
_FIELD->SERIESAID :=_cARQTMP3->D2_SERIE
_FIELD->NFSAIDA :=_cARQTMP3->D2_DOC
_FIELD->QTDESAIDA :=_cARQTMP3->D2_QUANT
_FIELD->VUNITSAID :=_cARQTMP3->D2_PRCVEN
_FIELD->TESSAIDA :=_cARQTMP3->D2_TES
_FIELD->SUBLOTESA :=_cARQTMP3->D2_NUMLOTE
ENDIF

_cARQTMP3->(DBSKIP())
ENDDO

dessa forma você não precisa setar a área antiga, pois toda vez que você dá um selectarea, o arquivo é posicionado no inicio, portanto o que estava acontecendo era:
faz append
volta o _cARQTMP3 para o 1º registro
da um skip e vai para o 2º e entra no loop
depois faz tudo de novo, por isso estava em loop infinito.
tenta dessa forma que eu coloquei e veja se dá certo
Abraço!

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 1 mês atrás #21953 por lsoliv
Respondido por lsoliv no tópico Dúvida while
Ainda continua em loop.

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 1 mês atrás - 10 anos 1 mês atrás #21954 por lalberto
Respondido por lalberto no tópico Dúvida while
Faz Assim

Local nRecno := 0
DO WHILE _cARQTMP3->(!Eof())

nRecno := _cARQTMP3->(Recno())

DBSELECTAREA("TEMPO")
DBAPPEND()
IF !EMPTY(_cARQTMP3->D2_DOC)
_FIELD->DTSAIDA :=_cARQTMP3->D2_EMISSAO
_FIELD->SERIESAID :=_cARQTMP3->D2_SERIE
_FIELD->NFSAIDA :=_cARQTMP3->D2_DOC
_FIELD->QTDESAIDA :=_cARQTMP3->D2_QUANT
_FIELD->VUNITSAID :=_cARQTMP3->D2_PRCVEN
_FIELD->TESSAIDA :=_cARQTMP3->D2_TES
_FIELD->SUBLOTESA :=_cARQTMP3->D2_NUMLOTE
ENDIF

DBSELECTAREA("_cARQTMP3")
_cARQTMP3->(dbGoTo(nRecno))

_cARQTMP3->(DBSKIP())
ENDDO

Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br
Ultima edição: 10 anos 1 mês atrás por lalberto.

Por favor Acessar ou Registrar para participar da conversa.

Tempo para a criação da página:0.119 segundos
Joomla templates by a4joomla