Clipper/FiveWin - barra de progreso para indexar con fw

 
Vista:

barra de progreso para indexar con fw

Publicado por richard jaime i (71 intervenciones) el 13/12/2005 14:16:05
hola amigos alguien puede enviarme un ejemplo de como hacer que aparesca
la barra de porcentajes mientras el sistema indexa las bases de datos en fivewin .
son muchas bases de datos que tengo .alguna idea. ??.
yo tengo un codigo en clipper puro 5.3 pero no he logrado modificarlo.

muchas gracias. clipperos..
saludos.richard jaime.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:barra de progreso para indexar con fw

Publicado por Mauricio Arevalo (152 intervenciones) el 13/12/2005 19:52:29
Richard:

Mirate el ejemplo de los METER que trae FW esta creo en ..\samples\meter.prg

Saludos

Mauricio Arevalo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:barra de progreso para indexar con fw

Publicado por Gabriel Martin (31 intervenciones) el 14/12/2005 19:56:56
Ei como que va a ser la primera vez que pueda ayudar a alguien.

Intentaré explicarme clarito a ver si me sale y que mejor que pasandote parte del proceso que yo utilizo.

Creo un primer Menu donde selecciono los ficheros a indexar mendiante CHECKBOX y lo guardo en un ARRAY lCkh

FUNCTION Reindx()

LOCAL oDlg,oBtnOk,lChk:=ARRAY(38),oChk:=ARRAY(38)

SET 3DLOOK ON

DEFINE DIALOG oDlg RESOURCE "INDEXA" ;
FONT oFont ;
TITLE "INDEXADO SELECTIVO DE FICHEROS"

REDEFINE CHECKBOX oChk[1] VAR lChk[1] ID 1100 ;
OF oDlg ;
UPDATE

REDEFINE BUTTON ID 6000 OF oDlg ;
ACTION(MsgMeter({|oMeter,oText,oDlg,lEnd|Indexa(oMeter,oText,oDlg,@lEnd,lChk)},"Creando indices..."))

ACTIVATE DIALOG oDlg ;
CENTERED

RETURN(NIL)

..
FUNCTION Indexa(oMeter,oText,oDlg,lEnd,lChk)

IF lChk[1]

SET DEFAULT TO &oPhatFileCont
DBSelectArea(1)
DBUseArea(,,"Cuentas",,.F.)
oMeter:nTotal=RecCount()

oText:SetText("Cuentas x Código")
INDEX ON Cuentas->CODIGO TO CUECOD;
EVAL (oMeter:Set(RecNo()),SysRefresh(),!lEnd)

ENDIF

oDlg:UPDATE()

RETURN (.T.)
....
...

A mi me funciona, espero que a ti tambien. No es una maravilla de codigo como lo que se ve por aqui, pero está listo para usar

LPV Gabriel Martin
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:barra de progreso para indexar con fw

Publicado por richard jaime i (71 intervenciones) el 16/12/2005 13:04:46
gabriel muchas gracias x responder.y enviar el codigo.
pero esta parte no la pude compilar.,:

EVAL (oMeter:Set(RecNo()),SysRefresh(),!lEnd)

sale error c2005 . al parecer tiene algo de mas o le falta algo.
saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:barra de progreso para indexar con fw

Publicado por MANURAMOS (19 intervenciones) el 17/12/2005 21:44:53
Creo que lo que te falla es lo de "||End" del final. Ahí falta algo (no es un comando completo).

De todas formas, lo que tehan explicado está muy bien, pero dificil de comprender.

Veamos, durante la indexación, cada vez que el programa procesa un registro, este llama a la función que indique el parámetro EVAL (cuando se la pongas). Puede ser una función en línea, como la del ejemplo, o una función normal que tu programes. Lo importante es que en esa función utilices el método SET del METER. O sea: "oMeter:Set( VALOR )" el VALOR es un número que le indica al METER por donde vas. Por eso normalmente se utiliza RecNo(), pero puedes utilizar cualquier otro sistema, pues hay otro parámetro que no te han explicado que es EVERY que indica al programa cada cuantos registros quieres que se evalue la funcion de EVAL.

Ten en cuanta que si tu base de datos es muy extensa y llamas a la funcion a cada registro, la aplicación se enlentece un motón y a lo mejor te interesa evaluar el METER cada 50 o 100 registros. Con lo cual el VALOR que pases al SET del METER tiene que incrementarse de 50 en 50 unidades, o de 100 en 100. Para ello utiliza una variable tipo:

INDEX ON ......... EVAL nVar := MiFuncion(nVar,...,...) EVERY 100

y dentro de esa Funcion pon:

nVar := nVar + 100. y al final: RETURN nVar.

No te olvides de indicarle al METER cuantos registros tienes con:

oMeter:nTotal := RecCount() o algo similar.

Se me olvidaba.:

Asegurate de poner "SysRefresh()" despues de cada oMeter:Set(nVar), de lo contrario no funciona.

Ahí tienes tema para calentarte la cabeza durante un buen rato.

Un Saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:barra de progreso para indexar con fw

Publicado por JOSE (79 intervenciones) el 20/12/2005 15:50:13
Hola Manuel una consulta si tengo 5 bases de datos como lo hago para ser una sola barra que se mueva de 1% a 100% las 5 bases al mismo tiempo

Saludos
Jose
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:barra de progreso para indexar con fw

Publicado por manuramos (19 intervenciones) el 21/12/2005 23:46:02
lo mejor es que utlices dos barras, una que se reinicie a cada base de datos y otra para el acumulado. para esta última, suma en una variable cuántos registros hay en total entre las 5 bases de datos y pasala a su oMetrer:nTotal. Para el oMeter:Set(), utilza una variable (estatica o un arreglo si utlizas una funcion EVAL) donde se vayan sumando la cantidad de registros procesados conforme se va rellenado la primera barra. No se si me explico. Cada vez que pases un valor al oMeter:Set() de la primera barra, añade un valor a esa variable (inicializada a 0) y pasala al oMeter:Set() de la segunda (la del acumulado). lógicamente ese valor que pasas no puede ser el RecNo() sino un valor que corresponda al numero de registros que se están prcesando a cada vez. Por ejemplo si procesas el EVAL cada 4 registros, tendrás que sumar 4 a cada vez.. Para sincronizar los valores, cuando acabes con la primera base de datos haz variable=RecCount(), la primera vez. La segunda vez variable=el RecCount() de la primera + el RecCount() de la segunda (emplea variables intermedias), etc.

Si sólo quieres una barra. Simplemente omite el Set de la primera barra, el resto es lo mismo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:barra de progreso para indexar con fw

Publicado por Jose (79 intervenciones) el 05/01/2006 13:49:14
No tienes un ejemplo mas claro ya que empece hace poco en esto
Saludos
Jose
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar