FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour ADS: Por favor saquenme de esta duda.
Posts: 119
Joined: Fri Nov 04, 2005 12:23 AM
ADS: Por favor saquenme de esta duda.
Posted: Tue Feb 07, 2006 04:56 AM
Si uso indices CDX con ads, ¿puedo usar EVAL al indexar un archivo?.

Estoy haciendo algunas pruebas y aparentemente ignora los comandos que envio en el EVAL.

   use Agentes New Exclusive
	if (!NETERR())
		pack
		erase("Agentes.cdx")
      index on Numero tag Numero for .not. deleted() EVAL (msginfo('indexando registro')) EVERY 1
   endIf


Uso FWH 2.4,XHarbour 0.99.3 y ADS local 7.1

De antemano muchas gracias.

José Rìos.
Posts: 119
Joined: Fri Nov 04, 2005 12:23 AM
ADS: Por favor saquenme de esta duda.
Posted: Tue Feb 07, 2006 04:12 PM

Vamos, tan solo quiero que alguien me diga si no se puede usar EVAL al indexar usando ADS. Me interesa usar EVAL para poner un meter en mi rutina de reindexacion, pero no si si estoy haciendo algo mal o simplemente EVAL no es una funcion admitida por ADS.

¿Alguien ha usado EVAL reindexando con ADS?.

Saludos.

Posts: 840
Joined: Thu Oct 13, 2005 07:05 PM
ADS: Por favor saquenme de esta duda.
Posted: Tue Feb 07, 2006 05:03 PM

No es posible hacer lo que quieres.

Hay que entender un poco como funciona ADS cuando se hace un indice contra lo que hace xHarbour o Clipper

Bajo Clipper / (x)Harbour un proceso de reindexacion, en realidad lo que hace es un DO WHILE EOF para todos los registros de la base de datos. Cada registro de la base de datos es enviado al maquina que esta corriendo indices se realiza el indice, se incluye en el archivo NTX/CDX y se continua con el proceso, por eso, tu puedes utilizar la clausula EVAL, la cual se va a evaluar EVERY numero de registros. Ya que tu programa tiene el control, puede ejecutar las instrucciones que tienes en EVAL cada "x" numeros de registros.

Con ADS no pasa esto, cuando tu pidex indexar un DBF, la instruccion de indexacion no es procesada por tu programa, tu programa le envia a ADS la instruccion de indexacion, y a partir de ahi, tu ya no tienes control sobre el proceso, ADS se encargara de hacer el indice y solo retomaras el control del programa hasta que ADS termine de indexar.

Por ello no es posible utilizar la clausula EVAL.

Saludos

R.F.
Posts: 119
Joined: Fri Nov 04, 2005 12:23 AM
ADS: Por favor saquenme de esta duda.
Posted: Tue Feb 07, 2006 11:53 PM

Muchas gracias por la respuesta Rene.

Saludos.

Posts: 729
Joined: Tue Oct 18, 2005 06:49 PM
ADS: Por favor saquenme de esta duda.
Posted: Wed Feb 08, 2006 03:30 PM

Trata este codigo. A mi me funciona pero la barra del meter pasa tan rapido, si es que pasa, que no se nota nada en 250,000 registros

// launch ADS's callback function
adsRegCallBack( {|nPct| ;
oMeter:set( oMeter:nTotal * Int( nPct / 10000 ) ), ;
SysRefresh(), .F. } ) // return .F. is aborting not allowed

// your indexing routine goes here
INDEX ON FIELD->TRAN_NO TAG iTraNo FOR .NOT. DELETED() ;
EVAL (oMeter:SET(recno()),oMeter:Refresh(), !lEnd) EVERY nTimes

oMeter:Set(Reccount())
oMeter:Refresh()
SysRefresh()

// release ADS's callback function
adsClrCallBack()

Posts: 119
Joined: Fri Nov 04, 2005 12:23 AM
ADS: Por favor saquenme de esta duda.
Posted: Sun Feb 12, 2006 11:11 PM

Gracias por el tip George. Lo voy a Probar.

 Saludos.

 José Ríos.

Continue the discussion