Jump to content
Fivewin Brasil

pauloaraujo

Membros
  • Posts

    3,110
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by pauloaraujo

  1. Aldreks, Talvez não tenha sido claro. Eu forço a tentativa de localizar um arquivo hipotético (teste.txt ou o que voce quizer, para saber se FERROR() retornará 3. Caso positivo, o diretório não existe. Se não existe, crio. Se o diretório e o arquivo existir, FERROR() retornará ZERO Se o diretório existir e o arquivo não, retornará 2. Portanto, sempre diferente de 3. Paulo/CONTATO SISTEMAS Clipper 5.3b / FW 2.6 / Blinker 7.0
  2. Aldreks, Desculpe-me, "MEUDIR" é a pasta a ser checada e criada ARQTESTE="C:\MEUDIR\TESTE.TXT" TESTE=FOPEN(ARQTESTE) IF FERROR()=3 && 3 indica que não existe pasta lMkDir("C:\MEUDIR") && cria diretorio ENDIF FCLOSE(TESTE) Paulo/CONTATO SISTEMAS Clipper 5.3b / FW 2.6 / Blinker 7.0
  3. Aldreks, lá vai ARQTESTE="C:\MEUDIR\TESTE.TXT" TESTE=FOPEN(ARQTESTE) IF FERROR()=3 && 3 indica que não existe pasta lMkDir("C:\PLENOTMP") && cria diretorio ENDIF FCLOSE(TESTE) Paulo/CONTATO SISTEMAS Clipper 5.3b / FW 2.6 / Blinker 7.0
  4. EEVALDO, Qual seu E-Mail?? Paulo/CONTATO SISTEMAS
  5. Bom dia, Se voce colocar MSGRUN na Busca Geral, existe uma citação do Kapiaba de que se pode manipular o MSGRUN.PRG, e incorporá-lo ao programa. Infelizmente não sou fera para isso. Coloque no fórum e veja no que dá. Quando a demora, comigo não há aumento de processamento devido ao uso do comando. Já testei. Voce experimentou tirar aquele OF do 1º Diálogo?? Paulo/CONTATO SISTEMAS
  6. Aldreks, Se ele mostra o "PROCESSANDO", nem que seja por um instante, é porque o problema não está no CRIARESCALA() e sim no retorno do diálogo à janela. Tente fazer duas coisas: 1) retire o OF oJanEsca do diálogo principal. 2) de uma olhada na chamada do ESCAGERAL() Paulo Araujo/CONTATO SISTEMAS (contato@pleno.com.br) FW26 / Clipper53b / Blinker 7.0
  7. Aldreks, o comando correto é Priv oTmp MsgRun( "PROCESSANDO AGUARDE !! ...... ","", ; { | oTmp | CRIARESCALA(oTmp) } ) ou, se precisar tratar se completou ou não WPROCESSOU:=.T. MsgRun( "PROCESSANDO AGUARDE !! ...... ","", ; { | oTmp | IF( .NOT. CRIARESCALA(oTmp) , ; WPROCESSOU:=.F. , .T. ) } ) Paulo Araujo/CONTATO SISTEMAS (contato@pleno.com.br) FW26 / Clipper53b / Blinker 7.0
  8. Aldreks, Ele mostra a mensagem PROCESSANDO.. ?? Como ficou o fonte do CRIARESCALA após a alteração. Pode mostrar? Paulo Araujo/CONTATO SISTEMAS (contato@pleno.com.br) FW26 / Clipper53b / Blinker 7.0
  9. Aldreks, Também estou começando e ainda convertendo as minhas rotinas. Sou do princípio do mais simples, sem desmerecer os que conhecem muito mais. Se já existe, eu uso. Para que complicar sem necessidade. Só crio novo diálogo se necessitar de dados adicionais do usuário. Em todas as rotinas que exigem processamentos sem maiores perguntas, não crio novo diálogo, uso o MSGRUN da forma que voce viu, chamando a função que será processada. O próprio MSGRUN mostra o que voce quer que apareça e se desfaz quando a rotina chamada acaba. Da forma como te mostrei, se voce quer continuar no primeiro diálogo, provoque o LOOP após o MSGRUN, se não quer, basta não colocar. Paulo Araujo/CONTATO SISTEMAS (contato@pleno.com.br) FW26 / Clipper53b / Blinker 7.0
  10. Acredito que não haja necessidade de se criar um novo dialogo para processamento. Utilize MSGRUN após o ACTIVATE priv oTmp, ...... wok:=.f. wcancela:=.f. DO WHIL .T. DEFINE DIALOGO ... @ .... @ ..BUTTON .. ACTION (wok:=.t.,wcancela:.f.,oDlg:End()) @ ..BUTTON .. ACTION (wok:=.f.,wcancela:.t.,oDlg:End()) ACTIVATE ..... if wok if!msgyesno()...... loop else wPROCESSOU:=.T. MsgRun( "PROCESSANDO AGUARDE !! ...... ","", ; { | oTmp | IF( .NOT. CRIARESCALA(oTmp) , ; WPROCESSOU:=.F. , .T. ) } ) Endif else && só sai se clicar no Button de cancelar exit endif enddo Close Database oFont01:end() RETURN(.T.) FUNC CRIARESCALA && sem o msgyesno retu .t. Espero ter ajudado Paulo Araujo/CONTATO SISTEMAS (contato@pleno.com.br) FW26 / Clipper53b / Blinker 7.0
  11. Para verificar se as outras LPTs estão prontas eu utilizo o seguinte código. CASE OPTPPORTA=2 && usuário selecionou LPT2 ARQTESTE="LPT2.PRN" TESTE=FOPEN(ARQTESTE) IF FERROR()=3 MSGALERT("Porta nao habilidada",........) FCLOSE(TESTE) RETU.F. ENDIF FCLOSE(TESTE) Espero ter ajudado Paulo Araujo/CONTATO SISTEMAS contato@pleno.com.br FW26, Clipper53b, Blinker70
  12. Rossine, Nota 1000. Funcionou perfeitamente a sua instrução e com o mesmo tempo de processamento de antes, sem METER. Pentium 4 + 110000 registros + 10 indices = 20 segundos. Muito Obrigado. Paulo/CONTATO SISTEMAS FW26/Clipper53b/BLINKER7 contato@pleno.com.br
  13. Amigos, preciso de ajuda. Por favor digam que eu estou errado. Estamos em fase de conversão para o FW26/clipper e fui substituir o famoso "Processando. Aguarde..." pelo "METER". Tentei simular num DBF real do sistema, contendo 20000 rec e 10 indices (CDX) numa máquina 566 e constatei que a indexação ficou mais lenta 6 vezes (45s antes contra 270s). Testei num Pentium 4 com 100000 rec e deu a mesma proporção. Ora, a nossa ideia era colocar o "METER" em todo processamento pesado e indexação. Temos clientes de todo tipo, alguns com arquivos com mais de 300.000 lançamentos, aproximadamente 100 estações e muitas delas desatualizadas (pão-duros, né??. Não podemos piorar o desempenho em função do mais bonito. Lá vai o Fonte: ANTES: ----------------------------------------------------- MsgRun( "REINDEXANDO COMERCIAL. AGUARDE!!!....... ","", ; {|oInd|IF(.NOT.INDSCCoInd) , WINDEXOU:=.F.,.T.)}) FUNC INDSCC IF.NOT.FUSEX("1","CADCLIEN") RETU.F. ELSE ERASE ICLIEN.CDX ENDIF INDEX ON CLIENCOD TAG 01 TO ICLIEN INDEX ON TRANSCOD TAG 02 TO ICLIEN INDEX ON VENDECOD TAG 03 TO ICLIEN INDEX ON STR(REGIOCOD,3,0)+FANTASIA TAG 04 TO ICLIEN INDEX ON BANCOCOD TAG 05 TO ICLIEN INDEX ON CONDICOD TAG 06 TO ICLIEN INDEX ON CLIENTE TAG 07 TO ICLIEN INDEX ON CGC TAG 08 TO ICLIEN INDEX ON CPF TAG 09 TO ICLIEN INDEX ON FANTASIA TAG 10 TO ICLIEN RETU .T. DEPOIS------------------------------------------------------ MsgMeter( { | oMeter, oText, oDlg, lEnd | ; IF(.NOT.INDSCC( oMeter, oText, oDlg, @lEnd ) , ; WINDEXOU:=.F. ,.T. ) } , ; "REINDEXANDO COMERCIAL ...........","Aguarde" ) FUNC INDSCC IF.NOT.FUSEX("1","CADCLIEN") RETU.F. ELSE ERASE ICLIEN.CDX ENDIF oMeter:nTotal = RecCount() oMeter:ctext = "REINDEXANDO CLIENTES 01/10" INDEX ON CLIENCOD TAG 01 TO ICLIEN ; EVAL ( oMeter:Set( RecNo() ), SysRefresh(), ! lEnd ) oMeter:ctext = "REINDEXANDO CLIENTES 02/10" INDEX ON TRANSCOD TAG 02 TO ICLIEN ; EVAL ( oMeter:Set( RecNo() ), SysRefresh(), ! lEnd ) oMeter:ctext = "REINDEXANDO CLIENTES 03/10" INDEX ON VENDECOD TAG 03 TO ICLIEN ; EVAL ( oMeter:Set( RecNo() ), SysRefresh(), ! lEnd ) oMeter:ctext = "REINDEXANDO CLIENTES 04/10" INDEX ON STR(REGIOCOD,3,0)+FANTASIA TAG 04 TO ICLIEN ; EVAL ( oMeter:Set( RecNo() ), SysRefresh(), ! lEnd ) oMeter:ctext = "REINDEXANDO CLIENTES 05/10" INDEX ON BANCOCOD TAG 05 TO ICLIEN ; EVAL ( oMeter:Set( RecNo() ), SysRefresh(), ! lEnd ) oMeter:ctext = "REINDEXANDO CLIENTES 06/10" INDEX ON CONDICOD TAG 06 TO ICLIEN ; EVAL ( oMeter:Set( RecNo() ), SysRefresh(), ! lEnd ) oMeter:ctext = "REINDEXANDO CLIENTES 07/10" INDEX ON CLIENTE TAG 07 TO ICLIEN ; EVAL ( oMeter:Set( RecNo() ), SysRefresh(), ! lEnd ) oMeter:ctext = "REINDEXANDO CLIENTES 08/10" INDEX ON CGC TAG 08 TO ICLIEN ; EVAL ( oMeter:Set( RecNo() ), SysRefresh(), ! lEnd ) oMeter:ctext = "REINDEXANDO CLIENTES 09/10" INDEX ON CPF TAG 09 TO ICLIEN ; EVAL ( oMeter:Set( RecNo() ), SysRefresh(), ! lEnd ) oMeter:ctext = "REINDEXANDO CLIENTES 10/10" INDEX ON FANTASIA TAG 10 TO ICLIEN ; EVAL ( oMeter:Set( RecNo() ), SysRefresh(), ! lEnd ) RETU .T. Paulo/CONTATO SISTEMAS FW26/Clipper53b/BLINKER7 contato@pleno.com.br
  14. Olá Amigos, Desculpem-me meter o bedelho logo na primeira. Comigo aconteceu a mesma coisa. Funcionava perfeitamente em algumas máquinas/Win98 e dava esse erro num único módulo em um XP. Foi solucionado alterando-se o LNK, aumentando-se: STACKSIZE=17000 HEAPSIZE=8520 Espero ter ajudado Paulo Araujo/CONTATO SISTEMAS
×
×
  • Create New...