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
