Página 1 de 1
Erro no CLOSE DATA quando tem relacionamento
Enviado: 11 Out 2021 15:40
por ssflavio
Boa tarde amigos!
Quando utilizo o comando CLOSE DATA da erro se tiver algum arquivo com relacionamento.
Utilizo a versão 3.20 do Harbour.
No clipper não dava esse erro!
Alguem tem uma solução fácil para isso?
eu estava tirando o relacionamento manualmente antes de usar o CLOSE DATA.
Só que implementei o fechamento do sistema depois de 30 minutos sem uso e ele utiliza o a função __Quit() ai não tenho controle do que esta aberto e da erro.
>>> MEU AGRADECIMENTO AO NOSSO COLEGA JAIRO MAIA QUE ENSINOU COMO FAZER O ENCERRAMENTO APÓS UM TEMPO DE INATIVIDADE <<<
Erro no CLOSE DATA quando tem relacionamento
Enviado: 11 Out 2021 16:19
por JoséQuintas
Nunca ouvi falar sobre esse tipo de erro.
Qual a mensagem de erro?
Note que certas LIBs usam PROCEDURES de entrada e saída. (INIT PROCEDURE e acho que END PROCEDURE).
Essas rotinas são obrigatoriamente executadas no início e no final do aplicativo, não importa aonde estejam, e não importa quantas sejam.
Existe a possibilidade de ser uma delas.
Erro no CLOSE DATA quando tem relacionamento
Enviado: 11 Out 2021 17:36
por ssflavio
Error BASE/1002 Alias não existe: PED
Called from SGC42.PRG/(b)SGC42(90)
Called from /DBCLOSEALL(0)
Called from SGC42.PRG/SGC42(182) <<< LINHA DO CLOSE DATA
Called from SGC4.PRG/SGC4(52)
Called from sgc.prg/MAIN(201)
No inicio do programa abro os arquivos desta forma (só um exemplo, tem mais arquivos abertos)
Código: Selecionar todos
if !net_use('PED') && PEDIDOS
return
endif
set order to 3
set rela to CODCLI_PED into CLI
if !net_use('PPE') && PRODUTOS DOS PEDIDOS
return
endif
set relation to CODPRO_PPE into PRO,;
to CODMOE_PPE+dtos(PED->DTACAM_PED) into COT <<< LNHA 90
.
.
.
no final do programa tenho que fechar os relacionamentos na mão antes
Erro no CLOSE DATA quando tem relacionamento
Enviado: 11 Out 2021 17:45
por ssflavio
analisando o erro, agora na hora de postar a resposta anterior, percebi que da 2 erros no programa sgc42, um na linha 182 e outro na linha 90
na linha 90 o segundo relacionamento usa um campo do arquivo anterior (PED)
esse programa é muito velho, talvez tenha que reescrever algumas partes
esse relacionamento é meio estranho
Erro no CLOSE DATA quando tem relacionamento
Enviado: 12 Out 2021 03:00
por Jairo Maia
ssflavio escreveu:eu estava tirando o relacionamento manualmente antes de usar o CLOSE DATA.
Quando usa
__Quit() e se você usa uma
EXIT PROCEDURE, ela será executada, mas não se aplica nesse caso, já que uma
EXIT PROCEDURE não herda nada (absolutamente nada) do sistema, assim, não é possível evitar esse
Runtime Error com ela.
Porém, uma sugestão é você trocar o
__Quit() da tarefa de fechamento e substituir por exemplo por
EncerrarSistema(), assim, se atingido o tempo de inatividade, a tarefa não executa o
__Quit() diretamente, mas sim sua função. Em sua função trate os fechamentos de relacionamentos e termine com
QUIT.
Erro no CLOSE DATA quando tem relacionamento
Enviado: 19 Nov 2021 16:21
por ssflavio
teria como saber quantos arquivos estão abertos no momento???
se tiver como, seria simples varrer todos os arquivos abertos e remover os relacionamentos antes de efetuar o comando CLOSE DATA
Erro no CLOSE DATA quando tem relacionamento
Enviado: 19 Nov 2021 17:54
por alxsts
Olá!
Veja se funciona:
Código: Selecionar todos
//--------------------------------------------------------------------------------------------------
FUNCTION DbClearRelationAll()
LOCAL nArea
For nArea := 1 To 255
If Used()
(nArea)->( DbClearRelation() )
Endif
Next
RETURN NIL
//--------------------------------------------------------------------------------------------------
Só escrevi o código. Não testei.
Erro no CLOSE DATA quando tem relacionamento
Enviado: 19 Nov 2021 22:57
por Jairo Maia
alxsts escreveu:Só escrevi o código. Não testei.
Também não testei a função do Alexandre, mas caso não funcione, tente dessa forma:
Código: Selecionar todos
FUNCTION DbClearRelationAll()
LOCAL nArea
For nArea := 1 To 255
If !Empty( Alias( nArea ) )
Select( Alias( nArea ) )
DbClearRelation()
Endif
Next
RETURN NIL
Erro no CLOSE DATA quando tem relacionamento
Enviado: 19 Nov 2021 23:18
por JoséQuintas
Procure nos fontes aonde faz o relacionamento, pra saber quais relacionamentos precisa desligar.
Mas... fecha os arquivos só no final do aplicativo?
Eu costumo abrir/fechar em cada módulo, até pra ter certeza de que tudo está salvo.
SET RELATION eu nunca usei, porque sempre existiu a história de que ele não é 100% eficaz.
Já tentou verificar se realmente precisa disso?
Erro no CLOSE DATA quando tem relacionamento
Enviado: 24 Nov 2021 12:05
por Kapiaba
Bom dia. Não entendi isso:
sele PPE
use // Você Fechou o banco.
aqui você tenta fechar o que já fechou?
close data <<< LINHA 182 -> CLOSE DATABASES or DBCLOSEALL()
Retire o USE e use: CLOSE( PPE ) // só ele, não todos os .DBFs.
Não me faz sentido.
Regards, saludos.
Erro no CLOSE DATA quando tem relacionamento
Enviado: 26 Nov 2021 17:14
por ssflavio
obrigado pela ajuda amigos!
a ideia do Jairo caiu como uma luva para a minha necessidade!
GRATIDÃO!