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: 20416
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 20416
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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