append from dos últimos 1000 registros de um arquivo

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
juniorcamilo
Usuário Nível 3
Usuário Nível 3
Mensagens: 343
Registrado em: 10 Nov 2006 09:12
Localização: Pará

append from dos últimos 1000 registros de um arquivo

Mensagem 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 !!
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

append from dos últimos 1000 registros de um arquivo

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
juniorcamilo
Usuário Nível 3
Usuário Nível 3
Mensagens: 343
Registrado em: 10 Nov 2006 09:12
Localização: Pará

append from dos últimos 1000 registros de um arquivo

Mensagem 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
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

append from dos últimos 1000 registros de um arquivo

Mensagem 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
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

append from dos últimos 1000 registros de um arquivo

Mensagem 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. }
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

append from dos últimos 1000 registros de um arquivo

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
juniorcamilo
Usuário Nível 3
Usuário Nível 3
Mensagens: 343
Registrado em: 10 Nov 2006 09:12
Localização: Pará

append from dos últimos 1000 registros de um arquivo

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