porque apagar CDX antes de cria-los
Moderador: Moderadores
porque apagar CDX antes de cria-los
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.
obrigado.
xHarbour.
-
Kapiaba
- Colaborador

- Mensagens: 1908
- Registrado em: 07 Dez 2012 16:14
- Localização: São Paulo
- Contato:
porque apagar CDX antes de cria-los
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:
Uso a muito tempo a forma acima e funciona de perfeição.
abs.
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]) } )
abs.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
porque apagar CDX antes de cria-los
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.
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.
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
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/
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/
- Nascimento
- 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
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

- Mensagens: 1908
- Registrado em: 07 Dez 2012 16:14
- Localização: São Paulo
- Contato:
porque apagar CDX antes de cria-los
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.
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

- Mensagens: 52
- Registrado em: 20 Mai 2012 11:22
- Localização: Mérida, Yucatán, México
porque apagar CDX antes de cria-los
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 !!
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

- Mensagens: 1908
- Registrado em: 07 Dez 2012 16:14
- Localização: São Paulo
- Contato:
porque apagar CDX antes de cria-los
Muchas gracias Paredes, voy probar asi que posible.
Saludos cordiales.
Saludos cordiales.
- Nascimento
- 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
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

- Mensagens: 820
- Registrado em: 19 Out 2004 10:30
- Localização: Jaraguá do Sul - SC
porque apagar CDX antes de cria-los
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.
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)
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)
