Página 1 de 2

Erro na função DESCEND pelo DBUSEAREA()

Enviado: 16 Nov 2016 07:35
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.

Erro na função DESCEND pelo DBUSEAREA()

Enviado: 16 Nov 2016 09:24
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.

Erro na função DESCEND pelo DBUSEAREA()

Enviado: 16 Nov 2016 10:04
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.

Erro na função DESCEND pelo DBUSEAREA()

Enviado: 16 Nov 2016 10:25
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)" )

Erro na função DESCEND pelo DBUSEAREA()

Enviado: 16 Nov 2016 12:09
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.

Erro na função DESCEND pelo DBUSEAREA()

Enviado: 16 Nov 2016 12:34
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.

Erro na função DESCEND pelo DBUSEAREA()

Enviado: 16 Nov 2016 14:17
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.

Erro na função DESCEND pelo DBUSEAREA()

Enviado: 16 Nov 2016 14:30
por Pablo César

Erro na função DESCEND pelo DBUSEAREA()

Enviado: 16 Nov 2016 14:57
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.

Erro na função DESCEND pelo DBUSEAREA()

Enviado: 26 Nov 2016 18:59
por asimoes
Mário,

Essa do REQUEST DESCEND vem do clipper

Erro na função DESCEND pelo DBUSEAREA()

Enviado: 26 Nov 2016 20:57
por Mario Mesquita
Boa noite à todos!

Asimoes, comigo no Clipper nunca aconteceu...

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

Saudações,
Mario.

Erro na função DESCEND pelo DBUSEAREA()

Enviado: 27 Nov 2016 12:15
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...

Erro na função DESCEND pelo DBUSEAREA()

Enviado: 27 Nov 2016 13:46
por asimoes
REQUEST vem do Clipper é só pesquisar no google ou ver nos livros sobre clipper, isso para quem já programou em clipper é conhecido.

Erro na função DESCEND pelo DBUSEAREA()

Enviado: 27 Nov 2016 13:48
por asimoes
Definição de REQUEST

REQUEST
Declares the symbolic name of an external function or procedure for the linker.

Erro na função DESCEND pelo DBUSEAREA()

Enviado: 27 Nov 2016 13:55
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