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!!!