Gilberto M Silva escreveu:Caros Colegas, Postem uma função usando CDX, pois estou querendo mudar de NTX para indices CDX.
Obrigado.
Tche, a tempo atras jah postei exemplos.....sempre de uma pesquisada no Forum antes de Postar.....segue abaixo exmplos de uso da CDX:
Antes de mais nd vou lhe dar o exemplo de como eu faço..eu uso o clipper 5.3...apesar de todo mundo dizer pra usar o clippper 5.2 mais ninguem sabe dizer um real motivo de pq usar uma versão anterior..mas isso não vem a caso.
Link as LIB abaixo no seu script:
DBFCDX.LIB
_DBFCDX.LIB
Coloque essas 4 linhas no incio so seu sistema:
REQUEST DBFCDX
RDDSETDEFAULT("DBFCDX")
RDDSETDEFAULT("_DBFCDX")
DBSETDRIVER("DBFCDX")
Para criar indice:
use AGENDA alias AGENDA excl new
if !neterr()
DELETE FILE AGENDA.CDX
index on NOME TAG 1 to AGENDA EVAL Progress() every lastrec()/100
index on COD TAG 2 to AGENDA EVAL Progress() every lastrec()/100
index on ENDE TAG 3 to AGENDA EVAL Progress() every lastrec()/100
index on CIDADE TAG 4 to AGENDA EVAL Progress() every lastrec()/100
index on DATA TAG 5 to AGENDA EVAL Progress() every lastrec()/100
use
ELSE
EMUSO() // ROTINA PARA AVISO DE USO DO DBF
ENDIF
Exemplo de Abertura e uso do mesmo:
USE AGENDA ALIAS AGENDA shared //abrindo DBF
SET INDEX TO AGENDA // abrindo indice
XCOD=0
SELE AGENDA
SET ORDER TO 2 //SELECIONEI A ORDEM (COD)
SEEK XCOD
IF FOUND()
BLA,BLA,BLA.....
ENDIF
...
Exemplo de como usar o ORDSCOPE() no CDX:
XDATA1=DATE()
XDATA2=DATE()-60 // A 60 DIAS ATRAS
SELE AGENDA
SET ORDER TO 5
ORDScope(0, XDATA1)
ORDScope(1, XDATA2)
Goto top
....
Obs:Se não me engano se vc usar o DBF com o mesmo Nome do CDX ele se abre automaticamente, referente ao ORDSCOPE() esse é muito bom e veloz...faz o trabalho do SET FILTER TO mas em uma velocidade muito boa...alias...se vc quiser tb. pode usar em conjunto...o ORDSCOPE mais o SET FILTER TO.
Espero que entenda...os exemplos se tiver alguma duvida posta aqui e resolveremos..
Abraços
Leonardo Machado