porque apagar CDX antes de cria-los

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

Moderador: Moderadores

porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

porque apagar CDX antes de cria-los

Mensagem 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.
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

porque apagar CDX antes de cria-los

Mensagem por Kapiaba »

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

porque apagar CDX antes de cria-los

Mensagem 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.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

porque apagar CDX antes de cria-los

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

porque apagar CDX antes de cria-los

Mensagem 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)
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

porque apagar CDX antes de cria-los

Mensagem 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.
Paredes01
Usuário Nível 2
Usuário Nível 2
Mensagens: 52
Registrado em: 20 Mai 2012 11:22
Localização: Mérida, Yucatán, México

porque apagar CDX antes de cria-los

Mensagem 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 !!
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

porque apagar CDX antes de cria-los

Mensagem por Kapiaba »

Muchas gracias Paredes, voy probar asi que posible.

Saludos cordiales.
Avatar do usuário
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

porque apagar CDX antes de cria-los

Mensagem por Nascimento »

sim como citado acima filedelete() é da catools ou ct.lib
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

porque apagar CDX antes de cria-los

Mensagem 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.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Responder