Page 1 of 1

FAvor problemas con Meter

Posted: Thu Aug 23, 2007 9:45 pm
by mantonio_08
Hola Amigos:

Disculpen mi ignorancia, pero necesito saber como puedo poner una METER mientras abro una base de datos, de tal forma de mostrarle un aviso en pantalla al usuario, mientras se realiza este proceso.

Saludos
Antonio

Posted: Thu Aug 23, 2007 10:10 pm
by Marcelo Via Giglio
Hola,

puedes hacer algo asi

DEFINE DIALOG oDlg .....

REDEFINE METER oMeter......


ACTIVATE DIALOG oDlg NOWAIT
openDB( oMeter, oDlg )


FUNCTION openDB( oMeter, oDlg )
USE ....
// abres la base de datos
// actualizar oMeter

oDlg:end()

RETURN NIL

Solo es una idea, no lo hice antes

saludos

Marcelo

Posted: Thu Aug 23, 2007 11:50 pm
by R.F.
No es posible hacerlo, por 2 razones basicamente:

1) Un meter requiere de "callbacks" es decir, que cada determinado tiempo se ejecute una función que actualice la posicion del meter, cosa que no es posible realizar mientras se abre una tabla, porque el proceso de apertura (USE) no produce ninguna llamada a nada, al contrario del proceso de indexacion, que se puede "interceptar" para mostrar el grado de avance del mismo.

2) Un meter requiere un valor minimo y un valor maximo ¿ como los vas a establecer ?, si tu valor maximo es el numero de registros de la base de datos, este no lo puedes saber (lastrec() o reccount()) sino hasta que la tabla está abierta, para entonces ya es demasiado tarde, la tabla se abrirá mucho antes de que pudieras establecer los valores de control del meter.

Quiero pensar que tu base de datos es demasiado grande, y tarda mucho tiempo en abrirse (lo cual es logico, hay que copiar todos los registros a la estacion de trabajo) y lo que quieres es mostrar un meter conforme se va realizando la apertura, lo cual no es posible por las razones explicadas anteriromente.

Sugerencia, utiliza un MsgWait:

MsgWait ("Espere un momento","Abriendo tabla", {|| DBUSEAREA()})

Posted: Thu Aug 30, 2007 4:57 pm
by mantonio_08
Muchas Gracias por la respuesta, me queda super claro.

Saludos,
Antonio
RF wrote:No es posible hacerlo, por 2 razones basicamente:

1) Un meter requiere de "callbacks" es decir, que cada determinado tiempo se ejecute una función que actualice la posicion del meter, cosa que no es posible realizar mientras se abre una tabla, porque el proceso de apertura (USE) no produce ninguna llamada a nada, al contrario del proceso de indexacion, que se puede "interceptar" para mostrar el grado de avance del mismo.

2) Un meter requiere un valor minimo y un valor maximo ¿ como los vas a establecer ?, si tu valor maximo es el numero de registros de la base de datos, este no lo puedes saber (lastrec() o reccount()) sino hasta que la tabla está abierta, para entonces ya es demasiado tarde, la tabla se abrirá mucho antes de que pudieras establecer los valores de control del meter.

Quiero pensar que tu base de datos es demasiado grande, y tarda mucho tiempo en abrirse (lo cual es logico, hay que copiar todos los registros a la estacion de trabajo) y lo que quieres es mostrar un meter conforme se va realizando la apertura, lo cual no es posible por las razones explicadas anteriromente.

Sugerencia, utiliza un MsgWait:

MsgWait ("Espere un momento","Abriendo tabla", {|| DBUSEAREA()})