Page 1 of 1

indices cdx

Posted: Wed Apr 26, 2006 3:00 pm
by Verhoven
Quiero pasarme a trabajar con índices CDX en vez de los NTX pero necesito que alguien me de algunas recomendaciones previas y si existe algún manual al respecto.

Utilizo xHarbour de PuertoSur para fw 2.4

Gracias.

lo hago asi...

Posted: Wed Apr 26, 2006 4:51 pm
by leandro
al inicio de tu programa colocas lo siguiente...

Code: Select all

REQUEST DBFCDX
RddSetDefault("DBFCDX")
y los indices los genero de la siguiente manera...

Code: Select all

USE (oLamcla:tPrem) ALIAS tPrem EXCLUSIVE NEW
IF !NETERR()
  oProgress:nPosition += 1
  FERASE(oLamcla:tPrem+".CDX")
  IF FILE(oLamcla:tPrem+".CDX")
   ELSE
    INDEX ON Articulo TAG nTcod
    INDEX ON nombre   TAG nTnom
   ENDIF
 ELSE
  MSGINFO(oLamcla:tPrem)
ENDI
tPrem->(dbclosearea())
Espero te sirva...

ah: nunca me han fallado hasta el momento....

Un detalle importante

Posted: Wed Apr 26, 2006 9:28 pm
by jose_murugosa
Un detalle importante como habrás visto en el ejemplo anterior es que los índices cdx no se reindexan (aunque se puede hacer) sino que se borran y se vuelven a crear, esto se debe a un bug de estos índices que hace que la información anterior quede dentro del archivo aunque "desconectada" con lo cual cada vez que reindexas el archivo aumenta de tamaño sustancialmente.

Debes tener en cuenta que si usas la cláusula SET AUTOPEN ON debes ponerla en OFF antes de indizar, de otro modo el archivo CDX se abrirá junto con la base y no podrás borrarlos luego de recrear los índices la volverás a poner en ON.

Te adjunto un par de documentos del Rafa Carmona sobre DBFCDX ( no te asustes son unas 5 páginas) a mí me ayudaron sustancialmente en el uso de estos índices. :D

bajalo en:
http://hyperupload.com/download/01d627c ... x.exe.html
(son dos pdf en un archivo self stracting de Rar)

Verás que trabajando con SET AUTOPEN ON y e INDICES BAG ESTRUCTURALES te ahorrarás cientos de líneas de código e índices corruptos. :!:

Un fuerte abrazo.

Posted: Thu Apr 27, 2006 12:59 pm
by Armando
Verhoven, Leandro y José:

Con la función ORDLISTREBUILD() y no he tenido problemas.
denle una mirada.


Saludos, Armando