Erro na função DESCEND pelo DBUSEAREA()

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
Mario Mesquita
Usuário Nível 4
Usuário Nível 4
Mensagens: 613
Registrado em: 08 Dez 2009 13:47
Localização: Rio de Janeiro

Erro na função DESCEND pelo DBUSEAREA()

Mensagem por Mario Mesquita »

Bom dia.

Estou com um problema que não consigo resolver desde ontem de manhã e está me deixando louco.

Criei um pequeno projeto e para agilizar, peguei "pedaços" de outros programas, para aproveitar os SETs de ambiente, etc. Sempre funciona, mas agora me deparo com uma coisa estranha.

Ao dar DBUSEAREA numa tabela que tem índices com a função DESCEND, o programa simplesmente aborta, sem mensagem, sem nada.

Lendo o HMG Errorlog File, está dando: "Error BASE/1001 Undefined function: DESCEND"

Como pode ele não localizar a função? Meus projetos não tem LIBs, CHs, nada que precise acrescentar, são simplésimos, todas as funções auxiliares dentro do próprio programa, enfim, um pé de boi mesmo.

Em projetos antigos, tudo funciona corretamente. ele abre as tabelas com o DESCEND certinho. Mas em um novo projeto, mesmo copiando os comandos dos programas que funcionam, dá esse erro.

Pensei até em reinstalar o HMG, ainda uso a versão 3.0.46 que me atende muito bem até agora.

Se alguém tiver alguma ideia, agradeço. Estou sem opções, com prazo pra entregar esse trabalho, um caos...

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

Erro na função DESCEND pelo DBUSEAREA()

Mensagem por JoséQuintas »

coloque #request DESCEND

Ou crie alguma rotina tapa-buraco.

Código: Selecionar todos

FUNCTION NadaFaz()
   RETURN Descend( "x" )
Motivo:
A linquedição só "puxa" funções das LIBs que são necessárias.
Se não tem fonte usando Descend(), ela não é "puxada".
Ou força com "request", ou cria uma rotina que use Descend(), mesmo que a rotina não seja usada já serve pra "avisar" o linqueditor.
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
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Erro na função DESCEND pelo DBUSEAREA()

Mensagem por Pablo César »

Oi Mario,

Eu não tenho problemas algum com a função Descend(). Você não disponibilizou um exemplo de como estaria utilizando. Nem como está compilando. Faça sempre um exemplo prático para que possa ser analisado.
Mas de todas formas, a função Descend é do Harbour e não tem nada a ver com HMG ou pelo menos esta função.

Veja o exemplo: D:\hmg.3.4.3\SAMPLES\Controls\Grid\GRID_35

Aqui utiliza a RDD CDX mas pode também utilizar pra NTX. Eu fiz um teste com NTX e não encontrei problemas. A versão que utilizei é a ultima (HMG 3.4.3).

USE TEST
INDEX ON DESCEND(Str(CODE,4,0)) TO TEST1 // Pra NTX
Como pode ele não localizar a função? Meus projetos não tem LIBs, CHs, nada que precise acrescentar, são simplésimos, todas as funções auxiliares dentro do próprio programa, enfim, um pé de boi mesmo.
Sim. O HMG oferece isso, não precisa estar adicionando libs e requires como comumente você faria utilizando apenas o Harbour. Isso porque a biblioteca oferece a maioria das contribs. Salvo em caso especiais como SQL... também para RDDs. Veja bem, talvez a questão esteja no RDD que está utilizando e você não deu a instrução para utilizar NTX por exemplo.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Erro na função DESCEND pelo DBUSEAREA()

Mensagem por JoséQuintas »

Criei um pequeno projeto e para agilizar, peguei "pedaços" de outros programas, para aproveitar os SETs de ambiente, etc. Sempre funciona, mas agora me deparo com uma coisa estranha.
Ao dar DBUSEAREA numa tabela que tem índices com a função DESCEND, o programa simplesmente aborta, sem mensagem, sem nada.
No aplicativo normal deve ter um INDEX ON Descend(), por isso o aplicativo normal funciona.
Como ele mencionou de fazer uma rotina separada, ela não deve fazer uso de Descend(), a não ser na hora de abrir o arquivo, o que causa o erro, porque no momento da linquedição ela não era usada.

Talvez dois testes práticos:

Código: Selecionar todos

   ? &( "descend(1)" )

Código: Selecionar todos

? Descend(1)
? &( "descend(1)" )
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
Mario Mesquita
Usuário Nível 4
Usuário Nível 4
Mensagens: 613
Registrado em: 08 Dez 2009 13:47
Localização: Rio de Janeiro

Erro na função DESCEND pelo DBUSEAREA()

Mensagem por Mario Mesquita »

Olá, pessoal.

Como é que eu ia saber isso? Caras, estou até passando mal, sinceramente.

Abaixo, meu código com um "gatilho" pra testar a abertura da tabela com DESCEND:

Código: Selecionar todos

#include <hmg.ch>

Function Main
   PRIVATE cCod          := SPAC(10), ;
                cSen           := SPAC(10), ;
                TestesMario := .t.  
   
   SET DELE ON
   SET CENT ON
   SET SOFT OFF
   SET DATE BRIT
   SET EPOC TO 1964
   SET NAVIGATION EXTENDED
   SET BROWSESYNC ON
	
   REQUEST DBFCDX
   RDDSETDEFAULT("DBFCDX")
   DBSETDRIVER("DBFCDX")
	
   DBUSEAREA( .T.,"DBFCDX", "SETCER"   )
   DBUSEAREA( .T.,"DBFCDX", "USUARIOS" )

   IF ! FILE("*.CDX")
      MSGINFO("SEM INDEXES, APÓS ABERTURA RODE A ORGANIZAÇÃO.")
     INDEX ON NOMME TAG NOMME TO USUARIOS
     CLOSE
   ENDIF
   SET INDEX TO USUARIOS

   // Path da pasta do outro sistema.

   IF ! EMPTY(SETCER->PASTA_PROT)
      xPath := ALLTRIM(SETCER->PASTA_PROT)
      SET PATH TO (xPath)
   ENDIF

   // teste de abertura de uma tabela em outra área. Ela tem DESCEND nos seus índices.

   IF ! FILE("PEDIDOS.DBF")
      MSGINFO("PEDIDOS.DBF NÃO LOCALIZADO")
   else
      msginfo('Localizou Pedidos.dbf')
   ENDIF   
   DBUSEAREA( .T.,"DBFCDX","PEDIDOS",,  .T. )   // Aqui que ocorre o fim do programa sem aviso.
   SET INDEX TO PEDIDOS
   
   msginfo('Abriu Pedidos.dbf')
   ////
   
   Load Window Main
   Main.Center
   Main.Activate
Return
De fato, não tenho um DESCEND nesse pequeno programa. Posso até forçar isso na indexação de uma tabela, só pra garantir.

Só feras do Harbour como vocês pra salvar a vida de um velho clipeiro burro, rs

Vou testar aqui e reporto o resultado.

Muito obrigado mesmo!

Saudações,
Mario.
Avatar do usuário
Mario Mesquita
Usuário Nível 4
Usuário Nível 4
Mensagens: 613
Registrado em: 08 Dez 2009 13:47
Localização: Rio de Janeiro

Erro na função DESCEND pelo DBUSEAREA()

Mensagem por Mario Mesquita »

Pessoal, voltei!

Pra testar, criei um índice com DESCEND naquela tabelinha e deu certo. Deu um errinho, mas é galho fraco pq fiz correndo.

Talvez eu use mesmo o #request pra não criar índices á toa.

Eu estou há 18 horas queimando a mufa com isso. Ontem de 10 às 22 e hoje desde sete da manhã até agora quando li as respostas. Se não fosse vocês ia ficar até o natal pra descobrir. Fora que estava com medo de ser alguma falha que afetasse os outros projetos. Tentei compilar até em outro computador achando que era vírus, antivírus, firewall ou dano em algum arquivo no HMG da minha máquina.

Acho que é o ponto fraco da cultura Harbour, falta de literatura de apoio. Eu ainda tenho um livrinho do Ramalho como guia do Clipper e ainda me ajuda com coisas que esqueço. Se tivesse um livro ou um e-book em português, de preferência, ia vender como pão quente. Tem coisa, tem. Mas muito pouco e em PT-Br, piorou...

Se não fosse os mais experientes que ajudam os menos informados aqui, a gente estava ferrado e mal pagos.

De novo, muitíssimo obrigado a vocês. Não era brincadeira, estava passando mal mesmo. Bateu pânico, confesso.

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

Erro na função DESCEND pelo DBUSEAREA()

Mensagem por JoséQuintas »

Só corrigindo: mencionei #request mas é REQUEST.
Aproveitando, e colocando algo que já usa pelo mesmo motivo:

Código: Selecionar todos

REQUEST HB_CODEPAGE_PTISO
REQUEST DBFFPT
REQUEST DBFCDX
REQUEST DESCEND
Tudo é por um mesmo motivo: se não colocar, não linquedita.
É até mais normal do que parecia, mas é difícil lembrar que DESCEND e outras funções precisam disso, caso não estejam em uso no fonte.
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
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Erro na função DESCEND pelo DBUSEAREA()

Mensagem por Pablo César »

Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Mario Mesquita
Usuário Nível 4
Usuário Nível 4
Mensagens: 613
Registrado em: 08 Dez 2009 13:47
Localização: Rio de Janeiro

Erro na função DESCEND pelo DBUSEAREA()

Mensagem por Mario Mesquita »

Alô, vcs!

Sinceramente não estou certo se entendia a utilidade do REQUEST, só o usei em algumas coisas por empirismo e por alguma necessidade anterior. Agora entendi que o compilador pode não trazer todos os elementos da LIB, se estes não forem necessários. Conhecer o Harbour e a suas nuances em compilação, linkedição, etc, seria desejável se não tivéssemos que correr o tempo todo com o trabalho. Mas a cada dia me certifico que é uma ferramenta espetacular se o programador souber tirar o máximo dela. Não é meu caso ainda.

Pablo, olha que procurei tópicos com o DESCEND, mas voltaram mais de 200 citações e não vi essa em especial. Tinha poupado tempo e chateação.

Coloquei o REQUEST DESCEND no Main do programa e resolveu. Tomara que não surja outro abacaxi desses tão cedo, senão a pressão do velhinho vai a 22...

De novo, obrigado a vocês.

Abraço,
Mario.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Erro na função DESCEND pelo DBUSEAREA()

Mensagem por asimoes »

Mário,

Essa do REQUEST DESCEND vem do clipper
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Mario Mesquita
Usuário Nível 4
Usuário Nível 4
Mensagens: 613
Registrado em: 08 Dez 2009 13:47
Localização: Rio de Janeiro

Erro na função DESCEND pelo DBUSEAREA()

Mensagem por Mario Mesquita »

Boa noite à todos!

Asimoes, comigo no Clipper nunca aconteceu...

Dei sorte, então. Mas tomei esse susto agora.

Saudações,
Mario.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Erro na função DESCEND pelo DBUSEAREA()

Mensagem por Pablo César »

Mario Mesquita escreveu:comigo no Clipper nunca aconteceu...
Comigo também, não. Aliás esse negócio do REQUEST eu só vi apartir do Harbour...
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Erro na função DESCEND pelo DBUSEAREA()

Mensagem por asimoes »

REQUEST vem do Clipper é só pesquisar no google ou ver nos livros sobre clipper, isso para quem já programou em clipper é conhecido.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Erro na função DESCEND pelo DBUSEAREA()

Mensagem por asimoes »

Definição de REQUEST

REQUEST
Declares the symbolic name of an external function or procedure for the linker.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Erro na função DESCEND pelo DBUSEAREA()

Mensagem por asimoes »

No LeoDb (server.prg) por um acaso o criador do LedoDb tá errado?
Olha só o REQUEST, no clipper isso era usado quando era criado um ovl (overlay) seria uma espécie de dll

Código: Selecionar todos

   REQUEST __HB_EXTERN__

   REQUEST  ABS, ALLTRIM, AT, CHR, CTOD, DATE, DAY, DELETED, DESCEND, DTOC, DTOS, ;
      EMPTY, I2BIN, L2BIN, LEFT, LEN, LOWER, LTRIM, MAX, MIN, MONTH, OS, PAD, PADC, ;
      PADL, PADR, RAT, RECNO, RIGHT, ROUND, RTRIM, SPACE, STOD, STR, STRZERO, ;
      SUBSTR, REPLICATE, TIME, TRANSFORM, TRIM, UPPER, VAL, YEAR, ;
      hb_ATokens, hb_tokenGet, hb_tokenCount, hb_WildMatch, hb_DiskSpace
   REQUEST TIME, HB_DATETIME, HB_DTOT, HB_TTOD, HB_NTOT, HB_TTON, HB_CTOT, HB_TTOC, ;
      HB_TTOS, HB_STOT, HB_HOUR, HB_MINUTE, HB_SEC, HB_VALTOEXP

   REQUEST FieldPos, FieldGet, FieldPut, Deleted, hb_FieldType, hb_FieldLen, hb_FieldDec
   REQUEST dbGoTop, dbGoBottom, dbSkip, dbGoto, dbSeek, Bof, Eof, dbEval, dbInfo, BOM
   REQUEST dbSetFilter, dbClearFilter
   REQUEST dbAppend, dbCommit, RLock, FLock, dbUnlock, dbDelete, dbRecall
   REQUEST ordKeyVal, dbOrderInfo, Alias, Select, dbSelectArea

►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Responder