INTERACTIVECLOSE close all thiswindow.release não fecha DBFs

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

syslink
Usuário Nível 3
Usuário Nível 3
Mensagens: 132
Registrado em: 20 Fev 2018 13:13
Localização: joinvile/sc

INTERACTIVECLOSE close all thiswindow.release não fecha DBFs

Mensagem por syslink »

Bom dia!
estou tendo um problema estranho ao compilar um novo projeto usando a ide hgm 3.4.4, pois os arquivos DBFs/NTXs não estão fechando ao encerrar o FORM.

O form MAIN chama um MODAL que tem a cláusula interactiveclose. vejam:

Código: Selecionar todos

on INTERACTIVECLOSE FECHA('Fechar Janela','aplicativo novo') ;
A função FECHA é:

Código: Selecionar todos

static Function FECHA(mPergunta,mApp)
	Local lRet
	hb_Default(@mApp, "Sistema"  )
	lRet := MsgYesNo( mPergunta + " ?" , mApp + " - Atencao!" )
	If .not. lRet
	// If lRet
		close databases // não funciona
		Close all // não funciona
                // quit
		Thiswindow.Release()
	Endif
Return lRet
Estranho que posso usar tanto o CLOSE DATABASES quanto o CLOSE ALL e até mesmo o QUIT que está comentado que nada de fechar as tabelas DBF/NTX.

Quando clico para acionar novamente - ainda não execução do programa, aparece a famosa mensagem de erro:
Error DBCMD/1011 Alias Already in use: XXXXXXXXX (nome do meu DBF)
Called from
etc
etc, que o srs. já sabem, que é a mensagem de erro que o .DBF JÁ ESTÁ ABERTO E EM USO.

O que fazer?

Se alguém puder ajudar, agradecido ficarei!

PS: Última informação lá sobre a função FECHA():
- se usar o LRET (.t.) não fecha o formulário, por isso usei o .NOT. LRET (.f.)
valeu galeraaaaaa!
Avatar do usuário
susviela@bol.com.br
Usuário Nível 3
Usuário Nível 3
Mensagens: 236
Registrado em: 30 Jun 2017 11:17
Localização: São José / SC
Contato:

INTERACTIVECLOSE close all thiswindow.release não fecha DBFs

Mensagem por susviela@bol.com.br »

1) Confira: If .not. lRet colocando um msginfo("") para ver se está entrando no IF

2) Gosto de colocar IF ( lRet == .T. )

3) Se entra no IF ==> Tenta DBCloseAll()
( https://vivaclipper.wordpress.com/2014/ ... bcloseall/ )
.
.
"E quando você perder o controle, colherá o que plantou."
=========================================
Carlos Alberto Nunes #Susviela
Site: https://www.PowerInformatica.com.br
=========================================
Blog xBase: https://programandoxbase.wordpress.com/
Blog TI: https://susviela.wordpress.com

( #ProgramandoxBase #AllxBase )
syslink
Usuário Nível 3
Usuário Nível 3
Mensagens: 132
Registrado em: 20 Fev 2018 13:13
Localização: joinvile/sc

INTERACTIVECLOSE close all thiswindow.release não fecha DBFs

Mensagem por syslink »

susviela@bol.com.br escreveu: 1) Confira: If .not. lRet colocando um msginfo("") para ver se está entrando no IF
opa... fiz o recomendado e não estava entrando.
2) Gosto de colocar IF ( lRet == .T. )
mudei para esta forma e passou a entrar.
Só que aí percebi que não está fechando o formulário com o SIM, apenas com o NÃO.
Estranho.
Talvez o problema esteja na forma como funciona o INTERACTIVECLOSE, de repente existe uma outra forma em que acionado o (X) da janela possamos encerrar o FORM MODAL e voltar para o form_main...
o problema é que parece que o que acontece dentro do IF/ENDIF não está pegando (exceto o MSGINFO rsrsrs).
Então, o RETURN NRET não aplica corretamente.

Muito estranho e esquisito.
Aí nem adiantou colocar a linha abaixo↓:
3) Se entra no IF ==> Tenta DBCloseAll()
( https://vivaclipper.wordpress.com/2014/ ... bcloseall/ )
Obs.:
1) se eu clico em NÃO, realmente está correto, o form_MODAL volta para o estado normal. Posso clicar em não quantas vezes que pega direitinho.
2) Se eu clico em SIM, não fecha e parece que entra em loop, pois a pergunta volta novamente e se na segunda tentativa eu pressionar o NÃO, o form_MODAL fecha e volta o controle para o form_MAIN. Em seguida se acionar o FORM_MODAL novamente, não há erros do DBF pois foi fechado corretamente.
3) Se eu clico no SIM e de novo SIM e na terceira em diante eu responder NÃO ambos os FORM_MODAL e FORM_MAIN são encerrados imediatamente.

Minha conclusão prévia: parece que a pergunta entra numa espécie de loop com a pergunta do form_main (misturando-se entre elas), mas, não funciona como deveria.

Abraços!
syslink
Usuário Nível 3
Usuário Nível 3
Mensagens: 132
Registrado em: 20 Fev 2018 13:13
Localização: joinvile/sc

INTERACTIVECLOSE close all thiswindow.release não fecha DBFs

Mensagem por syslink »

outras observações:
1) Resolvi desativar o INTERACTIVECLOSE para ver como o form se comporta.
Aí ao pressionar ALT+F4 ou clicar no (X) da janela o form_modal fecha imediatamente. Só que o seu comportamento é que é estranho.
Ao clicar para chamá-lo novamente, o erro que apresentamos no início (DBF já aberto) volta a se repetir.
2) parece que no lugar de fechar o FORM dá uma espécie de MINIMIZE ou NOSHOW. O que a meu ver é muito estranho, pois se é clicar no X é pra definitivamente encerrar e não apenas "MINIMIZAR".

haha
syslink
Usuário Nível 3
Usuário Nível 3
Mensagens: 132
Registrado em: 20 Fev 2018 13:13
Localização: joinvile/sc

INTERACTIVECLOSE close all thiswindow.release não fecha DBFs

Mensagem por syslink »

enfim, se eu clicar no X ou altf4, pra funcionar tenho que seguir a sequência:
SIM, NÃO.
Se for SIM, SIM, NÃO. Fecha tudo
a gente que tá desenvolvendo dá pra executar numa boa o clique SIM e depois o clique NÃO.
Mas, e, o usuário final?
vai indagar até rsrsrs
Avatar do usuário
susviela@bol.com.br
Usuário Nível 3
Usuário Nível 3
Mensagens: 236
Registrado em: 30 Jun 2017 11:17
Localização: São José / SC
Contato:

INTERACTIVECLOSE close all thiswindow.release não fecha DBFs

Mensagem por susviela@bol.com.br »

Bom .. cada um trabalha / desenvolve de uma forma, sendo assim não existe uma receita de bolo genérica.

Eu quando é DBFs no MAIN abro todas as tabelas e nos Forms Modal de manutenção de cada tabela eu somente SELECIONO a tabela/DBF

quando fecha o form (só release ) no máximo eu gravo as alterações DBCOMMITALL()

e quando vou sair do sistema fecho tudo, tem dado certo ...

Código: Selecionar todos


#include "hmg.ch"

declare window Main

Function main_form_oninteractiveclose

	Local lRet := MsgYesNo ( "Sair do Sistema ?" , "Confirmando" )
	IF  (lRet == .T.)
	
		DBCOMMITALL()
		DBCLOSEALL()
	
		DoMethod( "Main", "Release")
		
	ENDIF 

Return lRet


.
.
"E quando você perder o controle, colherá o que plantou."
=========================================
Carlos Alberto Nunes #Susviela
Site: https://www.PowerInformatica.com.br
=========================================
Blog xBase: https://programandoxbase.wordpress.com/
Blog TI: https://susviela.wordpress.com

( #ProgramandoxBase #AllxBase )
syslink
Usuário Nível 3
Usuário Nível 3
Mensagens: 132
Registrado em: 20 Fev 2018 13:13
Localização: joinvile/sc

INTERACTIVECLOSE close all thiswindow.release não fecha DBFs

Mensagem por syslink »

susviela@bol.com.br escreveu:Eu quando é DBFs no MAIN abro todas as tabelas e nos Forms Modal de manutenção de cada tabela eu somente SELECIONO a tabela/DBF
quando começamos na época do clipper e problemas de memória extendida, preferi abrir arquivos somente no momento do uso, e, aí pude ter um melhor rendimento do sistema que ficava mais leve e também menos conflitos em rede, pois o arquivo/tabela trabalha em modo exclusivo no momento da gravação.
susviela@bol.com.br escreveu:       DoMethod( "Main", "Release")
não sei o que acontece, mas, que tem algo estranho tem sim. Mas, vou substituir o thiswindow.release para este domethod.
...
Avatar do usuário
susviela@bol.com.br
Usuário Nível 3
Usuário Nível 3
Mensagens: 236
Registrado em: 30 Jun 2017 11:17
Localização: São José / SC
Contato:

INTERACTIVECLOSE close all thiswindow.release não fecha DBFs

Mensagem por susviela@bol.com.br »

quando começamos na época do clipper e problemas de memória extendida, preferi abrir arquivos somente no momento do uso, e, aí pude ter um melhor rendimento do sistema que ficava mais leve e também menos conflitos em rede, pois o arquivo/tabela trabalha em modo exclusivo no momento da gravação.
Por isso disse, que cada um tem sua maneira de desenvolver, eu abro todos os arquivos DBFs compartilhados (Multi usuário mesmo, já tenho as rotinas desde o clipper para rede então sem problemas isso ).
A questão de memória não me preocupa mais hoje em dia ... viva Harbour !

Mas dá uma olhada nos SAMPLES tem muita coisa lá.
.
.
"E quando você perder o controle, colherá o que plantou."
=========================================
Carlos Alberto Nunes #Susviela
Site: https://www.PowerInformatica.com.br
=========================================
Blog xBase: https://programandoxbase.wordpress.com/
Blog TI: https://susviela.wordpress.com

( #ProgramandoxBase #AllxBase )
Responder