Página 1 de 1

ADO loop infinito

Enviado: 16 Jan 2023 16:13
por JoséQuintas
É a primeira vez um problema deste tipo:

Código: Selecionar todos

   WITH OBJECT cnSQL
      :cSQL := "SELECT CUGRUPO, CUCCUSTO FROM JPBACCUSTO ORDER BY CUGRUPO, CUCCUSTO"
      :Execute()
      DO WHILE ! :Eof()
         SayScroll( :String( "CUGRUPO" ) + "," + :String( "CUCCUSTO" ) )
         AAdd( aCCustoList, { :String( "CUGRUPO" ), "", .T. } )
         cGrupo := :String( "CUGRUPO" )
         DO WHILE cGrupo == :String( "CUGRUPO" ) .AND. ! Eof()
            AAdd( aCCustoList, { :String( "CUGRUPO" ), :String( "CUCCUSTO" ), .F. } )
            :MoveNext()
         ENDDO
      ENDDO
      :CloseRecordset()
   ENDWITH
Está entrando em loop infinito.
A rotina está em uso faz muito tempo.

É como se não entrasse no segundo DO WHILE.
E o segundo DO WHILE é o que faz o "skip" através do :MoveNext()

Código: Selecionar todos

      DO WHILE ! :Eof()
         cGrupo := :String( "CUGRUPO" )
         DO WHILE cGrupo == :String( "CUGRUPO" ) .AND. ! Eof()
            :MoveNext()
         ENDDO
      ENDDO
Não faz sentido o resultado de :String( "CUGRUPO" ) ser diferente num mesmo registro.

ADO loop infinito

Enviado: 16 Jan 2023 16:16
por JoséQuintas
Esqueçam....

Olhando direito o fonte:

:EOF()

EOF()

o segundo está analisando DBF, coisa que não existe.

ADO loop infinito

Enviado: 16 Jan 2023 18:23
por JoséQuintas
Comentário:

Não apaguei o post, pra mostrar que nem tudo aqui é festa.
TALVEZ, quando postei mais resumido, facilitou enxergar o erro, ao comparar os dois EOF() que estavam perto.

Comentário adicional:

:eof() usa o que foi declarado no WITH OBJECT, vale por cnSQL:Eof()
Acaba sendo menos coisa pra digitar no fonte.

ADO loop infinito

Enviado: 16 Jan 2023 21:42
por alxsts
Olá!

Percebi assim que bati o olho...

Acho que o Harbour deveria emitir um run time error "Work Area Not in Use"...