Página 1 de 2
Migrando de Clipper 5.2 para HMG 3.0.35
Enviado: 13 Jan 2013 00:12
por jsnascimento
Prezados,
Boa Noite!
Tenho um aplicativo feito em Clipper 5.2, cuja finalidade é “padronizar” algumas centenas de arquivos do tipo “dbf, cada arquivo representando a produção de um mês especificamente.
O objetivo final deste aplicativo é poder reunir em uma só tabela (em SQL ou MYSQL), todos os “dbfs”.
Acontece que estes arquivos “dbfs” refletem a evolução da construção desta base de dados ao longo de vários anos. Portanto, ocorreram alterações nas estruturas dos dados.
Sabemos que para criar uma única tabela ou fazer um “Append from” em todos os arquivos “dbfs”, há necessidade de padronizar as estruturas dos arquivos. Aí é que entra o meu aplicativo: “PADRONIZADOR.EXE”.
Este aplicativo funciona redondinho no Clipper 5.2.
Eu gostaria de migrar para HMG 3.0.35. Na verdade já fiz isto. E vi que a migração agrega muita velocidade no processamento do aplicativo. O meu aplicativo em Clipper 5.2 processa 2.500 registros por minuto, o aplicativo migrado para HMG 3.0.35 processa 9.003 por minuto.
Porém, o aplicativo migrado para HMG 3.0.35 começa rodar bonitinho, por algum motivo que desconheço, num dado momento, sem explicação óbvia, ele trava a “Label” que notifica a progressão do processamento, muito embora ele ainda continua processando. O que podemos ver quando observamos no Explorer do Windows o crescimento do novo arquivo que recebe a padronização, mas depois, trava tudo. Inclusive, só sai com “Alt-F4” ou “Ctrl-Alt-Del”. Também o arquivo padronizado fica ilegível.
Eu posso enviar os fontes por e-mail... Eu gostaria que alguém, que é experiente em HMG, por favor, verificasse se algum componente aproveitado do Clipper 5.2 é incompatível com HMG 3.0.35.
Atenciosamente,
Jamil S. Nascimento
Migrando de Clipper 5.2 para HMG 3.0.35
Enviado: 13 Jan 2013 14:32
por Jairo Maia
Olá Jamil,
jsnascimento escreveu:Eu gostaria que alguém, que é experiente em HMG, por favor, verificasse se algum componente aproveitado do Clipper 5.2 é incompatível com HMG 3.0.35.
Experiente não é meu caso, mas posso adiantar que tudo que você usava no Clipper 5.2 pode ser usado em Harbour, e portanto na HMG, desde que modo console.
A HMG 3.0.35 usa o Harbour 2.0. Já tentou usar uma IDE mais recente? As versões mais recentes usam o Harbour 3.2.
Migrando de Clipper 5.2 para HMG 3.0.35
Enviado: 13 Jan 2013 15:33
por jsnascimento
Prezado Jairo Maia,
Boa Noite!
Perdão! Eu não fui feliz na colocação: "Eu gostaria que alguém, que é experiente em HMG..." - nestas palavras eu estava dizendo mais a respeito de mim mesmo, que sou inexperiente no Harbur, do que dos possíveis colaboradores que porventura interessassem me ajudar. Perdão! Expressei-me mal.
Mas voltando ao caso: é exatamente isto que eu não quero, ou seja, deixar o meu aplicativo com cara do "DOS". Eu já tenho o aplicativo rodando perfeitamente em modo Clipper 5.2 (console); mas para melhor apresentação junto a terceiros, eu queria migrar para o modo gráfico que é oferecido pelo HMG(IDE).
Como disse anteriormente, fui atrás da aparência gráfica e fui surpreendido com ganho de velocidade na execução do aplicativo, uma vez que o código é transformado em "C".
Outra coisa, testei várias versões do HMG = (hmg.3.0.35, hmg.3.0.44 e hmg.3.1.1) - Todas deram o mesmo problema.
Será que você passaria o olho nos meus códigos para verificar se há algo incompatível com o modo gráfico? Não é muita coisa...
Abraços!
Jamil S. Nascimento
Migrando de Clipper 5.2 para HMG 3.0.35
Enviado: 13 Jan 2013 21:12
por Pablo César
Olá Jamil, seria interessante que você poste o código fonte do seu aplicativo. Se for muita coisa, compacte (zipando os prgs) e anexando-o na sua próxima mensagem. Para inicio, acho que iria ficar melhor se você substituir o label por ProgressBar. Teríamos que avaliar a frequência que é exibido e mudado em tela a sua label.
Migrando de Clipper 5.2 para HMG 3.0.35
Enviado: 13 Jan 2013 22:13
por jsnascimento
Prezados,
Boa Noite!
Segue aí meus fontes.
Padronizador.rar
- Meus fontes do aplicativo: Padronizador
- (55.97 KiB) Baixado 158 vezes
Por favor, se alguém puder ajudar-me agradecerei muito.
Obrigado!
Jamil S. Nascimento
Migrando de Clipper 5.2 para HMG 3.0.35
Enviado: 15 Jan 2013 13:14
por jsnascimento
Prezados colegas de Fórum,
Postei os meus fontes no dia (13/01/2013); seguindo conselho do moderador "Pablo César".
Constam dez download do compactado que enviei (Padronizador.rar).
Alguém, por favor, poderia me ajudar ou orientar a respeito do "bug" que está ocorrendo em meu aplicativo?
Muito Obrigado!
Jamil S. Nascimento
Migrando de Clipper 5.2 para HMG 3.0.35
Enviado: 15 Jan 2013 23:08
por Pablo César
Oi Jamil,
Desculpe se eu não respondi antes. Eu e minha família, encontramo-nos ainda de férias e não estou podendo dedicar-me mais intensamente ao fórum. Eu fiz o download e dei uma revisada rápida no seus fontes. Por tratar-se de vários fontes e eu estar com o meu tempo limitado, só deu pra ver que tem alguns comandos que você está usando e que só servem para o modo console como por exemplo Inkey, RESTORE SCREEN no Main_Adireg.prg
O seu Main carrega o formulário e deve ser analisado, pelo pouco que vi precisa avaliar o acionamento de funções nos eventos corretos. Não é ainda uma afirmação, mas pelo que pareceu-me não deveria ser no ONGOTFOCUS. O lebale Resultado, eu fosse você substituiria por um ProgressBar mas também teria que ser alimentado no laço onde não comprometera a sua performance.
Se você tiver paciência de esperar até eu retornar de viagem, terei prazer de te ajudar ou então espero que outro colega com maior tempo possa ir de auxilio.
Migrando de Clipper 5.2 para HMG 3.0.35
Enviado: 15 Jan 2013 23:38
por jsnascimento
Prezado Pablo César,
Boa Noite!
Obrigado pelo interesse em ajudar-me.
Eu posso esperar sim e farei isto.
Descanse bastante com a família!
Porém, estou aberto a qualquer posicionamento dos outros colegas.
Como disse: sou iniciante no Harbour e preciso mesmo de ajuda.
Abrcs!
Jamil S. Nascimento
Migrando de Clipper 5.2 para HMG 3.0.35
Enviado: 21 Jan 2013 22:39
por alxsts
Olá!
Antes de analisar este caso, gostaria que você verificasse se o problema persiste após as modificações feitas no tópico
Tecla de Abortamento. Talvez aquele
Do Events colocado dentro do laço resolva este problema também.
PS: para referenciar um tópico, como fiz acima, ou outra URL qualquer, use a tag URL que fica na barra de ferramentas da caixa de edição de mensagens.
Nos exemplos abaixo, vou trocar os colchetes por parenteses apenas para você ver como funciona. Quando você clica no botão URL, é gerada a string (url)(/url). Altere, copiando a URL do tópico em questão da barra do teu navegador e dando uma descrição, para que fique assim: (url=
https://pctoledo.org/forum/viewto ... =4&t=13825)Tecla de Abortamento(/url)
Migrando de Clipper 5.2 para HMG 3.0.35
Enviado: 22 Jan 2013 12:04
por Jairo Maia
Olá Jamil,
Dentro do laço de processamento, você tem esta parte de código:
Código: Selecionar todos
Wreg_tual := recno()
Wdivisor := 195
If Wreg_tual%Wdivisor == 0
SetProperty("Main","Resultado","Value","Processando o arquivo: "+ Wnom_arq + " => " + lTrim(Str(Wreg_tual)) + "/" + lTrim(Str(Wtotreg)))
SetProperty("main","Resultado","FONTCOLOR",{255,0,0,})
SetProperty("main","Resultado","FONTSIZE",8)
SetProperty("main","Resultado","TRANSPARENT", .T.)
Endif
Veja que a cada 195 registros você está alterando várias propriedades do Form, mas não precisa. Sugiro que altere somente a propriedade de exibição dos dados, deixando esta parte assim:
Código: Selecionar todos
Wreg_tual := recno()
Wdivisor := 195
If Wreg_tual%Wdivisor == 0
SetProperty("Main","Resultado","Value","Processando o arquivo: "+ Wnom_arq + " => " + lTrim(Str(Wreg_tual)) + "/" + lTrim(Str(Wtotreg)))
Endif
Quanto ao travamento:
Não sei se pode ser isso, mas penso que pode ter algo a ver. Quando você diz que o sistema para de trabalhar, será que não está ligado ao congestionamento da memória? Digo isto porque você para cada registro está usando o APPEND BLANK, isto cria um novo registro em branco e bloqueia para receber os dados. Ocorre que ele fica na memória, e sai da memória e destrava os registros após fechar o aliás, ou usar um comendo para salvar os dados. Assim, sugiro que após o trecho que você exibe os dados de processamento na tela (este acima), você acrescente o seguinte:
Código: Selecionar todos
If Wreg_tual % 1000 == 0
COMMIT // salva os dados e libera a memória a cada 1,000 registros
Endif
Tente esta alteração e veja se funciona.
Em tempo:
Aproveito para parabenizar o colega Alexandre Santos pela solução do evento do teclado. Show de bola!
Migrando de Clipper 5.2 para HMG 3.0.35
Enviado: 22 Jan 2013 12:35
por jsnascimento
Prezado Jairo e Alexandre,
Bom dia!
Jairo,
Veja que a cada 195 registros você está alterando várias propriedades do Form, mas não precisa. Sugiro que altere somente a propriedade de exibição dos dados, deixando esta parte assim...
Você está correto! É melhor simplificar. Farei isto.
Quando você diz que o sistema para de trabalhar, será que não está ligado ao congestionamento da memória? Digo isto porque você para cada registro está usando o APPEND BLANK, isto cria um novo registro em branco e bloqueia para receber os dados. Ocorre que ele fica na memória, e sai da memória e destrava os registros após fechar o aliás, ou usar um comendo para salvar os dados. Assim, sugiro que após o trecho que você exibe os dados de processamento na tela (este acima), você acrescente o seguinte: COMMIT
Semelhante a sugestão anterior. Vou implementar.
Alexandre,
Estou neste momento processando três arquivos originais, com 664.720.982 bytes cada um, 1.060.000 de registros cada um deles. Processou o primeiro e está no segundo. Está levando cerca de 55 minutos cada um. Durante o processamento estou alternando para tarefas do Windows, retornando, usei a tecla F10 e tudo está funcionando perfeitamente.
Engraçado, agora o Button
"Sair", que antes não funcionava durante o processamento, está funcionando também. Eu direcionei o evento
“Action” deste botão para a Função MyExit() e ele funcionou perfeitamente.
O "Pulo do Gato" parece ser mesmo o "Do Events".
A noite eu volto a postar aqui!
Obrigado!
Abraços a todos!
Jamil S. Nascimento
Migrando de Clipper 5.2 para HMG 3.0.35
Enviado: 22 Jan 2013 12:54
por alxsts
Olá!
Ótimo! Espero que termine como desejado.
Vou acrescentar mais uma sugestão às já feitas pelo Jairo: depois que o usuário clicar no botão processar e digitar as iniciais do arquivo, desabilite o botão processar para que ele não clique novamente durante o processamento.
Jairo: obrigado pela costumeira gentileza.
Migrando de Clipper 5.2 para HMG 3.0.35
Enviado: 22 Jan 2013 14:08
por jsnascimento
Prezado Alexandre,
Boa Tarde!
Vou acrescentar mais uma sugestão às já feitas pelo Jairo: depois que o usuário clicar no botão processar e digitar as iniciais do arquivo, desabilite o botão processar para que ele não clique novamente durante o processamento.
Com certeza! Não podemos deixar brecha para o usuário ter ações inadvertidas. O certo é desabilitar o button
"Processar" durante o processamento.
Tentei algumas coisas, mas não funcionaram:
Código: Selecionar todos
If Len(alltrim(Wini_dbf)) == 2
SetProperty("main","Resultado","VALUE",Wini_dbf+ " - ENTRADA VÁLIDA!")
SetProperty("main","Resultado","FONTCOLOR",{0,128,128})
SetProperty("main","Resultado","FONTSIZE",8)
SetProperty("main","Resultado","TRANSPARENT", .T.)
Do Events
// Desabilita o Button = "Processar"
*** Tentativa Nº.1 dá erro: Error BASE/1003 Variable does not exist: PROCESSAR
PROCESSAR:disable()
*** Tentativa Nº.2 dá erro: ERROR E0030 "syntax error at '.'"
DoMethod("Main","PROCESSAR","disable")
*** Tentativa Nº.3 dá erro: ERROR E0030 "syntax error at '.'"
Main.PROCESSAR.disable()
main_Padronizar(Wini_dbf)
ENDIF
Você tem alguma sugestão?
Obrigado!
Jamil S. Nascimento
Migrando de Clipper 5.2 para HMG 3.0.35
Enviado: 22 Jan 2013 14:33
por HASA

)
Boa tarde, tente:
Main.resultado.enabled := .F. && Desabilita e;
Main.resultado.enabled := .T. && habilita no final do processo, ok.
:xau
Hasa
Migrando de Clipper 5.2 para HMG 3.0.35
Enviado: 22 Jan 2013 14:35
por alxsts
Olá!
Veja:
Código: Selecionar todos
*------------------------------------------------------------------------------*
* ---> HABILIDTA A SAÍDA DE EMERGÊNCIA/ABORTAMENTO DO APLICATIVO COM A TECLA F10
*------------------------------------------------------------------------------*
*Sugestão do Alexandre Santos (AlxSts) em 20/01/2013
*
EnableF10()
// Desabilita botão processar
Main.Processar.Enabled := .F.
Eu alteraria o Caption do botão sair para "Sair (F10)"