FAvor problemas con Meter

FAvor problemas con Meter

Postby mantonio_08 » Thu Aug 23, 2007 9:45 pm

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
mantonio_08
 
Posts: 330
Joined: Fri May 25, 2007 9:06 pm

Postby Marcelo Via Giglio » Thu Aug 23, 2007 10:10 pm

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

Postby R.F. » Thu Aug 23, 2007 11:50 pm

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

Postby mantonio_08 » Thu Aug 30, 2007 4:57 pm

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


Return to FiveWin para Harbour/xHarbour

Who is online

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