Jump to content
Fivewin Brasil

Como fazer o Index com regua ???


gibaf

Recommended Posts

Ola a todos...

estou tendo dificuldades pra fazer o Index executar uma regua de processamento. Na verdade ate q consegui fazer, mas as vezes a % nao esta 100%. As vezes passa de 100%.

Segue, abaixo, detalhes de como estou utilizando:

OBS: observem q estou utilizando o TProgress() e nao o TMeter(), o q ja faz outro resultado... mas quero usar o TProgress() mesmo. Tambem nao coloquei todo o codigo, somente o principal, pra poder me fazer entender melhor.


*-----------------

Function Indexa()

*-----------------

@ 107,55 SAY oDescReg VAR cDescReg OF oDlg COLOR CLR_BLACK,CLR_WHITE FONT oFonSay SIZE 150,15 PIXEL

oRegAbre := TProgress():New(122,55,oDlg,0,CLR_BLACK,CLR_WHITE,.T.,.F.,140,10,)

@ 132,120 SAY oPercReg VAR cPercReg OF oDlg COLOR CLR_BLUE,CLR_WHITE FONT oFonSay SIZE 30,10 PIXEL

dbUseArea(.t. , wRddDad , cTabela , cAlias , .F. , .F.)

nRegistros := RecCount()

oRegAbre:SetRange(0,nRegistros) ; oRegAbre:nPosition := 0 ; oRegAbre:SetPos(0)

oDescReg:SetText( "Verificando Tabela/Ãndices: "+cTabela )

Index on &cChave TAG &cTag TO &(cIndice) WHILE ProgressIdx()

Return(Nil)

*--------------------------------------

Static Function ProgressIdx(_Registros)

*--------------------------------------

oRegAbre:nPosition += 1

oPercReg:SetText( AllTrim(Str( Round( ((oRegAbre:nPosition*100)/_Registros) , 0) )) + " %" )

Return(.T.)

id=code>id=code>

Sera q o WHILE do index nao passa certo conforme o numero de registros ??? Penso q seja isso... E se for isso, como fazer pro processamento fazer certo no 100% ?

Desde ja agradeco a ajuda: MUITO OBRIGADO !!!

Gilberto Frohlich - Toledo/PR

giba_f@hotmail.com

giba_f@yahoo.com.br

xHarbour xBuild+Fivewin 2.7+PellesC+(Postgres+DB2)

Link to comment
Share on other sites

Ola a todos...

estou tendo dificuldades pra fazer o Index executar uma regua de processamento. Na verdade ate q consegui fazer, mas as vezes a % nao esta 100%. As vezes passa de 100%.

Segue, abaixo, detalhes de como estou utilizando:

OBS: observem q estou utilizando o TProgress() e nao o TMeter(), o q ja faz outro resultado... mas quero usar o TProgress() mesmo. Tambem nao coloquei todo o codigo, somente o principal, pra poder me fazer entender melhor.


*-----------------

Function Indexa()

*-----------------

@ 107,55 SAY oDescReg VAR cDescReg OF oDlg COLOR CLR_BLACK,CLR_WHITE FONT oFonSay SIZE 150,15 PIXEL

oRegAbre := TProgress():New(122,55,oDlg,0,CLR_BLACK,CLR_WHITE,.T.,.F.,140,10,)

@ 132,120 SAY oPercReg VAR cPercReg OF oDlg COLOR CLR_BLUE,CLR_WHITE FONT oFonSay SIZE 30,10 PIXEL

dbUseArea(.t. , wRddDad , cTabela , cAlias , .F. , .F.)

nRegistros := RecCount()

oRegAbre:SetRange(0,nRegistros) ; oRegAbre:nPosition := 0 ; oRegAbre:SetPos(0)

oDescReg:SetText( "Verificando Tabela/Ãndices: "+cTabela )

Index on &cChave TAG &cTag TO &(cIndice) WHILE ProgressIdx()

Return(Nil)

*--------------------------------------

Static Function ProgressIdx(_Registros)

*--------------------------------------

oRegAbre:nPosition += 1

oPercReg:SetText( AllTrim(Str( Round( ((oRegAbre:nPosition*100)/_Registros) , 0) )) + " %" )

Return(.T.)

id=code>id=code>

Sera q o WHILE do index nao passa certo conforme o numero de registros ??? Penso q seja isso... E se for isso, como fazer pro processamento fazer certo no 100% ?

Desde ja agradeco a ajuda: MUITO OBRIGADO !!!

Gilberto Frohlich - Toledo/PR

giba_f@hotmail.com

giba_f@yahoo.com.br

xHarbour xBuild+Fivewin 2.7+PellesC+(Postgres+DB2)

Link to comment
Share on other sites

citação:

Qual o indice?

Se for CDX...


count to oMeter:nTotal

index on MEUCAMPO tag MINHATAG to (cMeuDBF) ;

eval ( oMeter:Set( RecNo() ), SysRefresh() ) every 100

id=code>id=code>

Obs.: Bastaria você adaptar para a TProgress

sambomb.jpg

RCA Sistemas - Itaocara - RJ


id=quote>id=quote>

sim... eh o CDX, sim !

hummm... vou tentar aki com o TProgress e ja posto o q deu...

obrigado !!!

Gilberto Frohlich - Toledo/PR

giba_f@hotmail.com

giba_f@yahoo.com.br

xHarbour xBuild+Fivewin 2.7+PellesC+(Postgres+DB2)

Link to comment
Share on other sites

citação:

citação:

Qual o indice?

Se for CDX...


count to oMeter:nTotal

index on MEUCAMPO tag MINHATAG to (cMeuDBF) ;

eval ( oMeter:Set( RecNo() ), SysRefresh() ) every 100

id=code>id=code>

Obs.: Bastaria você adaptar para a TProgress

sambomb.jpg

RCA Sistemas - Itaocara - RJ


id=quote>id=quote>

sim... eh o CDX, sim !

hummm... vou tentar aki com o TProgress e ja posto o q deu...

obrigado !!!

Gilberto Frohlich - Toledo/PR

giba_f@hotmail.com

giba_f@yahoo.com.br

xHarbour xBuild+Fivewin 2.7+PellesC+(Postgres+DB2)


id=quote>id=quote>

bah.... nao deu certo... nao faz 100%, tipo, a regua completou quando ainda esta 10%, ou o contrario, a regua nem chegou em 100% mas a % ja esta bem alem do 100%...

e agora ?

Gilberto Frohlich - Toledo/PR

giba_f@hotmail.com

giba_f@yahoo.com.br

xHarbour xBuild+Fivewin 2.7+PellesC+(Postgres+DB2)

Link to comment
Share on other sites

citação:

Olá

Mude de RecCount() para OrdKeyCount()

Vagner Wirts

bgprofilea.jpg

"Ele não sabendo que era impossível, foi lá e fez"


id=quote>id=quote>

Vagner ?

obrigado por responder...

mas, no meu caso, pelo menos na hora da indexacao, o LastRec(), RecCount() e o OrdKeyCount() sao sempre os mesmos valores...

Gilberto Frohlich - Toledo/PR

giba_f@hotmail.com

giba_f@yahoo.com.br

xHarbour xBuild+Fivewin 2.7+PellesC+(Postgres+DB2)

Link to comment
Share on other sites

citação:

Olá, veja se é isto que queres...

http://www.fivewin.com.br/exibedicas.asp?id=602

http://www.fivewin.com.br/exibedicas.asp?id=1032

João Santos - São Paulo.

joao@pleno.com.br

Fone: (11) 3106-2832

http://pt-br.facebook.com/people/Jo%C3%A3o-Santos/100001195894196

FWH 2.7 - xHARBOUR WorkShop.Exe


id=quote>id=quote>

João Santos ???

obrigado por responder...

no primeiro link q vc passou, a unica diferenca q vi eh q o total do processamento esta pegando o numero de registros, dividido por 100, mas tambem acontece o q escrevi acima:

citação:bah.... nao deu certo... nao faz 100%, tipo, a regua completou quando ainda esta 10%, ou o contrario, a regua nem chegou em 100% mas a % ja esta bem alem do 100%...
id=quote>id=quote>

Gilberto Frohlich - Toledo/PR

giba_f@hotmail.com

giba_f@yahoo.com.br

xHarbour xBuild+Fivewin 2.7+PellesC+(Postgres+DB2)

Link to comment
Share on other sites

Veja \samples

WIN32?.PRG

Se não fica melhor do q com porcentagem.

Se voce atualizar sua versão para a mais recente, Linares criou um novo timpo de METER na indexação que é um show.

se não me engano, TMETEREX.PRG ou algo assim, procure no forum inter que você verá as telas de apresentação.

João Santos - São Paulo.

joao@pleno.com.br

Fone: (11) 3106-2832

http://pt-br.facebook.com/people/Jo%C3%A3o-Santos/100001195894196

FWH 2.7 - xHARBOUR WorkShop.Exe

Editado por - kapiaba on 24/01/2012 11:12:05

Link to comment
Share on other sites

citação:

Na hora da Indexação, vc retira o Set Dele ?

Vagner Wirts

bgprofilea.jpg

"Ele não sabendo que era impossível, foi lá e fez"


id=quote>id=quote>

antes do index eu dou um Pack...

mas acho q descobri o porque da nao bate o % com a regua...

assim:

imaginem q eu tenho uma tabela com 10 registros e o arquivo.cdx tem 3 tags, pra cada tag q vai ser indexado, ele passa pelos 10 registros... intao, se deixar assim, no set do TProgress(), oProgress:SetRange(0,10) e no WHILE do Index assim: oProgress:nPosition := RecNo() ate q faz, mas passa a regua 3 vezes, uma pra cada tag... nao deixa de cer correto, mas, pra questao de visualizacao, o interessante eh fazer o oProgress:SetRange(0,30), mas dae, nao achei a formula pro oProgress:nPosition := ??? fazer correto...

se alguem mais puder me ajudar, fico muito agradecido !!!

Gilberto Frohlich - Toledo/PR

giba_f@hotmail.com

giba_f@yahoo.com.br

xHarbour xBuild+Fivewin 2.7+PellesC+(Postgres+DB2)

Link to comment
Share on other sites

citação:

Set Range(o,OrdKeyCount()*Quantidade de Tag)

Vagner Wirts

bgprofilea.jpg

"Ele não sabendo que era impossível, foi lá e fez"


id=quote>id=quote>

Vagner ??

obrigado por responder...

mas, o esse tambem nao foi o problema...

o problema esta no achar a formula pro oProgress:nPosition := ???

Obrigado !!!

Gilberto Frohlich - Toledo/PR

giba_f@hotmail.com

giba_f@yahoo.com.br

xHarbour xBuild+Fivewin 2.7+PellesC+(Postgres+DB2)

Link to comment
Share on other sites

Olá amigo, analisando parte de seu codigo postado, na função

"ProgressIdx(_Registros)", ela recebe parametro e quando vc chama vc passa sem parametros,"Index on &cChave TAG &cTag TO &(cIndice) WHILE ProgressIdx()", logo, neste caso _Registros vai ser sempre zero.

Sugiro que vc altere:

nRegistros := RecCount() para;

nRegistros := RecCount() * Número de TAG se for mais de um indice.

Index on &cChave TAG &cTag TO &(cIndice) WHILE ProgressIdx() para;

Index on &cChave TAG &cTag TO &(cIndice) WHILE ProgressIdx(nRegistros)

veja se ajuda.

Link to comment
Share on other sites

citação:

Olá amigo, analisando parte de seu codigo postado, na função

"ProgressIdx(_Registros)", ela recebe parametro e quando vc chama vc passa sem parametros,"Index on &cChave TAG &cTag TO &(cIndice) WHILE ProgressIdx()", logo, neste caso _Registros vai ser sempre zero.

Sugiro que vc altere:

nRegistros := RecCount() para;

nRegistros := RecCount() * Número de TAG se for mais de um indice.

Index on &cChave TAG &cTag TO &(cIndice) WHILE ProgressIdx() para;

Index on &cChave TAG &cTag TO &(cIndice) WHILE ProgressIdx(nRegistros)

veja se ajuda.


id=quote>id=quote>

obrigado por responder... o codigo q postei no inicio ja esta bem alterado... vou postar, mais ou menos, como esta atualmente (o meu problema eh achar a formula na linha abaixo, negritata)


*-----------------

Function Indexar()

*-----------------

dbUseArea(.t. , wRddDad , cTabela , cAlias , .F. , .F.)

Trava( cAlias , .f. )

__dbPack()

DesTrava()

nPercReg := RecCount() * nTags // 10 * 3 = 30

oProgress:SetRange(0,nPercReg) ; oProgress:nPosition := 0 ; oProgress:SetPos(0)

dbSelectArea(cAlias) ; dbSetOrder(0)

Index on &cChave1 TAG &cTag1 TO &(cIndice) WHILE ProgressIdx(RecNo(),nPercReg,nTags) // 1a Tag

Index on &cChave2 TAG &cTag2 TO &(cIndice) WHILE ProgressIdx(RecNo(),nPercReg,nTags) // 2a Tag

Index on &cChave3 TAG &cTag3 TO &(cIndice) WHILE ProgressIdx(RecNo(),nPercReg,nTags) // 3a Tag

Return(Nil)

*----------------------------------------------

Static Function ProgressIdx(_Atual,_Total,_Tag)

*----------------------------------------------

oProgress:nPosition := _Atual

// aqui q estou com o problema , pois nao queria q a regua processasse 3 vezes,

// e sim apenas uma, mas multiplicado o numero de registros pelo numero de tags...

Return(.T.)

id=code>id=code>

Gilberto Frohlich - Toledo/PR

giba_f@hotmail.com

giba_f@yahoo.com.br

xHarbour xBuild+Fivewin 2.7+PellesC+(Postgres+DB2)

Link to comment
Share on other sites

citação:

Olá

nPosAtu := 0

Set Range(0,OrdKeyCount()*Quantidade de Tag))

Inde On .... Whil Posiciona()

Static Func Posiciona()

oProgress:nPosition := (++nPosAtu)

Retu(.T.)

Vagner Wirts

bgprofilea.jpg

"Ele não sabendo que era impossível, foi lá e fez"


id=quote>id=quote>

Vagner ???

eu tinha feito exatamente como vc sugere... mas parece q o oProgress:nPosition +=1 conta mais rapido do q pular de registro para outro, ou seja o oProgress:nPosition pode ja estar em 10, inquanto o recno esta ainda no primeiro... ESSE EH O MEU PROBLEMA !!! hehehehe

citação:

bah.... nao deu certo... nao faz 100%, tipo, a regua completou quando ainda esta 10%, ou o contrario, a regua nem chegou em 100% mas a % ja esta bem alem do 100%...


id=quote>id=quote>

Gilberto Frohlich - Toledo/PR

giba_f@hotmail.com

giba_f@yahoo.com.br

xHarbour xBuild+Fivewin 2.7+PellesC+(Postgres+DB2)

Link to comment
Share on other sites

Seguindo a sua linha de raciocinio, neste caso sugiro:

Index on &cChave1 TAG &cTag1 TO &(cIndice) WHILE ProgressIdx(RecNo(),nPercReg,nTags) // 1a Tag

Index on &cChave2 TAG &cTag2 TO &(cIndice) WHILE ProgressIdx(RecCount()+RecNo(),nPercReg,nTags) // 2a Tag

Index on &cChave3 TAG &cTag3 TO &(cIndice) WHILE ProgressIdx((RecCount()*2)+RecNo(),nPercReg,nTags) // 3a Tag

Assim imagine que o dbf tem 100 registros, no primeiro indice ele vai até 100, no segundo vc soma 100(=Reccount())+reg atual, ele vai 101 ate 200, no terceiro vc dobra 200 (=reccount()*2) + rec atual, vai do 201 ao 300. Ai é só aplicar a regra três simples....

Link to comment
Share on other sites

Dica:


MsgMeter( { | oMeter, oText, oDlg, lEnd | ;

BuildIndex( oMeter, oText, oDlg, @lEnd, "SEUDBF->CAMPO", "CHAVECDX" ) },;

"Classificando. Aguarde...", "Espere um momento!" )

FUNCTION BuildIndex( oMeter, oText, oDlg, lEnd, campo, bolsa )

LOCAL a_Filds := dbstruct()

oDlg:lHelpIcon := .f.

nScan := ASCAN(a_Filds, {|nCel|ALIAS()+"->"+nCel[1] = campo})

IF nScan = 0

nScan := ASCAN(a_Filds, {|nCel|nCel[1] $ campo})

IF nScan = 0

*MsgAlert("Campo "+campo+" não existe.","Aviso")

RETURN NIL

ENDIF

ENDIF

oMeter:nTotal = RecCount()

OrdSetFocus(0)

INDEX ON &(Campo) TAG &(Bolsa) TO &(ALIAS()) ;

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

RETURN NIL

id=code>id=code>

ariston.jpg

Conheça o Pacote Fivewin em http://www.arsoft-ap.com.br - "Leia a Bíblia diariamente"

Editado por - j_arist on 24/01/2012 21:30:14

Link to comment
Share on other sites

citação:

Seguindo a sua linha de raciocinio, neste caso sugiro:

Index on &cChave1 TAG &cTag1 TO &(cIndice) WHILE ProgressIdx(RecNo(),nPercReg,nTags) // 1a Tag

Index on &cChave2 TAG &cTag2 TO &(cIndice) WHILE ProgressIdx(RecCount()+RecNo(),nPercReg,nTags) // 2a Tag

Index on &cChave3 TAG &cTag3 TO &(cIndice) WHILE ProgressIdx((RecCount()*2)+RecNo(),nPercReg,nTags) // 3a Tag

Assim imagine que o dbf tem 100 registros, no primeiro indice ele vai até 100, no segundo vc soma 100(=Reccount())+reg atual, ele vai 101 ate 200, no terceiro vc dobra 200 (=reccount()*2) + rec atual, vai do 201 ao 300. Ai é só aplicar a regra três simples....


id=quote>id=quote>

isso mesmo !!! na veia !!! Maravilha !!! ficou 100%

muitissimo obrigado a todos q, de alguma forma ou outra, ajudaram !!!

[]'s

Gilberto Frohlich - Toledo/PR

giba_f@hotmail.com

giba_f@yahoo.com.br

xHarbour xBuild+Fivewin 2.7+PellesC+(Postgres+DB2)

Link to comment
Share on other sites

Retirei tudo o q tinha feito, devido a um unico problema: ficou muuuuuuuuito lento indexar.

Foi testado e cronometrado com e sem. Sem fez em 50"... com fez em 9'23"... ISSO MESMO (nove minutos e vinte e três segundos) !!!!

[]'s

Gilberto Frohlich - Toledo/PR

giba_f@hotmail.com

giba_f@yahoo.com.br

xHarbour xBuild+Fivewin 2.7+PellesC+(Postgres+DB2)

Link to comment
Share on other sites

citação:

Retirei tudo o q tinha feito, devido a um unico problema: ficou muuuuuuuuito lento indexar.

Foi testado e cronometrado com e sem. Sem fez em 50"... com fez em 9'23"... ISSO MESMO (nove minutos e vinte e três segundos) !!!!

[]'s

Gilberto Frohlich - Toledo/PR

giba_f@hotmail.com

giba_f@yahoo.com.br

xHarbour xBuild+Fivewin 2.7+PellesC+(Postgres+DB2)


id=quote>id=quote>

Realmente isso ocorre, mesmo em DOS puro, vc coloca alguma coisa para apresentar na tela demora mais, mas pelo menos o usuário vê que está funcionando e não desliga o micro pensando que travou, ainda mais com o Windows, que qndo está se fazendo uma operação sem apresentar nada na tela é só vc clicar na tela que ele abre um aviso que o programa não está respondendo.

Vagner Wirts

bgprofilea.jpg

"Ele não sabendo que era impossível, foi lá e fez"

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...