Clipper On Line • Ver Tópico - append from dos últimos 1000 registros de um arquivo

append from dos últimos 1000 registros de um arquivo

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

Moderador: Moderadores

 

append from dos últimos 1000 registros de um arquivo

Mensagempor juniorcamilo » 13 Jun 2019 09:58

bom dia!!
como pegar os ultimos 1000 registros de um arquivo com append?
Sele XNOT
append from NOTA.DBF for RECNO() > LASTREC()-1000


pelo DBU32 faz rapido!!!
mas pelo .EXE demora muito !!
Avatar de usuário

juniorcamilo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 343
Data de registro: 10 Nov 2006 08:12
Cidade/Estado: Pará
Curtiu: 29 vezes
Mens.Curtidas: 2 vezes

append from dos últimos 1000 registros de um arquivo

Mensagempor JoséQuintas » 13 Jun 2019 13:19

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18161
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

append from dos últimos 1000 registros de um arquivo

Mensagempor juniorcamilo » 14 Jun 2019 07:37

fiz um arranjo técnico!! melhorou muito !!!

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 de usuário

juniorcamilo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 343
Data de registro: 10 Nov 2006 08:12
Cidade/Estado: Pará
Curtiu: 29 vezes
Mens.Curtidas: 2 vezes

append from dos últimos 1000 registros de um arquivo

Mensagempor asimoes » 14 Jun 2019 09:05

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().

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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

append from dos últimos 1000 registros de um arquivo

Mensagempor asimoes » 14 Jun 2019 09:18

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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

append from dos últimos 1000 registros de um arquivo

Mensagempor JoséQuintas » 14 Jun 2019 09:37

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.

   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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18161
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

append from dos últimos 1000 registros de um arquivo

Mensagempor juniorcamilo » 14 Jun 2019 14:02

asimoes escreveu:
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!!!
Avatar de usuário

juniorcamilo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 343
Data de registro: 10 Nov 2006 08:12
Cidade/Estado: Pará
Curtiu: 29 vezes
Mens.Curtidas: 2 vezes




Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 7 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro