Jump to content
Fivewin Brasil

% Indexação de todos arquivos do sistema


Geraldo (gbsilva)

Recommended Posts

Pessoal estou pensando em fazer uma rotina de indexação, onde mostre a % da indexação de todos os arquivos juntos, pois não acho legal como estou usando o Meter que a cada índice ele zere e vai a 100% ai no segundo de novo O a 100% acho que seria mais interessante que o cliente veja os valores reais do que esta acontecendo.

As ultimas funções eu criei para totalizar a quantidade de registros de todos os meus arquivos e guardo na variável xTotalRegs e usando esse valor queria mostrar na tela de acordo com a porcentagem que fosse indexando, só que não sei como fazer isso. Será que alguém poderia ajudar a complementar essa idéia.

Obrigado a todos.

Function Indexa()

LOCAL bAction, xTotalRegs := 0

IF !MsgNoYes("Deseja Recriar os Ãndices do Sistema!","Atenção")

return(nil)

ENDIF

Indexaa(@xTotalRegs)

//bAction := { | oMeter, oText, oDlg, lEnd | Reorganiza( oMeter, oText, oDlg, @lEnd ) }

bAction := { | oMeter, oText, oDlg, lEnd | Reorganiza(oMeter,oText,oDlg, @lEnd, xTotalRegs ) }

MsgMeter(bAction,"Preparando...","Reorganização da base de dados")

Return Nil

Static Function Reorganiz(oMeter,oText,oDlg,lEnd,xTotalRegs)

oMeter:nTotal := xTotalRegs

oText:SetText("Indexando Arquivos!")

FERASE("BdOts.CDX")

GbDbf("BdOts","E",.F.)

BdOts->(__DbPack())

Index on os tag Ots_a //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+ata tag Ots_b //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+sgci tag Ots_c //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on projeto tag Ots_d //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+centro+anda+ata tag Ots_e //EVAL (oMeter:Set(Recno()),SysRefresh())

//Index on contrato+centro+ata tag Ots_e EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+pep tag Ots_f //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+gerobras tag Ots_g //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+centro+anda+dtos(pfim)+ata tag Ots_h //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+centro+anda+dtos(data1)+ata tag Ots_i //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+centro+anda+dtos(rfim)+ata tag Ots_j //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+centro+area+SUBSTR(ncontrole,3,2) tag Ots_k //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+centro tag Ots_l //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+os tag Ots_m //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+centro+carteira tag Ots_n //EVAL (oMeter:Set(Recno()),SysRefresh())

BdOts->(DbCloseArea())

FERASE("BdAux.CDX")

GbDbf("BdAux","E",.F.)

BdAux->(__DbPack())

Index on os tag Aux_a //EVAL (oMeter:Set(Recno()),SysRefresh())

BdAux->(DbCloseArea())

return

STATIC function Indexaa(xTotalRegs)

local xRegs := 0

ContaRegs("BdOts",@xRegs,8)

xTotalRegs += xRegs

ContaRegs("BdAux",@xRegs,3)

xTotalRegs += xRegs

return(.t.)

STATIC function ContaRegs(xArquivo,xRegs,xIndices)

GbDbf(xArquivo,"E",.F.)

&xArquivo->(DbGoBottom() )

xRegs := &xArquivo->(Lastrec() ) * xIndices

&xArquivo->(DbCloseArea() )

return(.t.)

Geraldo Barbosa da Silva

FW 2.6 + Clipper 5.3b + Blinker 6.0 + WS 4.5

FWH 2.6 + xHarbour 0.99.50 (Simplex) + Bcc55 + Pelles + MyMake

Windows Xp SP2

lucgera@terra.com.br

Link to comment
Share on other sites

Pessoal estou pensando em fazer uma rotina de indexação, onde mostre a % da indexação de todos os arquivos juntos, pois não acho legal como estou usando o Meter que a cada índice ele zere e vai a 100% ai no segundo de novo O a 100% acho que seria mais interessante que o cliente veja os valores reais do que esta acontecendo.

As ultimas funções eu criei para totalizar a quantidade de registros de todos os meus arquivos e guardo na variável xTotalRegs e usando esse valor queria mostrar na tela de acordo com a porcentagem que fosse indexando, só que não sei como fazer isso. Será que alguém poderia ajudar a complementar essa idéia.

Obrigado a todos.

Function Indexa()

LOCAL bAction, xTotalRegs := 0

IF !MsgNoYes("Deseja Recriar os Ãndices do Sistema!","Atenção")

return(nil)

ENDIF

Indexaa(@xTotalRegs)

//bAction := { | oMeter, oText, oDlg, lEnd | Reorganiza( oMeter, oText, oDlg, @lEnd ) }

bAction := { | oMeter, oText, oDlg, lEnd | Reorganiza(oMeter,oText,oDlg, @lEnd, xTotalRegs ) }

MsgMeter(bAction,"Preparando...","Reorganização da base de dados")

Return Nil

Static Function Reorganiz(oMeter,oText,oDlg,lEnd,xTotalRegs)

oMeter:nTotal := xTotalRegs

oText:SetText("Indexando Arquivos!")

FERASE("BdOts.CDX")

GbDbf("BdOts","E",.F.)

BdOts->(__DbPack())

Index on os tag Ots_a //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+ata tag Ots_b //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+sgci tag Ots_c //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on projeto tag Ots_d //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+centro+anda+ata tag Ots_e //EVAL (oMeter:Set(Recno()),SysRefresh())

//Index on contrato+centro+ata tag Ots_e EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+pep tag Ots_f //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+gerobras tag Ots_g //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+centro+anda+dtos(pfim)+ata tag Ots_h //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+centro+anda+dtos(data1)+ata tag Ots_i //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+centro+anda+dtos(rfim)+ata tag Ots_j //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+centro+area+SUBSTR(ncontrole,3,2) tag Ots_k //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+centro tag Ots_l //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+os tag Ots_m //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+centro+carteira tag Ots_n //EVAL (oMeter:Set(Recno()),SysRefresh())

BdOts->(DbCloseArea())

FERASE("BdAux.CDX")

GbDbf("BdAux","E",.F.)

BdAux->(__DbPack())

Index on os tag Aux_a //EVAL (oMeter:Set(Recno()),SysRefresh())

BdAux->(DbCloseArea())

return

STATIC function Indexaa(xTotalRegs)

local xRegs := 0

ContaRegs("BdOts",@xRegs,8)

xTotalRegs += xRegs

ContaRegs("BdAux",@xRegs,3)

xTotalRegs += xRegs

return(.t.)

STATIC function ContaRegs(xArquivo,xRegs,xIndices)

GbDbf(xArquivo,"E",.F.)

&xArquivo->(DbGoBottom() )

xRegs := &xArquivo->(Lastrec() ) * xIndices

&xArquivo->(DbCloseArea() )

return(.t.)

Geraldo Barbosa da Silva

FW 2.6 + Clipper 5.3b + Blinker 6.0 + WS 4.5

FWH 2.6 + xHarbour 0.99.50 (Simplex) + Bcc55 + Pelles + MyMake

Windows Xp SP2

lucgera@terra.com.br

Link to comment
Share on other sites

Pessoal estou pensando em fazer uma rotina de indexação, onde mostre a % da indexação de todos os arquivos juntos, pois não acho legal como estou usando o Meter que a cada índice ele zere e vai a 100% ai no segundo de novo O a 100% acho que seria mais interessante que o cliente veja os valores reais do que esta acontecendo.

As ultimas funções eu criei para totalizar a quantidade de registros de todos os meus arquivos e guardo na variável xTotalRegs e usando esse valor queria mostrar na tela de acordo com a porcentagem que fosse indexando, só que não sei como fazer isso. Será que alguém poderia ajudar a complementar essa idéia.

Obrigado a todos.

Function Indexa()

LOCAL bAction, xTotalRegs := 0

IF !MsgNoYes("Deseja Recriar os Ãndices do Sistema!","Atenção")

return(nil)

ENDIF

Indexaa(@xTotalRegs)

//bAction := { | oMeter, oText, oDlg, lEnd | Reorganiza( oMeter, oText, oDlg, @lEnd ) }

bAction := { | oMeter, oText, oDlg, lEnd | Reorganiza(oMeter,oText,oDlg, @lEnd, xTotalRegs ) }

MsgMeter(bAction,"Preparando...","Reorganização da base de dados")

Return Nil

Static Function Reorganiz(oMeter,oText,oDlg,lEnd,xTotalRegs)

oMeter:nTotal := xTotalRegs

oText:SetText("Indexando Arquivos!")

FERASE("BdOts.CDX")

GbDbf("BdOts","E",.F.)

BdOts->(__DbPack())

Index on os tag Ots_a //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+ata tag Ots_b //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+sgci tag Ots_c //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on projeto tag Ots_d //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+centro+anda+ata tag Ots_e //EVAL (oMeter:Set(Recno()),SysRefresh())

//Index on contrato+centro+ata tag Ots_e EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+pep tag Ots_f //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+gerobras tag Ots_g //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+centro+anda+dtos(pfim)+ata tag Ots_h //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+centro+anda+dtos(data1)+ata tag Ots_i //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+centro+anda+dtos(rfim)+ata tag Ots_j //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+centro+area+SUBSTR(ncontrole,3,2) tag Ots_k //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+centro tag Ots_l //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+os tag Ots_m //EVAL (oMeter:Set(Recno()),SysRefresh())

Index on contrato+centro+carteira tag Ots_n //EVAL (oMeter:Set(Recno()),SysRefresh())

BdOts->(DbCloseArea())

FERASE("BdAux.CDX")

GbDbf("BdAux","E",.F.)

BdAux->(__DbPack())

Index on os tag Aux_a //EVAL (oMeter:Set(Recno()),SysRefresh())

BdAux->(DbCloseArea())

return

STATIC function Indexaa(xTotalRegs)

local xRegs := 0

ContaRegs("BdOts",@xRegs,8)

xTotalRegs += xRegs

ContaRegs("BdAux",@xRegs,3)

xTotalRegs += xRegs

return(.t.)

STATIC function ContaRegs(xArquivo,xRegs,xIndices)

GbDbf(xArquivo,"E",.F.)

&xArquivo->(DbGoBottom() )

xRegs := &xArquivo->(Lastrec() ) * xIndices

&xArquivo->(DbCloseArea() )

return(.t.)

Geraldo Barbosa da Silva

FW 2.6 + Clipper 5.3b + Blinker 6.0 + WS 4.5

FWH 2.6 + xHarbour 0.99.50 (Simplex) + Bcc55 + Pelles + MyMake

Windows Xp SP2

lucgera@terra.com.br

Link to comment
Share on other sites

Olá,

Eu não gostei de gerar os índices com meter. O tempo de indexação aumentou muuuuuuuuuuuuuuuuuuuuito.

[]s,

Evandro G. de Paula

Curvelo - MG

evandro@skillnet.com.br (Escr. - na Cidade)

imortal@skillnet.com.br (Res. - na Roça)

FWH 2.5+PellesC+xBuild+xHarbour.org 0.99.3

PRESTIGIEM O III ENCONTRO DE USUÃRIOS DE FIVEWIN - 2005

Link to comment
Share on other sites

Bom dia!

eu faço desta forma, e realmente demora, mais nunca ninguém reclamou, bem vai lá:

FUNCTION CriaCdx()

PRIVATE qTotDbf:=DIRECTORY("DADOS\*.DBF","D")

PRIVATE qTotCdx:=DIRECTORY("DADOS\*.CDX","D")

PRIVATE ntotDbf:=0,nTotCdx:=0

PRIVATE oTxt1:=cTxt1:=oTxt2:=cTxt2:="Quero Testar esta função de indexação"

//deleta todos os cdx

AEVAL(DIRECTORY("DADOS\*.cdx"),{|aFile| FErase("DADOS\"+aFile[1])})

qTotDbf:=qTotCdx:=LEN(qTotDbf)-1

@ 25.3,38.1 SAY oTxt1 VAR cTxt1 SIZE 420,16 OF oWSig COLOR nRgb(0,0,0),nRgb(238,221,187)

@ 25.0,38.1 METER oMetDbf VAR nTotDbf TOTAL qTotDbf SIZE 420,20 BARCOLOR nRgb(0,0,255),nRgb(255,255,255) OF oWSig

@ 29.5,38.1 SAY oTxt2 VAR cTxt2 SIZE 420,16 OF oWSig COLOR nRgb(0,0,0),nRgb(238,221,187)

@ 29.0,38.1 METER oMetCdx VAR nTotCdx TOTAL qTotCdx SIZE 420,20 BARCOLOR nRgb(0,0,255),nRgb(255,255,255) OF oWSig

ScrolMeter()

(oTxt1:END(),oMetDbf:END(),oTxt2:END(),oMetCdx:END())

RETURN(NIL)

STATIC FUNCTION ScrolMeter()

LOCAL indexao:=0

while .T.

oMetDbf:Set(indexa)

IF indexa==1

oTxt1:SetText("Arquivo de Agenda / Calendário")

IF cDbf ; USE DADOS\arqagc NEW ; END

oMetCdx:nTotal:=RecCount()

oTxt2:SetText("Indexando o Arquivo Por Data")

INDEX ON DTOS(data)+user+hora TAG data EVAL (oMetCdx:Set(RecNo()),SysRefresh())

INDEX ON DTOS(data)+user+hora TAG datl FOR !lido EVAL (oMetCdx:Set(RecNo()),SysRefresh())

ELSEIF indexa = 2

oTxt1:SetText("Arquivo de Informações do Sistema")

IF cDbf ; USE DADOS\arqimp NEW ; END

oMetCdx:nTotal:=RecCount()

oTxt2:SetText("Indexando o Arquivo Por Situações")

INDEX ON estacao TAG estacao EVAL (oMetCdx:Set(RecNo()),SysRefresh())

END

FreeResources()

IF indexa <= qTotDbf ; indexa++

ELSE ; EXIT

END

END

RETURN(NIL)

pode haver algum erro, pois fui tirando algumas configurações do meu prg, qqc é só gritar

Abraços

Alessandro F. Silva - Ribeirão Preto/SP

aferracini@terra.com.br

FW2.0d + CL53b + Blinker 7.0 + @Say @Get

MSN: ferracini_silva@hotmail.com

Link to comment
Share on other sites

citação:

Olá,

Eu não gostei de gerar os índices com meter. O tempo de indexação aumentou muuuuuuuuuuuuuuuuuuuuito.

[]s,

Evandro G. de Paula

Curvelo - MG

evandro@skillnet.com.br (Escr. - na Cidade)

imortal@skillnet.com.br (Res. - na Roça)

FWH 2.5+PellesC+xBuild+xHarbour.org 0.99.3

PRESTIGIEM O III ENCONTRO DE USUÃRIOS DE FIVEWIN - 2005


id=quote>id=quote>

Evandro, tudo bem???

No início fiz um teste e realmente ficou 10 vezes mais lento.

Acho que foi o Rossine que me ajudou:

WPASSO:=RecCount()/100

INDEX ON ... EVAL .... EVERY WPASSO

Fiz outro teste com 500.000 registros e executou no mesmo tempo do Clipper puro.

Um abraço

Paulo Araújo

Clipper53b/FW26/Blinker70

Ajudar é um prazer, agradecer é uma obrigação

Link to comment
Share on other sites

Então pessoal o caso é esse, não precisa ser o Meter mas até usando o Pelles dá, pois o que acho que fica legal é total de registros x números de indices a cada DBF e totalizar tudo e montar algo que mostre a porcentagem por exemplo a cada 100/200/500 registros por exemplo.

Ainda vou tentar mas sei que tem muito fera por ai que pode ajudar os calças brancas como eu.

Obrigado.

Geraldo Barbosa da Silva

FW 2.6 + Clipper 5.3b + Blinker 6.0 + WS 4.5

FWH 2.6 + xHarbour 0.99.50 (Simplex) + Bcc55 + Pelles + MyMake

Windows Xp SP2

lucgera@terra.com.br

Link to comment
Share on other sites

Caro Geraldo

Para fazer e facil, so nao lhe aconselho a fazer isso, pois em um sistema que tenha mais ou menos 40 aquivos vai ficar lento de mais da conta.

Pois voce tera que abrir todos os arquivos somar os registros com Reccount(), e depois ir chamando a indexacao de um a um.

Tentei fazer isso uma vez, mas meu sistema nao suportou, pois tenho mais ou menos 400 arquivos em meu sistema, e imagina abrir e fechar isso duas vezes na entrada do sistema somente para indexar.

Marcelo Gomes

elitenet@terra.com.br

FW 2.3C/CLIPPER 5.2E/BLINKER 7.0

Link to comment
Share on other sites

Bom eu coloco todos os meu dbfs(os nomes) em vetores separados por setor tipos notas produtos contas a pagar etc...

e a medida que vai indexando mostra em um list box

o que foi indexado um meter logo a baixo

que inicia no primeiro e termina no ultimo mas eu fiz isso manualmente eu sei que no meu sistema tantos dbfs e fiz o numero de dbfs dividido por 100 e a cada dbf vai atualizando

qto a demora tenho clientes que demora um minuto ja outro

2 ou tres horas um dia vai ficar demorado

Marcelo Michels Alexandre

Criciúma - SC

Celo.michels@ibestvip.com.br

marcelo@lorenzi.com.br

Link to comment
Share on other sites

citação:Acho que foi o Rossine que me ajudou:

WPASSO:=RecCount()/100

INDEX ON ... EVAL .... EVERY WPASSO

Fiz outro teste com 500.000 registros e executou no mesmo tempo do Clipper puro.


id=quote>id=quote>

Olá Paulo, Blz, isso realmente fez com que ficasse bem mais rápido, valew pela dica.

Abraços.

Beto

betovsp@hotmail.com

(16)9148-1515

CL53B + FW2.0 + @ SAY + BLINKER 7

Ribeirão Preto/SP

Link to comment
Share on other sites

Eu sou mei lento

citação:

WPASSO:=RecCount()/100

INDEX ON ... EVAL .... EVERY WPASSO

Fiz outro teste com 500.000 registros e executou no mesmo tempo do Clipper puro.


id=quote>id=quote>

Nao entendi... tipo como eu adaptaria na minha rotina

oMeter1:nTotal = RecCount()

Index On Safche->Numche + SafChe->Numcta Tag Chedocto To Safche;

Eval ( oMeter1:Set( RecNo() ), SysRefresh() )

Eu nao quero juntar tudo.. quer fazer individual. sem problema iniciar.. agora esta ideia ae diz q deixa mais rapido.. como eu faço para adpatar nesta rotininha ae?

valeu

Um Xharbraço.

Uso Fwh 2.5 (xharbour 0.99.3) e Xmate Para Compilar

Link to comment
Share on other sites

citação:

Eu sou mei lento

citação:

WPASSO:=RecCount()/100

INDEX ON ... EVAL .... EVERY WPASSO

Fiz outro teste com 500.000 registros e executou no mesmo tempo do Clipper puro.


id=quote>id=quote>

Nao entendi... tipo como eu adaptaria na minha rotina

oMeter1:nTotal = RecCount()

Index On Safche->Numche + SafChe->Numcta Tag Chedocto To Safche;

Eval ( oMeter1:Set( RecNo() ), SysRefresh() )

Eu nao quero juntar tudo.. quer fazer individual. sem problema iniciar.. agora esta ideia ae diz q deixa mais rapido.. como eu faço para adpatar nesta rotininha ae?

valeu

Um Xharbraço.

Uso Fwh 2.5 (xharbour 0.99.3) e Xmate Para Compilar


id=quote>id=quote>

Jef, tudo bem??

WPASSO:=RecCount()/100

oMeter1:nTotal = RecCount()

Index On Safche->Numche + SafChe->Numcta Tag Chedocto To Safche;

Eval ( oMeter1:Set( RecNo() ), SysRefresh() ) EVERY WPASSO

Sem isso a indexação fica 6 VEZES MAIS LENTA.

Faça um teste num DBF com 500.000 registros. Marque o tempo com e sem essa dica e compare, lembrando que quem me ajudou foi o Rossine.

Um abraço

Paulo Araújo

Clipper53b/FW26/Blinker70

Ajudar é um prazer, agradecer é uma obrigação

Editado por - pauloaraujo on 07/12/2005 13:20:09

Link to comment
Share on other sites

Caros Amigos

Explicando a solucao passada e o seguinte:

A Clausula EVERY do index on e simplesmente um parametro que determina de quanto em quantos registros indexados o index on chamara a funcao do Eval.

Pois sem esta clausula o index on chama a funcao do eval a cada registro indexado.

Ex:

Voce passando como parametro o Resultado do calculo Reccount()/100 no exemplo acima com 500000 registros, voce estaria chamando a funcao para atualizar o meter a cada 5000 registros o que aumenta a velocidade de indexacao por chamar menos vezes a atualizacao do meter.

O Interessante neste caso e criar uma funcao que calcule isso variavelmente de acordo com o numero total de registros do arquivo, quando tiver muito aumenta o intervalo de atualizacao e quando tiver pouco diminui o intervalo, assim voce teria um ganho maior de velocidade quando o arquivo estiver cheio.

Pois dividindo por 100 no caso de 500000 registros o intervalo deveria ser maior de atualizacao do meter.

Marcelo Gomes

elitenet@terra.com.br

FW 2.3C/CLIPPER 5.2E/BLINKER 7.0

Link to comment
Share on other sites

realmente amigos, a diferença entre se usar um meter ou não é gritante...

tenho um arquivo aqui que criei para testes com 100.000 registros. Em clipper puro, compilado em 32 bits, ele demora 4 segundos para criar um índice CDX. Porém se eu utilizar uma meter com o fwh para demonstrar o andamento do processo de indexação, o tempo para finalização sobe para icon_smile_shock.gif 152 segundos !!!

estou mandando a rotina que criei para fazer o meter, naum utilizo a cláusula EVERY pois faço o cálculo e dou o set direto no eval.. mas acho que isso não influenciaria tanto assim na velocidade do processo...

ae vai:

#include 'fivewin.ch'

function Main()

local oDlg

local oMtr

local nPercent

request DBFCDX

rddsetdefault("DBFCDX")

dbsetdriver("DBFCDX")

DEFINE DIALOG oDlg FROM 1,10 TO 8,50 ;

TITLE OemToAnsi( "Teste de Meter para indexacao" )

nPercent := 0

oDlg:lHelpIcon := .F.

@ 01.0,01.8 METER oMtr VAR nPercent ;

TOTAL 100 ;

SIZE 135,10 ;

BARCOLOR CLR_BLUE, CLR_WHITE ;

OF oDlg

@ 01.8,05.0 BUTTON "&Iniciar" ;

ACTION Idxmtr(oMtr,nPercent) ;

SIZE 50,12

@ 01.8,14.5 BUTTON "&Desistir" ;

ACTION oDlg:End() ;

SIZE 50,12

ACTIVATE DIALOG oDlg CENTER

return NIL

static function Idxmtr(oMtr,nPercent)

if !file('TESTE.DBF')

? "O arquivo 'TESTE.DBF' nao foi encontrado."

else

select 1

use TESTE.DBF

endif

index on nomcam tag nomcam to index.cdx ;

eval ( oMtr:Set(int(RecNo()*100/RecCount())), SysRefresh())

return NIL

xharbraços a todos! =P

Guilherme Gonçalves

Campinas-SP

xHarbour 99.5/Bcc55/FWh2.5/Workshop

Link to comment
Share on other sites

Caro Guilherme

Seguindo as explicacoes que dei, desta forma que voce fez vai ficar muito lento mesmo.

Pois para o index on chamar o eval dando um set no meter a cada registro indexado vai levar tempo mesmo.

Mas se voce criar um intervalo de atualizacao do meter com a clausula every este tempo vai cair e muito!

Marcelo Gomes

elitenet@terra.com.br

FW 2.3C/CLIPPER 5.2E/BLINKER 7.0

Link to comment
Share on other sites

citação:

realmente amigos, a diferença entre se usar um meter ou não é gritante...

tenho um arquivo aqui que criei para testes com 100.000 registros. Em clipper puro, compilado em 32 bits, ele demora 4 segundos para criar um índice CDX. Porém se eu utilizar uma meter com o fwh para demonstrar o andamento do processo de indexação, o tempo para finalização sobe para icon_smile_shock.gif 152 segundos !!!

estou mandando a rotina que criei para fazer o meter, naum utilizo a cláusula EVERY pois faço o cálculo e dou o set direto no eval.. mas acho que isso não influenciaria tanto assim na velocidade do processo...

Guilherme Gonçalves

Campinas-SP

xHarbour 99.5/Bcc55/FWh2.5/Workshop


id=quote>id=quote>

Guilherme, tudo bem??

Eu iniciei a conversão dos meus sistemas exatamente pela indexação e fui comparar o desempenho entre o clipper puro e o FW com METER.

Quase desistí do FW (hehehehe).

Com a opção EVERY, igualei a velocidade entre o Clipper puro e o FW com METER:

Pentium 4 + 110.000 registros + 10 indices = 20 segundos.

Agora, esse tópico está fugindo de sua origem. Tenho certeza de já ter lido algo sobre o METER atuando em TODOS os TAGs de um DBF. Já pesquisei e não encontrei.

Um abraço

Paulo Araújo

Clipper53b/FW26/Blinker70

Ajudar é um prazer, agradecer é uma obrigação

Editado por - pauloaraujo on 07/12/2005 16:39:54

Link to comment
Share on other sites

OK. Impressionante Paulo! Apesar de óbvio, não tinha percebido que fazer a atualização do meter a cada registro indexado demorava tanto! Acrescentei a cláusula every no mesmo prg para atualizar o meter a cada 5000 registros e o tempo que antes era de mais de 100 segundos caiu para 5! icon_smile_shock.gif

Vlew pessoal!

xharbraços

Guilherme Gonçalves

Campinas-SP

xHarbour 99.5/Bcc55/FWh2.5/Workshop

Editado por - jbinfo on 09/12/2005 15:49:58

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...