Set Filter demorando para filtrar registros pela estação

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

Moderador: Moderadores

Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Set Filter demorando para filtrar registros pela estação

Mensagem por Kapiaba »

Mister Quintas, agora, para o senhor "brincar" com FIVEWIN the best! hahaha.

Código: Selecionar todos

// C:\FWH\SAMPLES\FILQUINT.PRG - kapiabafwh@gmail.com - 11/07/2024 - Joao.

#include "FiveWin.ch"

ANNOUNCE RDDSYS
REQUEST DBFCDX, DBFFPT

STATIC oWnd

FUNCTION Main()

   LOCAL oBar

   RDDSETDEFAULT("DBFCDX")
   RDDREGISTER( "DBFCDX", 1 ) // RDT_FULL -> 20/10/2022 Joao

   SET CENTURY ON
   SET DATE BRITISH
   SET TIME FORMAT TO "HH:MM:SS"
   SET EPOCH TO YEAR( DATE() ) - 30
   SET SOFTSEEK OFF
   SET WRAP ON
   SETCANCEL( .F. )
   SET CONFIRM OFF
   SET DELETED ON
   SET _3DLOOK ON
   SET UNIQUE OFF
   SET ESCAPE OFF
   SET EXACT ON
   SET EXCLUSIVE OFF
   SET MULTIPLE OFF
   SET OPTIMIZE ON

   DEFINE WINDOW oWnd TITLE "Filtros na Memória"

   DEFINE BUTTONBAR oBar _3D SIZE 26, 27 OF oWnd

   DEFINE BUTTON OF oBar FILENAME "..\bitmaps\16x16\floppy.bmp" FLAT ;
      ACTION ( Filtrar_Quintas() ) TOOLTIP "Filtros na Memória"

   DEFINE BUTTON OF oBar FILENAME "..\bitmaps\16x16\Exit.bmp" FLAT ;
      ACTION( oWnd:End() ) TOOLTIP "Exit this app" GROUP

   SET MESSAGE OF oWnd TO "Filtros na Memória" NOINSET CLOCK DATE KEYBOARD

   ACTIVATE WINDOW oWnd CENTERED // MAXIMIZED

RETURN NIL

FUNCTION Filtrar_Quintas()

   FIELD CODIGO, NOME

   LOCAL nCont, cTemp := "\\serverjpa\rede\temp"
   LOCAL nCodIni := 5000  // PODE SE DIGITAR EM UM GET
   LOCAL nCodFin := 19999 // PODE SE DIGITAR EM UM GET
   LOCAL cAlias

   IF .NOT. FILE( "QUINTAS.DBF" )

      DbCreate( "QUINTAS.DBF", { { "CODIGO", "N", 10, 00 }, ;
                                 { "NOME"  , "C", 50, 00 } } )

      CLOSE DATABASE

   ENDIF

   USE QUINTAS ALIAS QUINTAS EXCLUSIVE NEW

   IF EOF()

      FOR nCont = 1 TO 1000000

         SYSREFRESH()

         APPEND BLANK

         REPLACE CODIGO WITH nCont

         REPLACE NOME   WITH "QUINTAS " + ALLTRIM( STR( nCont ) ) + ;
                             " MEMORY / TEMPORARY - EXAMPLO SIMPLES"

      NEXT

   ENDIF

   IF .NOT. FILE( "QUINTAS.CDX" ) // DEMORADO. FAZER APENAS NO INDEXADOR.

      INDEX ON FIELD->CODIGO TAG 01 TO QUINTAS // INDICE NORMAL NO HD.

   ENDIF

   // OS DOIS FILTROS SAO RAPIDERRIMOS. CADA UM COM SEU CRITERIO.

   MsgWait( "USANDO INDICE COM ORDSCOPE()", ;
            "USANDO INDICE COM ORDSCOPE()", 3.5 )

   SET ORDER TO 01 // CODIGO

   // USANDO ORDSCOPE() VIA .CDX
   ORDSCOPE( 0, nCodIni )
   ORDSCOPE( 1, nCodFin )
   GO TOP

   // ? Seconds() // 52031.30

   BROWSE()

   // FECHAR O SCOPE()
   ORDSCOPE( 0, NIL )
   ORDSCOPE( 1, NIL )
   GO TOP

   MsgWait( "USANDO INDICE COM INDEX ON MEMORY", ;
            "USANDO INDICE COM INDEX ON MEMORY", 3.5 )

   cAlias := ALIAS()

   GO TOP

   // FILTRO NA MEMORIA AUXILIAR EM TEMPO REAL
   // EU PREFIRO ESTE FILTRO, POIS POSSO CONTROLAR DE VARIAS FORMAS INTERNAMENTE,
   INDEX ON CODIGO TAG 02 TO PEDITEMP FOR ( .NOT. EOF() ) .AND. ;
      ( cAlias )->CODIGO >= nCodIni                       .AND. ;
      ( cAlias )->CODIGO <= nCodFin MEMORY // TEMPORARY

   GO TOP

   // ? Seconds() // 51851.51

   BROWSE()

   OrdDestroy( "PEDITEMP" )  // FECHA O MEMORY/TEMPORARY

   GO TOP

   CLOSE DATABASES

RETURN NIL

// FIN / END - kapiabafwh@gmail.com
Regards, saludos.
Responder