nardeypm Posted May 23, 2013 Author Report Share Posted May 23, 2013 mencionaram usar ads com dbf, mas não consegui localizar no forum como utilizar e o que eu preciso para implantar isso. essa lentidão tá me tirando do sério. se alguem puder me direcionar, agradeço. Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted May 23, 2013 Report Share Posted May 23, 2013 mencionaram usar ads com dbf, mas não consegui localizar no forum como utilizar e o que eu preciso para implantar isso. essa lentidão tá me tirando do sério. se alguem puder me direcionar, agradeço. Tb não consegui localizar os topico, e nem os exemplos postado pelo Giovany Vecchi, no link abaixo segue a LIB do Giovany com os fonte, e tem inclusive um Help criado por ele... embora o Gilmer mencionou acima que não tem que mudar nada no codigo, aqui so obtive sucesso depois que passei a usar comandos nativos do ADS , tipo no lugar do set filter, usar ADSSETAOF() entre outros detalhe que vc ira ver no manual criado pelo Giovany que esta no link abaixo... http://www.4shared.com/rar/qSiCOBae/xAds.html Abraços Luiz Fernando Quote Link to comment Share on other sites More sharing options...
marcioe Posted May 24, 2013 Report Share Posted May 24, 2013 amigo de boa de for para voce mudar de RDD, já mude para MYSQL ou outro banco de dados SQL.Pois pelo visto terá que mudar comandos, se for assim já mude para SQL de uma vez que acaba seu sofrimento.... Quote Link to comment Share on other sites More sharing options...
nardeypm Posted May 24, 2013 Author Report Share Posted May 24, 2013 Olá, Faça um teste e retire o #xcommand @ <nRow>,<nCol> SAY <cText> OF <oPrinter> => <oPrinter>:Say(<nRow>, <nCol>, <cText> ) vou testar e dou retorno..... Quote Link to comment Share on other sites More sharing options...
Ariston Santos Posted May 25, 2013 Report Share Posted May 25, 2013 Olá, amigo. Vejo que você usa algumas funções do meu "Pacote Fivewin". Por isso, resolvi entrar nessa. 1º - Não estou mais indexando mostrando um "progress bar" para todo o processos de indexação. Para indexar mais rápido, função BuildIndex() mudou para: 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 RETURN NIL ENDIF ENDIF oMeter:nTotal = RecCount() OrdSetFocus(0) oMeter:Set( (RecCount() / 10) * 9 ) // Pulo logo para 90% oMeter:Refresh() INDEX ON &(Campo) TAG &(Bolsa) TO &(ALIAS()) // Crio o Ãndice sem atualizar o Meter oMeter:Set( RecCount() ) // Pulo direto para 100% oMeter:Refresh() SysWait(0.1) // Espero 0.1 segundo só para mostrar o oMeter concluÃdo. Isso é desnecessário. RETURN NIL 2º - Não uso mais SET FILTER para selecionar dados ao gerar relatórios. Em vez disso uso Ãndice temporário, no PC local, com a tag WHILE. Por exemplo, se eu pretendo gerar um relatório de vendas, por perÃodo, mesmo que o DBF tenha milhares de registros, consigo "filtrar" os dados de um perÃodo curto - uma semana, por exemplo - em menos de um segundo, O exemplo abaixo mostra como faço o "filtro". // Criar um arquivo temporário único para Ãndice no PC local cTmpName := "" nFile := 1 cPasta := CurDrive()+":\"+GetCurDir()+"\DADOS" WHILE .T. cTmpName := cPasta+"\VNDTMP"+STRZERO(nFile,2)+".CDX" FERASE(cTmpName) if ! file(cTmpName) EXIT endif nFile ++ END cTmpName := "VNDTMP"+STRZERO(nFile,2) SET SOFTSEEK ON // Preciso localizar o valor mais proximo, não o exeto. SELECT 2 // DBF vendas VENDAS->(DBSETORDER(3)) // Ordem por DATA VENDAS->(DBSEEK(dIni)) // Localizo a data inicial (dIni) ou a mais próxima // Crio o indice temporário INDEX ON VENDAS->DATAMOV TAG DATAS TO &(cTmpName) WHILE( VENDAS->DATAMOV >= dIni .AND. VENDAS->DATAMOV <= dFim ) ordListClear() OrdListAdd(cTmpName, "VNDTMP01") SET SOFTSEEK OFF // Desligo o SOFTSEEK para que os próximos DBSEEKs localizem apenas valores exatos // SET FILTER TO VENDAS->... (Isso não existe mais.) VENDAS->(DBGOTOP()) WHILE ! VENDAS->(EOF()) // Impressão do relatório ... VENDAS->(DBSKIP()) END // Fecho e Reabrir VENDAS com os Ãndices corretos SELECT 2 CLOSE VENDAS SysWait(0.2) // Isso é só pra dar um tempinho para o PC "pensar". Desnecessário. SELECT 2 USE VENDAS SHARED ordListClear() OrdListAdd("VENDAS", "VENDCODI", "VENDCLIE", "VENDDATA", "VENDNCNT", "VENDPLAC", "VENDNCLI", "VENDNCCF") Seguindo as idéias acima, mesmo com DBF muito grandes (300 mil registros), os relatórios são muito rápidos. No entanto, vale ressaltar que, devido a fragilidade do DBF, também já estou migrando para banco de dados relacional. Optei pelo Firebird com SQLRDD, visto que até o BANCO DO BRASIL usa este. Quote Link to comment Share on other sites More sharing options...
mkyx Posted June 3, 2013 Report Share Posted June 3, 2013 Não sei se demorei para postar, mas SET FILTER TO , deixar o sistema muito lento, no CLIPPER é uma beleza, mas no FIVEWIN, nunca deve ser usado. Quote Link to comment Share on other sites More sharing options...
Arthur Silvestre Posted June 3, 2013 Report Share Posted June 3, 2013 Como disse, peguei esta rotina aqui mesmo no forum, talvez possso lhe ajudar, faça o teste: *--( Grava no registro do windows instrução para agilizar gravação em rede )--* Function TurbinaRede() local oReg oReg := TReg32():New( HKEY_LOCAL_MACHINE, "SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" ) oReg:Set("EnableOplocks", "00000000") oReg:Set("CachedOpenLimit", "00000000") oReg:Set("Autodisconnect", "ffffffff") oReg:Set("EnableOplockForceClose", "00000001") oReg:Set("MaxKeepSearch", "000000b4") oReg:Set("MinKeepSearch", "0000000a") oReg:Set("ScavTimeout", "0000000a") oReg:Set("ThreadPriority", "00000002") oReg:Close() * If MsgYesNo("É Necessário Reiniciar o Computador"+CRLF+"Deseja Reiniciar Agora?","Reiniciar") oWndMain:End() WinExec( "ShutDown -s" ) End * RETURN NIL * -------------------- * Alguém já testou isso aqui? Você já testou Rone? Quote Link to comment Share on other sites More sharing options...
Theotokos Posted June 3, 2013 Report Share Posted June 3, 2013 Alguém já testou isso aqui? Você já testou Rone? eu uso esta rotina, e realmente melhorou no meu caso... o problema que eu tinha é que mesmo uma abertura simples do arquivo em um terminal, a abertura ficava lenta (simples browse) ai com esta rotina acabou o problema. Quote Link to comment Share on other sites More sharing options...
Arthur Silvestre Posted June 4, 2013 Report Share Posted June 4, 2013 eu uso esta rotina, e realmente melhorou no meu caso... o problema que eu tinha é que mesmo uma abertura simples do arquivo em um terminal, a abertura ficava lenta (simples browse) ai com esta rotina acabou o problema. Obrigado, vou experimentar. Quote Link to comment Share on other sites More sharing options...
MatheusFarias Posted June 4, 2013 Report Share Posted June 4, 2013 Usa um arquivo de controle para controlar esses benditos indices , como um ChecaServidor.txt , se ele existir no disco C: ( Local ) essa maquina será o servidor , muito mais pratico so acho Quote Link to comment Share on other sites More sharing options...
nardeypm Posted June 5, 2013 Author Report Share Posted June 5, 2013 vagner, on 23 May 2013 - 07:40, said: Olá, Faça um teste e retire o #xcommand @ <nRow>,<nCol> SAY <cText> OF <oPrinter> => <oPrinter>:Say(<nRow>, <nCol>, <cText> ) Theotokos, on 22 May 2013 - 07:25, said: Como disse, peguei esta rotina aqui mesmo no forum, talvez possso lhe ajudar, faça o teste: *--( Grava no registro do windows instrução para agilizar gravação em rede )--* Function TurbinaRede() local oReg oReg := TReg32():New( HKEY_LOCAL_MACHINE, "SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" ) oReg:Set("EnableOplocks", "00000000") oReg:Set("CachedOpenLimit", "00000000") oReg:Set("Autodisconnect", "ffffffff") oReg:Set("EnableOplockForceClose", "00000001") oReg:Set("MaxKeepSearch", "000000b4") oReg:Set("MinKeepSearch", "0000000a") oReg:Set("ScavTimeout", "0000000a") oReg:Set("ThreadPriority", "00000002") oReg:Close() * If MsgYesNo("É Necessário Reiniciar o Computador"+CRLF+"Deseja Reiniciar Agora?","Reiniciar") oWndMain:End() WinExec( "ShutDown -s" ) End * RETURN NIL * -------------------- * parece que ambas sugestões determinaram o aumento da performance dos dbf's. A sugestão de alteração da função BuildIndex() tb foi introduzida no sistema e acelerou muito o processo de indexação. Acredito que seja a solução para o meu problema de lentidão e provavelmente de outros tb. De forma geral, aproveitei tudo que foi sugerido pelos colegas. Grato a todos. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.