quarta-feira, 15 de fevereiro de 2012
Meter em index
Com certeza tem algo melhor e mais adequado, mas quebra o galho.
**------------------------------------------------------------------------------**
** Finalidade : Gerar Indices de arquívos DBC/NTX
** Autor : S.A.Oliveira
** Atualizado : 17/09/2011 17:15:00
**------------------------------------------------------------------------------**
FUNCTION Indices_DBC()
#include 'fivewin.ch'
**------------------------------------------------------------------------------**
PRIVATE oBotIndices[3],NoEscIndices:=.f.
PRIVATE Msg1_Indices:="Atenção !!!"
PRIVATE Msg2_Indices:="Este procedimento deve ser feito em modo exclusivo."
PRIVATE Msg3_Indices:=Space(40)
PRIVATE Msg4_Indices:=Space(40)
PRIVATE nTotal:=0,nTot:=0,gTot:=0,nReg:=0,iReg:=0, iTotal
nTot:=Len(DIRECTORY(nDir+"\ARQUIVOS\*.DBC"))
gTot:=Len(DIRECTORY(gDir+"\ARQUIVOS\*.DBC"))
AbreArquivo(nDir,"ARQLFS","LFS",0,.T.)
LFS->(OrdSetFocus(2))
IF(LFS->(DBSeek(CToD('13/10/2011'))))
WHILE(LFS->(!Eof()))
IF(LFS->a_notlfs < 1000000)
WHILE(LFS->(!RLock())) ; ENDDO
LFS->a_notlfs:=LFS->a_notlfs + 1000000
LFS->(DBUnlock())
ENDIF
LFS->(DBSkip(1))
ENDDO
ENDIF
LFS->(DBCommit())
FechaAlias("LFS")
DEFINE DIALOG oDlgIndices RESOURCE "_TELA_INDICES" OF oWnd
oDlgIndices:lTransparent:=.F.
oDlgIndices:lHelpIcon:=.f.
oDlgIndices:oFont:=oPub:fNorm11
oDlgIndices:SetColor(oPub:CorPreto,oPub:CorDlg)
REDEFINE SAY ID 100 OF oDlgIndices FONT oPub:fBCour22 COLOR oPub:CorDlg,oPub:CorAzulT
REDEFINE SAY ID 103 OF oDlgIndices FONT oPub:fNorm11 COLOR oPub:CorPreto,oPub:CorDlg
REDEFINE SAY ID 105 OF oDlgIndices FONT oPub:fNorm11 COLOR oPub:CorPreto,oPub:CorDlg
REDEFINE SAY OMsg1_Indices VAR Msg1_Indices ID 101 OF oDlgIndices FONT oPub:fBCour22 COLOR oPub:CorVermelho,oPub:CorDlg UPDATE
REDEFINE SAY OMsg2_Indices VAR Msg2_Indices ID 102 OF oDlgIndices FONT oPub:fBCour14 COLOR oPub:CorAzul ,oPub:CorDlg UPDATE
REDEFINE SAY OMsg3_Indices VAR Msg3_Indices ID 104 OF oDlgIndices FONT oPub:fBCour13 COLOR oPub:CorPreto ,oPub:CorDlg UPDATE
REDEFINE SAY OMsg4_Indices VAR Msg4_Indices ID 106 OF oDlgIndices FONT oPub:fBCour13 COLOR oPub:CorPreto ,oPub:CorDlg UPDATE
REDEFINE METER oMeter VAR nReg TOTAL nTotal ID 201 OF oDlgIndices FONT oPub:fBCour13 COLOR oPub:CorDlg,oPub:CorPreto BARCOLOR oPub:CorAzulT,oPub:CorBranco UPDATE
REDEFINE METER oMeter1 VAR iReg TOTAL nTotal ID 202 OF oDlgIndices FONT oPub:fBCour13 COLOR oPub:CorDlg,oPub:CorPreto BARCOLOR oPub:CorAzulT,oPub:CorBranco UPDATE
REDEFINE BUTTONBMP oBotIndices[1] ID 501 OF oDlgIndices ACTION(ReindexarArquivos(1))
REDEFINE BUTTONBMP oBotIndices[3] ID 503 OF oDlgIndices ACTION(NoEscIndices:=.T.,oDlgIndices:END())
ACTIVATE DIALOG oDlgIndices CENTER Valid(noEscIndices)
SysWait(0.05)
RETURN(NIL)
**----------------------------------------------------------**
STATIC FUNCTION ReindexarArquivos(Arg1)
**----------------------------------------------------------**
IF(!MsgNoYes("Confirma gerar novos indices ?","Atenção"))
oBotIndices[3]:SetFocus()
RETURN(.T.)
ENDIF
ARQ:=DIRECTORY(nDir+"\ARQUIVOS\*.I*")
cIndices:=LEN(ARQ)
FOR X = 1 TO cIndices
IF(FErase(nDir+"\ARQUIVOS\"+ARQ[x,1]) <> 0)
Msgstop("Arquivo em uso por outro processo.","Atenção")
RETURN(.F.)
ENDIF
NEXT
ARQ:=DIRECTORY(gDir+"\INDICES\*.I*")
cIndices:=LEN(ARQ)
FOR X = 1 TO cIndices
IF(FErase(gDir+"\INDICES\"+ARQ[x,1]) <> 0)
Msgstop("Arquivo em uso por outro processo.","Atenção")
RETURN(.F.)
ENDIF
NEXT
t1:=Time()
Msg1_Indices:="Aguarde !!!" ; OMsg1_Indices:Refresh()
Msg2_Indices:="Este procedimendo levará alguns minutos." ; OMsg2_Indices:Refresh()
Msg3_Indices:="" ; OMsg3_Indices:Refresh()
oBotIndices[1]:Disable()
oBotIndices[3]:Disable()
oMeter:nTotal:=nTot+gTot
ReindexarArquivosEfetivo()
t2:=Elaptime(t1,Time())
oBotIndices[3]:Enable()
oBotIndices[3]:SetText("Finalizar") ; oBotIndices[3]:Enable()
Msg1_Indices:="Concluído !!!" ; OMsg1_Indices:Refresh()
Msg2_Indices:="Tempo decorrido: "+Subs(t2,1,8) ; OMsg2_Indices:Refresh()
Msg3_Indices:="" ; OMsg3_Indices:Refresh()
Msg4_Indices:="" ; OMsg4_Indices:Refresh()
RETURN(.T.)
**----------------------------------------------------------**
STATIC FUNCTION ReindexarArquivosEfetivo()
**----------------------------------------------------------**
**--[ Cabeçalho nota de entrada ]--** OK
IF(!File(nDir+"\ARQUIVOS\ARQCFE.I01"))
DBUseArea(.T.,"DBFNTX",(nDir+"\ARQUIVOS\ARQCFE.DBC"),,.F.,.F.)
Msg3_Indices:="Nota Entrada - Cabec" ; OMsg3_Indices:Refresh()
Msg4_Indices:="Controle" ; OMsg4_Indices:Refresh() ; BuildIndex(oMeter1,"a_ctrcfe",(nDir+"\ARQUIVOS\ARQCFE.I01"))
Msg4_Indices:="Fornecedor/Data" ; OMsg4_Indices:Refresh() ; BuildIndex(oMeter1,"Str(a_forcfe)+Descend(DToS(a_entcfe))",(nDir+"\ARQUIVOS\ARQCFE.I02"))
Msg4_Indices:="Fornecedor/Nº Nota" ; OMsg4_Indices:Refresh() ; BuildIndex(oMeter1,"Str(a_forcfe)+Str(a_notcfe)",(nDir+"\ARQUIVOS\ARQCFE.I03"))
Msg4_Indices:="Data Entrada" ; OMsg4_Indices:Refresh() ; BuildIndex(oMeter1,"a_entcfe",(nDir+"\ARQUIVOS\ARQCFE.I04"))
Msg4_Indices:="Código Fornecedor" ; OMsg4_Indices:Refresh() ; BuildIndex(oMeter1,"a_forcfe",(nDir+"\ARQUIVOS\ARQCFE.I05"))
Msg4_Indices:="Fornecedor/Nota/Data" ; OMsg4_Indices:Refresh() ; BuildIndex(oMeter1,"Str(a_forcfe)+Str(a_notcfe)+DToS(a_entcfe)",(nDir+"\ARQUIVOS\ARQCFE.I06"))
nReg+=1 ; oMeter:Refresh()
DBCloseArea()
ENDIF
RETURN(.T.)
*--------------------------------------------------------*
* meter para indices do sistemas *
*------------------------------- ------------------------*
STATIC Function BuildIndex(qMeter,cVar,cInd)
*--------------------------------------------------------*
qMeter:nTotal:=LastRec() //*5
INDEX ON &cVar TO &cInd ;
EVAL ( qMeter:Set( RecNo()),SysRefresh() ) EVERY 5000
qMeter:Set(LastRec())
qMeter:Refresh()
Return(.T.)
Assinar:
Postagens (Atom)