Página 1 de 1

append from dos últimos 1000 registros de um arquivo

Enviado: 13 Jun 2019 09:58
por juniorcamilo
bom dia!!
como pegar os ultimos 1000 registros de um arquivo com append?

Código: Selecionar todos

Sele XNOT
append from NOTA.DBF for RECNO() > LASTREC()-1000
pelo DBU32 faz rapido!!!
mas pelo .EXE demora muito !!

append from dos últimos 1000 registros de um arquivo

Enviado: 13 Jun 2019 13:19
por JoséQuintas
juniorcamilo escreveu:pelo DBU32 faz rapido!!! mas pelo .EXE demora muito !!
Pelo DBU é com ou sem índice, é pela rede ou local, é com usuários simultâneos ou não?
Isso tudo faz diferença, principalmente se a concorrência de bloqueios for grande.

append from dos últimos 1000 registros de um arquivo

Enviado: 14 Jun 2019 07:37
por juniorcamilo
fiz um arranjo técnico!! melhorou muito !!!

Código: Selecionar todos

for nCont = 1000 to 1 step -1
    append record nCont from &CLDADOS.ARQNOT&mArq..DBF
    @ 23,00 say padc("Registro:"+alltrim(str(nCont)),80)
next

append from dos últimos 1000 registros de um arquivo

Enviado: 14 Jun 2019 09:05
por asimoes
Junior,

Boa solução,

Só um pitaco na sua solução para evitar "A aplicação não está respondendo" talvez nem aconteça, é só uma ajudinha usando a função hrb_DoEvents().

Código: Selecionar todos

for nCont = 1000 to 1 step -1
   append record nCont from &CLDADOS.ARQNOT&mArq..DBF for {||HRB_DOEVENTS(), .T. }
   @ MaxRow(),00 say padc("Registro:" + alltrim(str(nCont)), 80)
next
   
#pragma BEGINDUMP

#include "windows.h"

#include "hbapi.h"

#include "olectl.h"

#include "time.h"

HB_FUNC( HRB_DOEVENTS )
{
   MSG Msg;

   while( PeekMessage( ( LPMSG ) &Msg, 0, 0, 0, PM_REMOVE ) )
   {
      TranslateMessage( &Msg );
      DispatchMessage( &Msg );
   }
}

#pragma ENDDUMP

append from dos últimos 1000 registros de um arquivo

Enviado: 14 Jun 2019 09:18
por asimoes
Pelo o que eu entendi você quer os últimos 1000 registros da tabela, então não seria isso que você postou?, considerando agora o código abaixo

append from APA02.DBF for RECNO() > LASTREC()-1000 .AND. {||HRB_DOEVENTS(), .T. }

append from dos últimos 1000 registros de um arquivo

Enviado: 14 Jun 2019 09:37
por JoséQuintas
juniorcamilo escreveu:fiz um arranjo técnico!! melhorou muito !!!
Se é assim, a demora é pra posicionar e não pro append.
Talvez fazendo "manual" melhore.
Depende das estruturas serem iguais.

Código: Selecionar todos

   SELECT origem
   IF RecNo() ) < 1000
      GOTOTOP
   ELSE
      GOTO ( LastRec() - 1000 )
   ENDIF
   DO WHILE ! Eof()
      Destino->( RecAppend() )
      FOR nCont = 1 TO FCount()
         Destino->( FieldPut( nCont, origem->( FieldGet( nCont ) ) ) )
      NEXT
      SKIP
   ENDDO
...
FUNCTION RecAppend()
   // sua rotina de incluir
   RETURN NIL

append from dos últimos 1000 registros de um arquivo

Enviado: 14 Jun 2019 14:02
por juniorcamilo
asimoes escreveu:

Código: Selecionar todos

for nCont = 1000 to 1 step -1
   append record nCont from &CLDADOS.ARQNOT&mArq..DBF for {||HRB_DOEVENTS(), .T. }
   @ MaxRow(),00 say padc("Registro:" + alltrim(str(nCont)), 80)
next
   
#pragma BEGINDUMP

#include "windows.h"

#include "hbapi.h"

#include "olectl.h"

#include "time.h"

HB_FUNC( HRB_DOEVENTS )
{
   MSG Msg;

   while( PeekMessage( ( LPMSG ) &Msg, 0, 0, 0, PM_REMOVE ) )
   {
      TranslateMessage( &Msg );
      DispatchMessage( &Msg );
   }
}

#pragma ENDDUMP
teria como me explicar oq faz e o que é "#pragma BEGINDUMP" não tenho esse conhecimento!!!