ADS: Por favor saquenme de esta duda.

ADS: Por favor saquenme de esta duda.

Postby José Ríos » Tue Feb 07, 2006 4: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.

Code: Select all  Expand view
   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.
José Ríos
 
Posts: 119
Joined: Fri Nov 04, 2005 12:23 am

Postby José Ríos » Tue Feb 07, 2006 4: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.
José Ríos
 
Posts: 119
Joined: Fri Nov 04, 2005 12:23 am

Postby R.F. » Tue Feb 07, 2006 5: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.
R.F.
 
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm

Postby José Ríos » Tue Feb 07, 2006 11:53 pm

Muchas gracias por la respuesta Rene.


Saludos.
José Ríos
 
Posts: 119
Joined: Fri Nov 04, 2005 12:23 am

Postby George » Wed Feb 08, 2006 3: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()
George
 
Posts: 725
Joined: Tue Oct 18, 2005 6:49 pm

Postby José Ríos » Sun Feb 12, 2006 11:11 pm

Gracias por el tip George. Lo voy a Probar.

Saludos.

José Ríos.
José Ríos
 
Posts: 119
Joined: Fri Nov 04, 2005 12:23 am


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 132 guests