Clipper On Line • Ver Tópico - INTERACTIVECLOSE close all thiswindow.release não fecha DBFs

INTERACTIVECLOSE close all thiswindow.release não fecha DBFs

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

INTERACTIVECLOSE close all thiswindow.release não fecha DBFs

Mensagempor syslink » 10 Set 2018 09:25

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:
on INTERACTIVECLOSE FECHA('Fechar Janela','aplicativo novo') ;


A função FECHA é:
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!
syslink
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 132
Data de registro: 20 Fev 2018 13:13
Cidade/Estado: joinvile/sc
Curtiu: 3 vezes
Mens.Curtidas: 3 vezes

INTERACTIVECLOSE close all thiswindow.release não fecha DBFs

Mensagempor susviela@bol.com.br » 10 Set 2018 11:59

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 )
Avatar de usuário

susviela@bol.com.br
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 236
Data de registro: 30 Jun 2017 11:17
Cidade/Estado: São José / SC
Curtiu: 153 vezes
Mens.Curtidas: 24 vezes

INTERACTIVECLOSE close all thiswindow.release não fecha DBFs

Mensagempor syslink » 10 Set 2018 21:09

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
Data de registro: 20 Fev 2018 13:13
Cidade/Estado: joinvile/sc
Curtiu: 3 vezes
Mens.Curtidas: 3 vezes

INTERACTIVECLOSE close all thiswindow.release não fecha DBFs

Mensagempor syslink » 10 Set 2018 21:22

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
Data de registro: 20 Fev 2018 13:13
Cidade/Estado: joinvile/sc
Curtiu: 3 vezes
Mens.Curtidas: 3 vezes

INTERACTIVECLOSE close all thiswindow.release não fecha DBFs

Mensagempor syslink » 10 Set 2018 22:28

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
syslink
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 132
Data de registro: 20 Fev 2018 13:13
Cidade/Estado: joinvile/sc
Curtiu: 3 vezes
Mens.Curtidas: 3 vezes

INTERACTIVECLOSE close all thiswindow.release não fecha DBFs

Mensagempor susviela@bol.com.br » 11 Set 2018 13:50

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 ...


#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 )
Avatar de usuário

susviela@bol.com.br
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 236
Data de registro: 30 Jun 2017 11:17
Cidade/Estado: São José / SC
Curtiu: 153 vezes
Mens.Curtidas: 24 vezes

INTERACTIVECLOSE close all thiswindow.release não fecha DBFs

Mensagempor syslink » 11 Set 2018 14:44

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.
...
syslink
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 132
Data de registro: 20 Fev 2018 13:13
Cidade/Estado: joinvile/sc
Curtiu: 3 vezes
Mens.Curtidas: 3 vezes

INTERACTIVECLOSE close all thiswindow.release não fecha DBFs

Mensagempor susviela@bol.com.br » 11 Set 2018 17:41

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 )
Avatar de usuário

susviela@bol.com.br
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 236
Data de registro: 30 Jun 2017 11:17
Cidade/Estado: São José / SC
Curtiu: 153 vezes
Mens.Curtidas: 24 vezes




Retornar para MiniGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 6 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro