FAvor problemas con Meter

Post Reply
mantonio_08
Posts: 330
Joined: Fri May 25, 2007 9:06 pm

FAvor problemas con Meter

Post 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
Marcelo Via Giglio
Posts: 1033
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia

Post 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
R.F.
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm

Post 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()})
Saludos
R.F.
mantonio_08
Posts: 330
Joined: Fri May 25, 2007 9:06 pm

Post 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()})
Post Reply