Aplicativo rodando (Não está respondendo)
Moderador: Moderadores
Aplicativo rodando (Não está respondendo)
Olá pessoal,
Fiz um sisteminha de migração dos registros em clipper (.dbf) para o MySQL e no laço de um Do While como tem que subir pra web muitos registros (mais de 12mil), sempre quando tiro de foco o aplicativo (clico com mouse em outro aplicativo enquanto está fazendo upload dos registros vou fazer outra coisa em outro aplictivo). Acontece que o Windows pensa que o aplicativo de migração não está respondendo. Vi aqui no forum para usar uma função que depende da GUI, tentei usar HMG_PROCESSMESSAGE(), HB_PROCESSMESSAGE() ou HGW_PROCESSMESSAGE() mas essa função não existe e não pude criar o executável.
Uso a versão HMG 3.3.1 32Bits com Win 8.1 pro 64bits.
Valeu.
Fiz um sisteminha de migração dos registros em clipper (.dbf) para o MySQL e no laço de um Do While como tem que subir pra web muitos registros (mais de 12mil), sempre quando tiro de foco o aplicativo (clico com mouse em outro aplicativo enquanto está fazendo upload dos registros vou fazer outra coisa em outro aplictivo). Acontece que o Windows pensa que o aplicativo de migração não está respondendo. Vi aqui no forum para usar uma função que depende da GUI, tentei usar HMG_PROCESSMESSAGE(), HB_PROCESSMESSAGE() ou HGW_PROCESSMESSAGE() mas essa função não existe e não pude criar o executável.
Uso a versão HMG 3.3.1 32Bits com Win 8.1 pro 64bits.
Valeu.
Nilton Medeiros
nilton@sistrom.com.br
nilton@sistrom.com.br
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Aplicativo rodando (Não está respondendo)
Sem código exemplo, não tem como ajudar... não dá pra entender o que você fez ou tentou fazer...
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
-
carlos_dornelas
- Usuário Nível 3

- Mensagens: 400
- Registrado em: 25 Ago 2004 21:54
Aplicativo rodando (Não está respondendo)
Não bastaria colocar o DO EVENTS dentro do laço DO WHILE?
Antonio Carlos
Antonio Carlos
Aplicativo rodando (Não está respondendo)
Oi Pessoal,
Queimou o HD do meu PC, desculpe a demora, bem, eu resolvi colocando uma mensagem por meio segundo e o windows não mais entendeu que o sistema não estava respondendo. Usei a MessageBoxTimeout();
MessageBoxTimeout('id: ' + ltrim(str(n,10)) + ' - ' + Left(alltrim(clie_dbf->NOME),28), "Clientes",, 500).
Segue o trecho do programa do laço While.
Queimou o HD do meu PC, desculpe a demora, bem, eu resolvi colocando uma mensagem por meio segundo e o windows não mais entendeu que o sistema não estava respondendo. Usei a MessageBoxTimeout();
MessageBoxTimeout('id: ' + ltrim(str(n,10)) + ' - ' + Left(alltrim(clie_dbf->NOME),28), "Clientes",, 500).
Segue o trecho do programa do laço While.
Código: Selecionar todos
clie_dbf->(dbGoTop())
do while clie_dbf->(!EOF())
nTime++
if nTime > 300
nTime := 0
MessageBoxTimeout('id: ' + ltrim(str(n,10)) + ' - ' + Left(alltrim(clie_dbf->NOME),28), "Clientes",, 2000)
end
//hmg_processmessage()
Main.ProgressBar_LoadClientes.Value := Main.ProgressBar_LoadClientes.Value + 1
if ClieValido()
cSQL := "INSERT INTO clientes ("
cSQL += "clie_id, "
cSQL += "clie_categoria, "
cSQL += "clie_ativo, "
cSQL += "clie_tipo_documento, "
cSQL += "emp_id, "
cSQL += "clie_razao_social, "
cSQL += "clie_tipo_estabelecimento, "
cSQL += "clie_cnpj, "
cSQL += "clie_ie_isento, "
cSQL += "clie_inscr_estadual, "
cSQL += "clie_contrib_icms, "
cSQL += "clie_cpf, "
cSQL += "clie_situacao_cadastral, "
cSQL += "clie_logradouro, "
cSQL += "clie_numero, "
cSQL += "clie_complemento, "
cSQL += "clie_bairro, "
cSQL += "clie_cep, "
cSQL += "cid_id, "
cSQL += "clie_fone1, "
cSQL += "clie_fone2, "
cSQL += "clie_seguradora, "
cSQL += "clie_apolice, "
cSQL += "clie_forma_aplicar_seguro, "
cSQL += "clie_seguro_desconto, "
cSQL += "clie_seguro_intra_estadual, "
cSQL += "clie_seguro_inter_estadual, "
cSQL += "clie_seguro_adval_tipo_1, "
cSQL += "clie_seguro_adval_tipo_2, "
cSQL += "clie_tom_aceita_frete_pago, "
cSQL += "clie_tom_aceita_frete_a_pagar, "
cSQL += "clie_tom_aceita_frete_outros, "
cSQL += "clie_tom_aceita_suframa, "
cSQL += "clie_tom_tabela, "
cSQL += "clie_des_aceita_frete_a_pagar, "
cSQL += "clie_des_inscricao_suframa, "
cSQL += "clie_codigo_antigo) "
cSQL += "VALUES ("
n++
Main.Label_contador.Value := 'id: ' + ltrim(str(n,10)) + ' - ' + Left(alltrim(clie_dbf->NOME),28)
cSQL += ltrim(str(n)) + ", "
cSQL += "4, " // Categoria: 0 - Remetente, 1 - Expedidor, 2 - Recebedor, 3 - Destinatário, 4 - Todos
// Ativa ou Inativa o cliente por inconsistencia no cpf ou cnpj
if clie_dbf->FIS_JUR == "F"
if CPF( HMG_PADR(allTrim(clie_dbf->CGC),11,"0") )
cSQL += "1, " // Cliente Ativo no sistema, seu CPF é válido
cSituacao := "NULL, " // Situação Cadastral (N/A)
else
cSQL += "0, " // Cliente Inativado, seu CPF não é válido
cSituacao := "'CPF INVALIDO', " // Situação Cadastral
end
else
if is_cnpj( HMG_PADR(allTrim(clie_dbf->CGC),14,"0") )
cSQL += "1, " // Cliente Ativo no sistema, seu CNPJ é válido
cSituacao := "NULL, " // Situação Cadastral (N/A)
else
cSQL += "0, " // Cliente Inativado, seu CPF não é válido
cSituacao := "'CNPJ INVALIDO', " // Situação Cadastral
end
end
cSQL += iif(clie_dbf->FIS_JUR == 'F', "'CPF', ", "'CNPJ', ")
cSQL += "1, " // Empresa: 1 - Alexpress AP
cSQL += "'" + clie_dbf->NOME + "', "
do case
case clie_dbf->ESTABELEC == "C"
cSQL += "'COMERCIAL', "
case clie_dbf->ESTABELEC == "T"
cSQL += "'TRANSPORTADORA', "
case clie_dbf->ESTABELEC == "I"
cSQL += "'INDÚSTRIA', "
case clie_dbf->ESTABELEC == "M"
cSQL += "'COMUNICAÇÕES', "
case clie_dbf->ESTABELEC == "E"
cSQL += "'ENERGIA ELÉTRICA', "
case clie_dbf->ESTABELEC == "R"
cSQL += "'PRODUTOR RURAL', "
case clie_dbf->FIS_JUR == 'F'
cSQL += "'PESSOA FÍSICA', "
otherwise
cSQL += "'COMERCIAL', "
endcase
cSQL += iif( !(clie_dbf->FIS_JUR=="F"), "'" + HMG_PADR(allTrim(clie_dbf->CGC),14,"0") + "', ", "NULL, " )
cSQL += clie_isento() + ", "
if (clie_dbf->FIS_JUR=="F")
x := "NULL"
else
x := extrai_numero(clie_dbf->INSCRICAO)
if empty(x)
x := "NULL"
else
x := "'" + x + "'"
end
end
cSQL += x + ", " // Inscricao Estadual
cSQL += if(clie_dbf->ICMSC=="S", "1","0") + ", "
cSQL += if( clie_dbf->FIS_JUR=="F", "'" + HMG_PADR(allTrim(clie_dbf->CGC),11,"0") + "', ", "NULL, " )
cSQL += cSituacao // Situação Cadastral
cSQL += "'" + clie_dbf->ENDERECO + "', "
cSQL += "'" + if(empty(clie_dbf->NUMERO), "S/N", clie_dbf->NUMERO) + "', "
cSQL += "'" + clie_dbf->COMPLEMEN + "', "
cSQL += "'" + clie_dbf->BAIRRO + "', "
cSQL += "'" + clie_dbf->CEP + "', "
cSQL += ltrim(str(nCid_id)) + ", "
x := extrai_numero(clie_dbf->FONE)
if empty(x)
x := "NULL"
else
x := "'" + HB_ULEFT(x,2) + " " + HB_USUBSTR( x, 3 ) + "'"
end
cSQL += x + ", "
x := extrai_numero(clie_dbf->FAX)
if empty(x)
x := "NULL"
else
x := "'" + HB_ULEFT(x,2) + " " + HB_USUBSTR( x, 3 ) + "'"
end
cSQL += x + ", "
if empty(clie_dbf->SEGURA)
cSQL += "NULL, NULL, "
else
x := alltrim(clie_dbf->SEGURA)
if HMG_LEN(x) < 4 .or. HMG_LEN(alltrim(clie_dbf->APOLICE)) < 4
cSQL += "NULL, NULL, "
else
cSQL += "'" + x + "', "
cSQL += "'" + alltrim(clie_dbf->APOLICE) + "', "
end
end
cSQL += "2, 0, "
cSQL += ltrim(str(clie_dbf->TXSEGINTRA,9,6)) + ", "
cSQL += ltrim(str(clie_dbf->TXSEGINTER,9,6)) + ", "
cSQL += "0, 0, 1, 1, 0, "
cSQL += if(clie_dbf->SUFRAMA=="S", "1","0") + ", "
if clie_dbf->CODTABGL > "699"
cSQL += "'ESPECIAL', "
else
cSQL += "'NACIONAL', "
end
cSQL += iif(clie_dbf->FOB=="N","1","0") + ", "
cSQL += iif(empty(clie_dbf->INSCRSUFR), "NULL, ", "'" + clie_dbf->INSCRSUFR + "', ")
cSQL += "'" + clie_dbf->CODIGO + "');"
oQuery := ExecutaQuery(cSQL)
if !ExecutouQuery(@oQuery,cSQL)
FSEEK(nHlCli,0,2)
FWRITE(nHlCli,"COMANDO SQL ----------------------" + CRLF + cSQL + CRLF + CRLF + "ERRO SQL -------------------------" + CRLF + "ERRO DE CONEXÃO COM O SERVIDOR" + CRLF + CRLF + CRLF)
aadd(aErros, {str(n,10), alltrim(clie_dbf->NOME), "ERRO DE CONEXÃO COM O SERVIDOR"})
Exit
end
if oQuery:NetErr()
FSEEK(nHlCli,0,2)
FWRITE(nHlCli,"COMANDO SQL ----------------------" + CRLF + cSQL + CRLF + CRLF + "ERRO SQL -------------------------" + CRLF + oQuery:Error() + CRLF + CRLF + CRLF)
aadd(aErros, {str(n,10), alltrim(clie_dbf->NOME), oQuery:Error()})
else
Grava_Contatos(n)
Grava_clieFaturas(n)
end
end
clie_dbf->(dbSkip())
enddoNilton Medeiros
nilton@sistrom.com.br
nilton@sistrom.com.br
Aplicativo rodando (Não está respondendo)
NiltonGM,
Tente colocar o comando DO EVENTS dentro do loop.
Espero ter ajudado.
Tente colocar o comando DO EVENTS dentro do loop.
Espero ter ajudado.
- Cavalo Marinho
- Usuário Nível 3

- Mensagens: 156
- Registrado em: 01 Ago 2009 10:01
- Localização: Aracaju/Se
Aplicativo rodando (Não está respondendo)
Estou tendo o mesmo problema que o Nilton, acontece que no meu caso não é um loop, é minha rotina de indexação dos arquivos, ou seja tenho uma função onde indexo todas as minha tabelas, acontece que ao indexar tabelas grandes o sistema coloca uma mensagem de não esta respondendo, coloquei ao final de cada tabela indexada um do events, ela retira a mensagem, mas logo na próxima tabela acontece novamente, o sistema continua a indexar até o final, não interrompe, mas fica uma coisa meio chata para que está utilizando o sistema. Aguem tem uma luz?
-
Claudio Soto
- Colaborador

- Mensagens: 566
- Registrado em: 27 Ago 2012 12:31
- Localização: Uruguay
- Contato:
Aplicativo rodando (Não está respondendo)
Existe una forma, pero cuidado:Cavalo Marinho escreveu:Estou tendo o mesmo problema que o Nilton, acontece que no meu caso não é um loop, é minha rotina de indexação dos arquivos, ou seja tenho uma função onde indexo todas as minha tabelas, acontece que ao indexar tabelas grandes o sistema coloca uma mensagem de não esta respondendo, coloquei ao final de cada tabela indexada um do events, ela retira a mensagem, mas logo na próxima tabela acontece novamente, o sistema continua a indexar até o final, não interrompe, mas fica uma coisa meio chata para que está utilizando o sistema. Aguem tem uma luz?
1) porque mientras el programa este ocupado si no se puede llamar a DO EVENTS no se podrá mover, cerrar, minimizar, etc. la ventana
2) además una vez que se llama a la función DisableProcessWindowsGhosting() no se podrá desactivarla, es decir siempre que el programa este ocupado presentara el comportamiento descrito en el punto anterior
Código: Selecionar todos
#include "hmg.ch"
Function Main()
DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH 200 ;
HEIGHT 200 ;
MAIN;
TITLE 'Button Test'
@ 50,50 BUTTON Button_1 CAPTION "Test" ACTION Test()
END WINDOW
CENTER WINDOW Form_1
ACTIVATE WINDOW Form_1
Return
Procedure Test()
DisableProcessWindowsGhosting ()
For i := 1 to 100000
Form_1.Title := HB_NTOS (i)
next
Return
#pragma BEGINDUMP
#include <windows.h>
#include <tchar.h>
#include "hbapi.h"
#define HMG_OFICIAL FALSE // TRUE
#if HMG_OFICIAL
#include "HMG_UNICODE.h"
#else
#define HMG_DEFINE_DLL_FUNC(\
_FUNC_NAME, \
_DLL_LIBNAME, \
_DLL_FUNC_RET, \
_DLL_FUNC_TYPE, \
_DLL_FUNC_NAMESTRINGAW, \
_DLL_FUNC_PARAM, \
_DLL_FUNC_CALLPARAM, \
_DLL_FUNC_RETFAILCALL \
)\
\
_DLL_FUNC_RET _DLL_FUNC_TYPE _FUNC_NAME _DLL_FUNC_PARAM \
{\
typedef _DLL_FUNC_RET (_DLL_FUNC_TYPE *PFUNC) _DLL_FUNC_PARAM;\
static PFUNC pfunc = NULL;\
if (pfunc == NULL)\
{\
HMODULE hLib = LoadLibrary (_TEXT (_DLL_LIBNAME) );\
pfunc = (PFUNC) GetProcAddress (hLib, _DLL_FUNC_NAMESTRINGAW);\
}\
if(pfunc == NULL)\
return ((_DLL_FUNC_RET) _DLL_FUNC_RETFAILCALL);\
else\
return pfunc _DLL_FUNC_CALLPARAM;\
}
#endif
HMG_DEFINE_DLL_FUNC ( win_DisableProcessWindowsGhosting, // user function name
"User32.dll", // dll name
VOID, // function return type
WINAPI, // function type
"DisableProcessWindowsGhosting", // dll function name
(VOID), // dll function parameters (types and names)
(), // function parameters (only names)
0 // return value if fail call function of dll
)
HB_FUNC ( DISABLEPROCESSWINDOWSGHOSTING )
{
win_DisableProcessWindowsGhosting ();
}
#pragma ENDDUMP
Aplicativo rodando (Não está respondendo)
Só pra deixar registrado, foi resolvido com o comando 'DO EVENTS' com a dica do amigo acima.
Obrigado a todos.
Obrigado a todos.
Nilton Medeiros
nilton@sistrom.com.br
nilton@sistrom.com.br
