Página 1 de 1

porque apagar CDX antes de cria-los

Enviado: 16 Dez 2014 09:25
por porter
olá pessoal, estive lendo aqui no forum, que sempre que for recriar indices CDX, é importante primeiro apaga-los e depois recria-los, gostaria de saber se existe mesmo essa necessidade e porque, fiquei com essa dúvida.

obrigado.

xHarbour.

porque apagar CDX antes de cria-los

Enviado: 16 Dez 2014 09:32
por Kapiaba

porque apagar CDX antes de cria-los

Enviado: 16 Dez 2014 09:42
por Kapiaba
Explicando de modo simples, cada .CDX, pode conter até 50 TAGS, e ao reindexar sem DELETAR, as TAGS, vão se multiplaicando no .CDx criando "páginas" dentro do mesmo, o que pode atrapalhar bastante o processamento, pois em algum momento, o SEEK pode se "confundir" e pegar o dado errado +- isso.

Uma forma simples de DELETAR os INDICES .CDX é assim:

Código: Selecionar todos

    LOCAL Del_Indice, I

    DEL_INDICE := DIRECTORY( "*.CDX" )

    FOR I = 1 TO LEN( Del_Indice )
       FERASE( DEL_INDICE[I][1] )
    NEXT I

ou,

    AEVAL(DIRECTORY( "CADCEP.cdx" ),{ |aFILE| FERASE(aFILE[F_NAME]) } )
Uso a muito tempo a forma acima e funciona de perfeição.

abs.

porque apagar CDX antes de cria-los

Enviado: 16 Dez 2014 10:54
por JoséQuintas
complementando:
O NTX é composto de um único índice. Ao criar com INDEX o resultado é aquele índice.
O CDX pode ser composto de vários índices. Ao criar com INDEX o resultado é que sempre um novo índice será adicionado ao arquivo já existente.

Código: Selecionar todos

use clientes
index on codigo tag codigo
index on codigo tag codigo
index on codigo tag codigo
O resulltado vai ser um arquivo clientes.cdx contendo 3 índices iguais.
Não sei dizer se os tres vão ser atualizados simultaneamente, ou se vale o último e o resto vira lixo dentro do CDX.
Qualquer que seja a reação, é espaço perdido e talvez processamento perdido.
Por isso a melhor coisa é apagar o CDX antes de começar a criar os índices internos.

porque apagar CDX antes de cria-los

Enviado: 16 Dez 2014 11:33
por Nascimento
Kapiaba Uma forma simples de DELETAR os INDICES .CDX é assim:

bom se usar a hbct tem uma mais simples ainda

Código: Selecionar todos

filedelete('*.cdx',0)

porque apagar CDX antes de cria-los

Enviado: 16 Dez 2014 12:28
por Kapiaba
Olá, Nascimento, não conheço este comando filedelete('*.cdx',0) em xHARBOUR, não tenho também esta HBCT.LIB no xHARBOUR é a CT.LIB.

No xHARBOUR, tem o DELETE FILE.

Me confirme se o xHARBOUR, tem este comando FILEDELETE() porfa.

Obg. pela dica.

abs.

porque apagar CDX antes de cria-los

Enviado: 16 Dez 2014 15:07
por Paredes01
Hola, si existe en xharbour

FileDelete()
Deletes one or more files specified by a file mask and file attributes.
Syntax
FileDelete( <cFileMask>, [<nAttributes>] ) --> lDeleted
Arguments
<cFileMask>
This is a character string holding the drive, directory and/or file specification of the file(s) to delete. It may contain "wild card characters" (eg: "c:\xhb\data\*.cdx").
<nAttributes>
This is a numeric value specifying the file attributes of the files to query. Values of the following list are used for file attributes. To specifiy multiple attributes, pass the sum of the corresponding values:
Values for file attributes
Value Attribute
0 Normal
1 Read only
2 Hidden
4 System
8 Volume
16 Directory
32 Archived

The return value is .T. (true) if at least one file was deleted, otherwise .F. (false).

Saludos !!

porque apagar CDX antes de cria-los

Enviado: 16 Dez 2014 15:49
por Kapiaba
Muchas gracias Paredes, voy probar asi que posible.

Saludos cordiales.

porque apagar CDX antes de cria-los

Enviado: 16 Dez 2014 20:44
por Nascimento
sim como citado acima filedelete() é da catools ou ct.lib

porque apagar CDX antes de cria-los

Enviado: 21 Dez 2014 23:28
por Hasse
Boa noite colegas.

Uso o CDX com várias tag's faz alguns anos, talvez mais de 10.

Uma caraterística muito interessantes é o reduzido tamanho destes CDX com múltiplas tag's.

Realmente se o CDX não for deletado antes do INDEX, o CDX vai crescendo continuamente a cada INDEX ou REINDEX, e facilmente ele fica maior do que o próprio DBF, mas ainda não percebi que haja alguma redução na velocidade do sistema.

Assim, tenho uma rotina que deleta todos os CDX uma vez por mês. Contudo nada impede que os CDX sejam apagados antes de cada INDEX.

Lembrando que o REINDEX não funciona se o CDX for deletado antes. Acontece que ele usa as chaves já registradas no CDX para fazer a reindexação.