Erro esquisito

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Erro esquisito

Mensagem por JoséQuintas »

Este é um tipo de erro que nem tem o que fazer, muto esquisito.
Error BASE/1003 Variable does not exist: SELF
Called from (b)FAZBROWSE(566)
Called from DBSEEK(0)
Called from AUXLICOBJCLASS:ESPECIFICO(71)
Called from AUXLICOBJCLASS:EXECUTE(372)
Called from PAUXLICOBJ(21)
Called from DO(0)
Called from RUNMODULE(119)
Called from BOXMENU(886)
Called from BOXMENU(865)
Called from MENUPRINC(733)
Called from SISTEMA(160)
Called from (b)MAIN(82)
Parece um erro básico, mas não é.

1. FazBrowse() uso por todo o aplicativo, pra tudo que é browse (dbEdit), presente em todo lugar pra tudo.
2. Checagem de variáveis uso -w3 -es2, não passa nenhuma variável que não exista
3. SELF é da classe, pra retornar ela mesma

Nunca vi esse erro numa coisa dessas.
Considerando que a rotina é pra TUDO, tá lá há anos, dar esse erro depois de milhares de usadas... é esquisito.
Até dei uma olhada no fonte, mas nem tem isso lá. (pelo menos agora).

Só vai ficar como um erro esquisito, não há o que fazer.
De repente, vai demorar mais um ano pra acontecer de novo.... rs

Lógico... vou acabar atualizando versão. Se algum dia acontecer de novo, pelo menos a linha do fonte vai bater.... rs
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Erro esquisito

Mensagem por JoséQuintas »

Esqueci que é classe, mas não resolveu

Código: Selecionar todos

METHOD Especifico( lExiste ) CLASS AUXILIARClass

   LOCAL GetList := {}
   LOCAL maxCodigo := jptabel->axCodigo

   IF ::cOpc == "I"
      maxCodigo := "*NOVO*"
   ENDIF
   @ Row()+1, 20 GET maxCodigo PICTURE "@K 999999" VALID NovoMaiorZero( @maxCodigo )
   Mensagem( "Digite código, <F9> pesquisa, <ESC> volta" )
   READ
   Mensagem()
   IF LastKey() == K_ESC .OR. ( Val(maxCodigo) == 0 .AND. maxCodigo != "*NOVO*" )
      GOTO ::nUltRec
      RETURN .F.
   ENDIF
   SEEK ::cTabelaAuxiliar + maxCodigo // <<--------------------- linha 71
   IF .NOT. ::EspecificoExiste( lExiste, Eof() )
      RETURN .F.
   ENDIF
   ::axKeyValue := { maxCodigo }
   RETURN .T.
Segundo o log de erros, esse seek chamou o fazBrowse()

Alguém consegue explicar?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Erro esquisito

Mensagem por JoséQuintas »

Só comentário.... da doidera....

A classe pAuxLicObj é pra licenças, objetos que tem licença, recebe por herança a classe AuxiliarClass

A classe AuxiliarClass é genérica pra cadastros auxiliares, recebe por herança a classe frmCadastroClass

A classe frmCadastroClass é genérica pra cadastros, recebe por herança a classe frmGuiClass

A classe frmGuiClass é genérica pra cadastros, cuida do visual

Só, para por aí... rs
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Erro esquisito

Mensagem por Kapiaba »

Bom dia, o que tem na linha: 566?

Código: Selecionar todos

Called from (b)FAZBROWSE(566)

Código: Selecionar todos

PUBLIC Self
Não resolve?
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Erro esquisito

Mensagem por JoséQuintas »

Pensei numa possibilidade:
como o erro é no SEEK, pode ser algo relacionado ao save/restore do filtro, alterado pela FazBrowse().
Pelo conteúdo da linha 566, o fonte não bate com o erro.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Ricardo C. Freitas
Usuário Nível 1
Usuário Nível 1
Mensagens: 4
Registrado em: 14 Jan 2016 17:33
Localização: Vila Velha

Erro esquisito

Mensagem por Ricardo C. Freitas »

Boa tarde,


Você sabe qual o conteudo de "::cTabelaAuxiliar"


At+
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Erro esquisito

Mensagem por JoséQuintas »

Consegui gerar o erro na minha máquina, com o último fonte:
O erro foi realmente no seek, a linha que vém depois é apenas a indicação de onde foi feito o SET FILTER.
Como já mexi no fonte, a linha indicada antes não era do SET FILTER.

Código: Selecionar todos

   SET FILTER TO jptabel->axTabela == oFrm:cTabelaAuxiliar
Solução:

Código: Selecionar todos

SET FILTER TO &( "jptabel->axTabela == [" + oFrm:cTabelaAuxiliar + "]" )
Explicação:

Agora o filtro usa uma string, e não precisa de nenhuma variável. ( jptabel->axTabela == "LICOBJ" )
Não serve codeblock, porque o FazBrowse() pode colocar filtros adicionais.
E como a variável era da classe, o set filter original havia sido traduzido pra self:cTabelaAuxiliar ou algo assim.
O SEEK acaba acionando a checagem do filtro, o que causou o erro.

Nota:
isso de &( ) é interessante, pois a macro é feita sobre o resultado da expressão, acaba não dependendo das variáveis para o filtro.
melhor do que ficar brigando com variáveis.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Erro esquisito

Mensagem por JoséQuintas »

Faltou dizer:

O problema estava na classe recebida por herança, AuxiliarClass.
E só acontecia no segundo acionamento da pesquisa em seguida ( justamente por estar usando um filtro "restaurado" )

Aproveitei pra dar uma geral em todos os SET FILTER, tinha mais alguns assim.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder