Página 2 de 2

Função 'Quit' ao executar faz o .exe para de funcionar.

Enviado: 06 Dez 2021 13:45
por Kapiaba
Mister Quintas, escreveu:

Já pensei várias vezes em testar fivewin, mas não poder usar o Harbour 3.4 não dá.
Porquê não é possível usar o Harbour 3.4? Talvez não sirva para versões velhas do FiveWin.
E qual o problema de usar o Harbour 3.2? Estou usando atualmente, e estou gostando da robustez dele. Pega erros, que o xHarbour "deixa" passar na escrita do FiveWin. Lógico que o Harbour ou xHarbour das versões antigas, não servem para as versões atuais do FiveWin.

Onde baixo uma versão desse Hrbour 3.4 para FiveWin, ou não existe? Se não existe, boa coisa não é, ou é ruim da kbça, ou doente do pé. kkkkkkkkkkkkkkkkkkkkk

No ano passado, que estava no pique, cheguei a postar no fórum do fivewin se poderia colocar a versão free com exemplos no github, mas não obtive resposta.
Nao vejo nenhum problema nisso já que a versão 6.12, é free. Aliás, tenho a versão 2.7 que é mais antiga e funciona perfeita, o Linares me autorizou a passar para quem quiser aprender a usar o fivewin. Vantagem, é que eue tenho tudo completo. Se quiser, eu disponibilizo para o senhor, completo.
Nem sei se essa versão 6.12, ainda serve pra alguma coisa, acho que de 2005. -> Junho de 2012.
O senhor consegue desenvolver qualquer sistema com ela. Só não tem algumas modernidades da atualidade. Usamos até hoje o FWH27 - Fev. 2007, e não "nega" fogo, só não tem os mimimis da atualidade, que na prática, não faz falta nenhuma. E depois que se pega a malandragem, compra-se a mais nova.
Hoje em dia, depois de anos de apito nos ouvidos sem parar, sem muito pique pra nenhuma, nem manual, nem #includes, nem porr. nenhuma.
Nao entendi essa parte. Explique melhor, porfa.

P.S.: Mister Quintas, eu garanto uma coisa: Se o senhor não aprender a programar em FIVEWIN, tendo ao lado o MAIOR FIVEWINNER do MUNDO, eu deixo de programar em FiveWin e volto para o modo console. kkkkkkkkkkkkkkkkkkkkkkkkkkkkk, broma, broma, brincadira, brincadeira. jajajajajajajajaja.

Mister Quintas o senhor tem skype? Se sim, envie-me no kapiabafwh arroba gmail.com

I LOVE FIVEWIN THE BEST!

Obg. abs.

Regards, saludos.

Função 'Quit' ao executar faz o .exe para de funcionar.

Enviado: 06 Dez 2021 14:37
por João Eduardo
Boa tarde pessoal, foram muitos os questionamentos, mas vou tentar responder todos em um só, para melhor posicionamento a respeito do problema.

Obs: Apenas para ter um posicionamento mais exato, irei descrever a aplicação em questão que dá este erro, aqui na empresa temos um executável com várias funcionalidades, dentre elas, uma função de exportação das alterações no banco de dados para a filial daquela empresa (servidor manda para um banco nas nuvens as tabelas selecionadas e baixa na filial, permitindo assim trabalhar fora do âmbito da empresa) oque acontece é que o executável em segundo plano que é responsável por esse upload/download, é aberto e fechado de tempos em tempos e na hora de fechar, apresenta esse erro, impedindo de fechar automaticamente e travando o processo, contudo a aplicação principal não ocorre o mesmo erro, mesmo usando a mesma função "Finalizar()".
Sugiro que comente todas estas outras funções, compile e execute. Creio que vá funcionar. Depois vá removendo o comentário, um a um, das funções anteriormente comentadas. Compile e execute. Se passar, repita o processo. Senão, verifique a função onde ocorreu o erro.
* Eu fiz desta forma anteriormente, contudo esqueci de escrever acima, o travamento ocorre no "DbCloseAll()", caso eu comente ele, ocorre no "oVentPrinc:End()" e caso eu comente este termo novamente, o travamento vai ao "Quit", ai chegando nesse ponto fiquei sem saber como tratar.
Mas sem ver que funções são essas que vc chama não posso responder com maior precisão.
Sr_End() ? FecBloAce()?
*A Sr_End, pelo que verifiquei é uma função de uma lib do MySql (REQUEST SR_MYSQL), cuja função é finalizar todas as conexões abertas, a fim de testes, eu comentei essa função e o erro persistia, e a função FecBloAce() é uma de uso interno do sistema ao qual trabalho, a única coisa que ela faz é alterar o valor de uma variável global que será usada futuramente.
{João Eduardo[/b], faça um trace:
*Rochinha, conforme constatei no primeiro tópico, inicialmente ele trava na função finalizar, no momento que é passado no "DbCloseAll()"
Quando diz windows server, isso significa via terminal service ou direto nele?
*Eu conecto remotamente (na mesma rede e usando o aplicativo de 'Conexão de Área de Trabalho Remota') na máquina do Windows Server e rodo a aplicação por lá mesmo.
MsgRun( "FECHANDO O PROGRAMA E BANCOS DE DADOS.", ;
120 "Por Favor, Espere! Vou Desligar. ", ;
121 { || WinExec( LIBERA_TUDO() ), 3 } )
* Kapiaba, eu testei com essa forma e funciona, contudo, o chefe que é responsável por revisar meu código insiste para que eu ache o problema antes de tentar consertá-lo, para ter conhecimento do problema e saber como trata-lo futuramente.
kapiaba acho que só basta trocar Quit por PostQuitMessage(0) se esta função for nativa do Harbour.
* Testarei com o "PostQuitMessage(0)", contudo, o erro ocorre antes de sua chamada.

Agradeço a atenção de todos!

Função 'Quit' ao executar faz o .exe para de funcionar.

Enviado: 06 Dez 2021 15:50
por Jairo Maia
João Eduardo escreveu:mas o grande porém é que este erro ocorre apenas na versão do windows server (no caso a de 2012), nos demais windows, é finalizado sem o menor problema
Já verificou se as versões do Microsoft Visual C++ e do .NET Framework nesse computador estão atualizadas? Caso não estejam, atualize e veja se resolve.

PS: Não desisntale versões antigas também, pode ser que outros programas tenham dependeências de LIBs de versões antigas, e poderia causar problemas.

Função 'Quit' ao executar faz o .exe para de funcionar.

Enviado: 06 Dez 2021 15:56
por JoséQuintas
Isso me lembrou aquele erro de CLOSE quando tem SET FILTER.....
Não sei se pode ter a ver, e não conseguir ver a mensagem de erro.

Função 'Quit' ao executar faz o .exe para de funcionar.

Enviado: 06 Dez 2021 16:31
por João Eduardo
Novas pessoal, aparentemente o erro ocorre nos demais Windows também! a equipe de teste recebeu reclamações hoje em outras plataformas do Windows (o 7 e o 10), apenas questionando, já que o problema não se resume mais em uma versão específica (mesmo após ser testado em no mínimo 5 máquinas diferentes).
Já verificou se as versões do Microsoft Visual C++ e do .NET Framework nesse computador estão atualizadas? Caso não estejam, atualize e veja se resolve.
* Verifiquei e instalei as versões mais recentes agora mesmo, contudo o erro persiste.
Isso me lembrou aquele erro de CLOSE quando tem SET FILTER.....
Não sei se pode ter a ver, e não conseguir ver a mensagem de erro.
*Há algum chamado deste erro aqui no Fórum? as vezes pode ser parecido, e no meu caso, não apresenta mensagem, o executável simplesmente "para de funcionar" sem erro de log nem nada do tipo.

Os manterei atualizados caso eu descubra algo que possa induzir a este problema...

Função 'Quit' ao executar faz o .exe para de funcionar.

Enviado: 06 Dez 2021 17:05
por Kapiaba
* Kapiaba, eu testei com essa forma e funciona, contudo, o chefe que é responsável por revisar meu código insiste para que eu ache o problema antes de tentar consertá-lo, para ter conhecimento do problema e saber como trata-lo futuramente.
Entendi. Você está aprendendo FiveWin ainda, é isso? Simples então, do modo que o Rochinhas falou(como se fosse um Debug), você descobrirá o problema, mesmo já tendo a solução que eu já dei. Outra, verifique se você tem WHILE... ENDDO, sem o respectivo: SYSREFRESH()? Outra, mostrei os comandos que pertencem ao FIVEWIN 16 bits, que não são suportados pelo FIVEWIN de 32/64 bits, se tive mais dúvidas, vá perguntado. Estamos aqui para ajudar.

P.s.: Qual é a versão do seu FiveWin?

Abs.

Função 'Quit' ao executar faz o .exe para de funcionar.

Enviado: 06 Dez 2021 22:19
por rochinha
Amiguinhos,

Deve ser um caso claro de área de trabalho com tabela travando por não descarregamento da memória, mas o comando quit deveria fechar.

Joáo Eduardo mantenha o trecho como anteriormente sem modificar, apenas coloque antes do dbCloseAll() a chamada dbCommitAll()

Função 'Quit' ao executar faz o .exe para de funcionar.

Enviado: 06 Dez 2021 22:32
por Kapiaba
Mestre Rochinhas, desculpe, mas não concordo com o senhor, dbCommitAll(), apenas "força" o windows a gravar os dados no banco de dados, para ele não perder os dados. O problema dele, é erros de lógica e comandos errados mesmo, nada mais, nada além. Erros de principiante que eu já fiquei careca de tanto passar, até aprender que focinho de porco, não é tomada. Lógica boa, programa bom, lógica ruim, é só me chamar. kkkkkkkkkkkkkkkkk

Abraços meu rei.

Regards, saludos.

Função 'Quit' ao executar faz o .exe para de funcionar.

Enviado: 07 Dez 2021 00:11
por rochinha
Amiguinhos,
Mestre Rochinhas, desculpe, mas não concordo com o senhor, dbCommitAll(), apenas "força" o windows a gravar os dados no banco de dados, para ele não perder os dados. O problema dele, é erros de lógica e comandos errados mesmo, nada mais, nada além. Erros de principiante que eu já fiquei careca de tanto passar, até aprender que focinho de porco, não é tomada. Lógica boa, programa bom, lógica ruim, é só me chamar. kkkkkkkkkkkkkkkkk
Kapiaba, eu também raramente uso dbCommitAll(), mas uso. Este tipo de travamento com certeza pode estar relacionado a uma área selecionada com tabela aberta e laço infinito.

Não custa nada tentar.

Função 'Quit' ao executar faz o .exe para de funcionar.

Enviado: 07 Dez 2021 08:08
por Kapiaba
Kapiaba, eu também raramente uso dbCommitAll(), mas uso. Este tipo de travamento com certeza pode estar relacionado a uma área selecionada com tabela aberta e laço infinito.
É só usar o COMMIT ao final do REPLACE e se for um LAÇO(looping), usar o SYSREFRESH() e não dar o COMMIT dentro do LAÇO e sim, sempre fora dele e refrescar a memória. No mais, é somente erro de lógica, nada mais, nada além. Mas, nada impede de usar o dbCommitAll() ao sair do programa, se bem que o DBCLOSEALL() já "forçará" o windows a dar os REPLACES e fechar os bancos. Abs.

Regards, saludos.

Função 'Quit' ao executar faz o .exe para de funcionar.

Enviado: 07 Dez 2021 09:25
por Jairo Maia
João Eduardo escreveu:Há algum chamado deste erro aqui no Fórum? as vezes pode ser parecido
Tem um tópico sobre erro ao usar o Quit, porém, era um RunTime Error que ocorria ao usar o Quit quando tinha arquivos com relacionamento. A solução do pessoal do fórum foi auxiliar a fechar os relacionamentos antes de usar o Quit, e o problema foi solucionado. Se quiser ver, o tópico é esse: Erro no CLOSE DATA quando tem relacionamento

Função 'Quit' ao executar faz o .exe para de funcionar.

Enviado: 07 Dez 2021 12:48
por JoséQuintas
O erro acontece SEMPRE, ou só de vez em quando?
Se acontece sempre, TALVEZ acompanhar pelo debug, linha a linha.

Função 'Quit' ao executar faz o .exe para de funcionar.

Enviado: 07 Dez 2021 16:11
por rochinha
Amiguinhos,
...se for um LAÇO(looping), usar o SYSREFRESH()...
Se a rotina estiver presa dentro de um laço dificilmente qualquer comando fora dela podera acontecer ainda mais se uma função for chamada por recursividade.

Para descobrir é como foi falado, traçar a rota por debug. Se o debug não puder ser ativado o trace terá de ser feito como falei inclusive dentro de alguma função chamada.

Já passei por isto e como tinha terminado o cabelo da cabeça e barba tiver de arrancar cabelos de outros lugares, mas encontrei o cachorrinho fd...

Até hoje não me recuperei do trauma de esquecer um teco de código que deveria estar desabilitado.

Função 'Quit' ao executar faz o .exe para de funcionar.

Enviado: 08 Dez 2021 17:18
por João Eduardo
Boa tarde pessoal, agradeço a atenção de todos pois descobri o problema! na aplicação em específico que retornava o erro, ela atua com 2 conexões no banco MySql através de uma extensão do SqlRdd, uma conexão local e outra com o banco das "nuvens", migrando entre cada uma conforme o processo da aplicação era feito, o problema era que uma tabela tinha sido aberta em uma definida conexão e não estava sendo fechada logo após seu uso, o sistema então mudava para a outra conexão e deixava ela como "ativa" ou seja, a que seria usada no momento, e logo após tentava finalizar todas as tabelas mandando o DbCloseAll, resultando no erro em tentar fechar com uma tabela aberta em outra conexão (ao menos acredito que seja isso).

Obs: agradeço as dicas de todos, pois se n fossem elas estaria quebrando a cabeça ainda. gratidão apenas!