DBF REDE/WEB WINDOWS 7/10/11

DBF REDE/WEB WINDOWS 7/10/11

Postby wanderson8 » Sun Jan 08, 2023 3:10 pm

Prezados amigos , eu fiz uma pergunta para ao Antônio Linares referente ao acesso lento dos dbf´s na rede Windows ,em especial quando e realizado um loop, dentro de outro loop em uma mesmo dbf pelo meu sistema compilado em fivewin 22.03/xharbour 1.2.3/BCC 7.3 em rede Windows 7/10/11 PRO , ele me disse isso seria devido a rede do Windows a execução sistema em local e muito rápido , ja na rede e extremamente lenta , exemplo no pc local 7-10 segundos , na rede 7-10 minutos. se alguem tiver uma solução e mas a solução de usar parte desses dados em web como no MOD_HARBOUR tenho interesse de adquirir essa solução

Fiz uma tentativa no LETO e obtive uma melhora de 7-10 minutos para 1 minuto , mas tive muito problema na utilização do leto em relação a indexação dos arquivos que tem relacionamento com outro arquivo como set relation.

Se alguem tiver uma solução em xharbour ou C para eu possa compilar no meu sistema , tenho interesse de adquirir essa solução.



FUNCTION TESTE
LOCAL oPan
PUBLIC cPasta
PUBLIC cServer
PUBLIC cCOMP

cPasta := ".\dados"
cServ := Space(1)
cCOMP := "01/2021" // Space(7)

REQUEST LETO
RDDSETDEFAULT( "LETO" )


IF IsExeRunning( "letodb.exe" )
RETURN MsgStop( "O programa servidor já está aberto neste computador!", "Impossível Continuar!" )
ELSE
ShellExecute( 0, "open", "letodb.exe",,, )
MsgInfo( "Sistema Leto em Atividade" )
ENDIF




cServer:="//192.168.1.165:2812/"
/*
IF LETO_CONNECT(cServer)==-1
MsgStop( "Não possivel conectar com o Servidor " + cServer )
ELSE
MsgStop( "Conecção Concluida com Sucesso com Servidor "+ cServer )
ENDIF
*/

leto_disconnect()
nConect := Leto_Connect( cServer, "", "",, 200 )
if nConect=-1
nRes:=Leto_connect_Err()
if nRes == 2
MsgStop("Falha ao logar",5)
elseif nRes==4
MsgStop("Falha ao conectar",5)
elseif nRes==5
MsgStop("Falha de envio",5)
else
MsgStop("Erro ao conectar -1 "+str(nres,5),3)
end
else
MsgInfo( "conectou" )

end




if MsgGet( "Informar"," Digite <ENTER> p/ Servidor : ", @cServ,;
".\bitmaps\computer7.bmp" )
IF !Empty(cServ)
cPasta := "\\servidor\c\rededb\dados"
ENDIF

ENDIF

if MsgGet( "Informar"," Competencia 99/9999 : ", @cCOMP,;
".\bitmaps\calend10.bmp" )

ENDIF

// IF Empty( cServ )
// cServer := "//127.0.0.1:2812/REDEDB/DADOS"
// ELSE
// cServer := "//" + cPath + Iif( Right(cPath,1) $ "/\", "", "/" )
// ENDIF



//SET DEFAULT TO &(ALLTRIM(cPasta))

// MsgStop (" Caminho dos Arquivos - " + cPasta )

oPan := SWPanelWindow( "Aguarde Inicializando...." )

SYSREFRESH()

cTIME:= TIME()

// IF empty(cServ)
// cServer:=""
// ENDIF

MsgStop( cServer )
/*
// RddSetDefault("RMDBFCDX")
// DBSETDRIVER("RMDBFCDX")

MsgInfo( "-"+(cSERVER + "MULTIFUN"+"-") )

cPath = "C:\REDEDB"
aArq ="MULTIFUN" // - contém o nome do arquivo DBF
cDbf =".DBF" // - extensao

cCaminho = "//192.168.1.165:2812/multifun.dbf"
cAlias = "MULTIFUN"

SELECT 1
dbUseArea( .F.,DBSETDRIVER(), cCaminho, cAlias,.F.,.F.)
// cPath = Caminho do LetoDB
//aArq - contém o nome do arquivo DBF

*/

//cSERVER = cSERVER + "dados/"
? (cSERVER + "MULTIFUN")

//SELECT 1
USE (cSERVER + "MULTIFUN.DBF") NEW //SHARED
INDEX ON COD_AVUL TAG TAG_001 TO IND001
INDEX ON NOMFUN TAG TAG_002 TO IND002
DBSETINDEX("IND001")

SELECT 2
USE (cSERVER + "ARQSIND.DBF") NEW // SHARED

SELECT 3
USE (cSERVER + "MULTIEMP.DBF") NEW //SHARED
INDEX ON CODEMP TAG TAG_003 TO IND003
DBSETINDEX("IND003")


SELECT 4
USE (cSERVER + "ARQBOLET.DBF") NEW //SHARED
INDEX ON COD_AVUL+COD_EMPRES+MES_REF+DTOS(DT_BOLETIM) TAG TAG_004 TO IND004 TEMPORARY
DBSETINDEX("IND004")


SELECT 5
USE (cSERVER + "ESOCEVEN.DBF") NEW //SHARED
INDEX ON CODI_INSCR+COD_EVENTO TAG TAG_005 TO IND005
DBSETINDEX("IND005")


SELECT 7
USE (cSERVER + "ARQPRODE.DBF") NEW //SHARED
INDEX ON COD_PRODES TAG TAG_007 TO IND007

SELECT 8
USE (cSERVER + "MULTISER.DBF") NEW //SHARED
INDEX ON CODSER TAG TAG_008 TO IND008

SELECT 9
USE (cSERVER + "RETIDO.DBF") NEW //SHARED

SELECT 10
USE (cSERVER + "ARQMES.DBF") NEW //SHARED

cCompetencia:="01/2021"

cStr="Tempo Abertura de DBFs: " + Transf(ElapTime(cTime,TIME()),"@k 99:99:99")


SWPanelRefresh( oPan, cStr )
inkey(1)

SWPanelClose( oPan )

? 'Tempo da leitura dos registros: ' + CRLF +;
ElapTime(cTime,TIME()) + CRLF +;
NETNAME()

SELECT MULTIFUN
MULTIFUN->(DBSETORDER(1))
MULTIFUN->(DBGOTOP())
MULTIFUN->(DBSEEK("00132"))

? MULTIFUN->NOMFUN , MULTIFUN->CODFUN

SELECT 1
MULTIFUN->(DBSETORDER(1))
MULTIFUN->(DBGOTOP())
MULTIFUN->(DBSEEK("38251"))




TESTA_PROCESSO_01(cCompetencia)

RETURN NIL


FUNCTION TESTA_PROCESSO_01(cCompetencia)
LOCAL aRet := {}
LOCAL dData
LOCAL nSele := Select()
LOCAL cAvulso
LOCAL cField, nLen
LOCAL oMes,oEmp,oAvu
LOCAL oPan, aCargo, cAno,lAllOk, nPos, aTemp, a
// LOCAL cComp
LOCAL nConti:=0
LOCAL nContador :=0
LOCAL nContador2:=0
local lEnd := .f.


PUBLIC cComp
PUBLIC cMesANO


oPan := SWPanelWindow( "Função Testa Processo 01 - DBF ...." )

cMesAno :="01/2021"


dData := Ctod( "15/"+cMesAno )
cAno := Right( cMesAno,4 )

cCompetencia := "01/2021" // cMonth( dData )+"/"+cAno
// oMes := oTree:Add( cCompetencia,0 ) // Item Raiz do tree

cField := Upper( "MOV_"+Substr(cCompetencia,1,3) )

// MsgStop( cCompetencia )

// "SWPanelRefresh( oPan, "Abrindo movimento..." )

aReport := {} // eroni - para o relatorio
cComp := Substr(cMesAno,1,2) + Substr(cMesAno,6,2)

// SELECT RETIDO
// RETIDO->(DBSETORDER(8))
// RETIDO->(OrdScope( 0, NIL ) )
// RETIDO->(OrdScope( 1, NIL ) )
// RETIDO->(OrdScope( 0, cComp+"00001"+"0001"+"001" ) )
// RETIDO->(OrdScope( 1, cComp+"99999"+"9999"+"999" ) )
// RETIDO->(DBGOTOP())
// xbrowse()

cTime :=TIME()



SELECT RETIDO
Index On COD_AVUL+COD_EMPRES+COD_PRODES TAG TEMP_1 FOR (Deleted() == .F. .AND. MES_ANO == "0121" ) TO RET_TEMP TEMPORARY
DbSetIndex( "RET_TEMP" )
RETIDO->(DBGOTOP())


DO WHILE !EOF()

ncontador++

SKIP

ENDDO

? 'Tempo da leitura dos registros: ' + CRLF +;
ElapTime(cTime,TIME()) + CRLF +;
NETNAME() + CRLF +;
ALLTRIM(STR(nContador)) +' Total Registros Filtrados'


nContador:=0
// xbrowse()

// Index On COD_AVUL+COD_EMPRES+COD_PRODES TAG TEMP_1 FOR (Deleted() == .F. .AND. MES_ANO == cComp ) TO RET_TEMP TEMPORARY
// DbSetIndex( "RET_TEMP" )
DbSetIndex( "RET_TEMP" )
RETIDO->(DBGOTOP())

DO WHILE !EOF()
SYSREFRESH()


cAvulso := RETIDO->Cod_Avul
// oAvu := oMes:Add( cAvulso+"-"+NOMEFUNC( cAvulso ),1 ) // item nivel 1 do tree
aTemp := {}

DO WHILE cAvulso == RETIDO->Cod_Avul .AND. !EOF()

SYSREFRESH()

aCargo := {}
nCont := 1
lAllOk := .T.
cEmpresa := RETIDO->COD_EMPRES
nConti=nConti+1

SWPanelRefresh( oPan,"Calculando....Qtde= "+"("+ Strzero(nconti,5) +")" +" Codigo Trab.: "+ RETIDO->COD_AVUL )

DO WHILE cAvulso == RETIDO->Cod_Avul .AND. cEmpresa == RETIDO->COD_EMPRES // .AND. !EOF()

SYSREFRESH()
nContador++

nValor := RETIDO->IMPOSTO //_Verif_Movimen_Esoc(cMesAno)
aDados := _PegaDadosEnviados( "S-1200",cEmpresa, cAvulso,RETIDO->COD_PRODES,@lAllOk,nValor, ,NomeFunc( cAvulso ), NomeProv(cEmpresa), cComp )
AADD( aCargo, aDados )
AADD( aReport, aDados )// eroni - para o relatorio


// If Mod(nContador,100)==0 // ALTEREI AQUI
// ThreadSleep(1)
// EndIf


Retido->(dbSkip())

ENDDO

// SKIP -1

// oEmp := oAvu:Add( cEmpresa+"-"+RetornaNomeEmpresa( cEmpresa ),IF( lAllOk,2,3 ) ) // Item nivel 2 do tree
//oEmp:Cargo := aCargo

// Totalizar os valores por codprodes de todas as empresas e atualizar situação
FOR a := 1 to Len( aCargo )
SYSREFRESH()
nContador2++

IF Upper( Alltrim(aCargo[ a,4 ])) <> "CONFIRMADO"
aCargo[ a,4 ] := "PREPARADO"
ENDIF
IF ( nPos := Ascan( aTemp,{|x,y| x[5] == aCargo[ a,5 ] } ) ) > 0
aTemp[ nPos,7 ] += aCargo[ a,7 ] // valor
aTemp[ nPos,4 ] := aCargo[ a,4 ] // situação
ELSE
AADD( aTemp,{ aCargo[ a,1 ],aCargo[a,2],aCargo[ a,3 ],aCargo[ a,4 ],aCargo[ a,5 ],aCargo[ a,6 ],aCargo[ a,7 ] } )
ENDIF
NEXT a
// Retido->(dbSKIP())

ENDDO

// oAvu:Cargo := aTemp

// Retido->(dbSKIP())
ENDDO

SWPanelClose( oPan )


? 'Tempo da leitura dos registros: ' + CRLF +;
ElapTime(cTime,TIME()) + CRLF +;
NETNAME() + CRLF +;
ALLTRIM(STR(nContador)) + ' Total de Registros Processados ' + CRLF +;
ALLTRIM(STR(nContador2)) + ' Total de Registros Processados ' + CRLF +;
ALLTRIM(STR(nConti)) +' Total Trabalhadores'

RETURN NIL

STATIC FUNCTION _PegaDadosEnviados( cRegistro,cEmpresa, cAvulso, cCodProDes, lConfirmado, nValor, dDataPagto,cNomeTrab,cNomeProv, cComp )
LOCAL aRet
LOCAL nSele := Select()
LOCAL cSeek, nOrdem

//? cAvulso , cRegistro , cAvulso+cRegistro

DEFAULT dDataPagto := ""

// MsgStop( cComp )
IF Empty( cEmpresa )
nOrdem := 1 // 4
cSeek := cAvulso + cRegistro
//? "Ordem 1"
ELSE
nOrdem := 7 // 2
cSeek := Padr( Alltrim(cEmpresa)+ Alltrim( cAvulso ) ,14 )+ cRegistro
ENDIF

SELECT ESOCEVEN
DBSETINDEX("IND005")
// ESOCEVEN->( DBSETORDER( nOrdem ) )
ESOCEVEN->( DBGOTOP() )
// ? cSeek

IF ESOCEVEN->( DBSEEK( cSeek ) )
aRet := { cEmpresa,cAvulso,ESOCEVEN->CHA_EVENTO,ESOCEVEN->SIT_EVENTO, cCodProDes,RetornaNomeRubrica( cCodProDes ), nValor, dDataPagto,cNomeTrab,cNomeProv }

IF Upper(Alltrim( ESOCEVEN->SIT_EVENTO )) <> "CONFIRMADO"
lConfirmado := .F.
ENDIF
ELSE
aRet := { cEmpresa,cAvulso,Space(36),"PREPARADO", cCodProDes,RetornaNomeRubrica( cCodProDes ), nValor,dDataPagto,cNomeTrab,cNomeProv }
lConfirmado := .F.
ENDIF

Select( nSele )


RETURN( aRet )



FUNCTION RetornaNomeEmpresa( cCodigo )
LOCAL nSele := Select()
LOCAL cNome := Space(40)

SELECT MULTIEMP
MULTIEMP->(DBSETORDER(1))
MULTIEMP->(DBGOTOP())

IF MULTIEMP->(DBSEEK(STRZERO(VAL(cCodigo),4)))
cNome := MULTIEMP->NOMEMP
ENDIF

Select( nSele )

RETURN( cNome )

//----------------------------------------------------------------------------//

FUNCTION RetornaNomeRubrica( cCodigo )
LOCAL nSele := Select()
LOCAL cNome := Space(40)

SELECT ARQPRODE
ARQPRODE->(DBSETORDER(1))
// ARQPRODE->(DBGOTOP())

IF ARQPRODE->(DBSEEK(STRZERO(VAL(cCodigo),3)))
cNome := ARQPRODE->DES_PRODES
ENDIF

Select( nSele )

RETURN( cNome )
//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//
Function NomeFunc(oCod)
Local MyDb, nRet

nRet := space(40)

MyDb:= Select()
SELECT MULTIFUN
MULTIFUN->(DBSETORDER(1))
if MULTIFUN->(DbSeek(oCod) )
nRet:=Alltrim(MULTIFUN->NOMFUN)
endif
Select(MyDb)

Return nRet
//--------------------------------------------------------------------------//
//----------------------------------------------------------------------------//
FUNCTION NomeProv(cCodigo)
LOCAL nSele := Select()
LOCAL cEmpresa := STRZERO(VAL(cCodigo),3)
SELECT ARQPRODE
ARQPRODE->(DBSETORDER(1))
if ARQPRODE->(Dbseek(cEmpresa))
cEmpresa:=ARQPRODE->DES_PRODES
else
cEmpresa:=SPACE(30)
endif
Select( nSele )
RETURN(cEmpresa)

//----------------------------------------------------------------------------//
Contato: Wanderson
WathsApp 55-34-99953-1534 - skype: wanderson.medeiros5 - e-mail: sintrampontal@gmail.com
wanderson8
 
Posts: 1
Joined: Mon Dec 12, 2022 2:12 am

Return to All products support

Who is online

Users browsing this forum: No registered users and 10 guests