Falha no uso da função DESCEND

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

Falha no uso da função DESCEND

Mensagem por Mario Mesquita »

Boa noite, pessoal.

Um problema muito interessante está ocorrendo comigo hoje, e após umas seis horas me lascando aqui, se alguem já passou por isso, não sei se por causa da HMG ou do Harbour, aceito uma luz:

Estou montando um programa que deve ler um DBF de outro programa, em outra pasta. Para isso, criei um SET PATH para esse programa abrir a tabela.

Só que dá um erro ao abrir a mesma: Error base 1001: Função indefinida: DESCEND.

A chave primaria de um indice dessa tabela tem um DESCEND e é um campo data. A principio achei que fosse o PATH. Mas ele está certo.

Um detalhe: O arquivo CDX tem o mesmo nome do DBF e o erro de manifesta antes da abertura do indice pelo SET INDEX TO. Comecei a achar que era isso. Mesmo tentando abrir sem indice, dava o mesmo erro.

Em seguida, tentei copiando esse DBF e seu CDX para a pasta do sistema que estou preparando. Nada. Em seguida, apaguei o CDX e rodei o programa. Abriu.

Em seguida fiz mais uma coisa: Indexei esse DBF no sistema novo. Aì, abre. Mas se eu copiar o DBF e o CDX originais da sua pasta de origem, não abre.

Na pasta original, essa tabela roda normalmente pelo seu programa. Mas no que estou testando não.

Pensei que podia ser o HMG 3.0.46, mas com o 3.0.41 tambem não rodou.

Copiar a tabela não é uma opção, pois terei outras pra fazer a mesma coisa. Tô doidinho de estar apanhando de uma coisa tão simples...

No arquivo Hb_Out, que reporta os erros, a seguinte mensagem:

"Erro irrecuper vel 9104: hb_cdxIndexFree: index file still locked."

Muito estranho. Se alguem já viu isso e puder me dar a dica, agradeço.

Saudações,
Mario.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Falha no uso da função DESCEND

Mensagem por alxsts »

Olá!

Este problema (falta da função Descend()) ocorre pois, na hora da geração do executável, não há nenhuma referência a ela. Assim, ela não é linkada ao executável. Você pode dizer: mas eu referencio ela na criação do índice". Só que ela está em alguma string que é a chave do índice ou até mesmo em algum arquivo .DBF que contem as chaves de índice.

Para estes casos, existe em xBase o comando REQUEST. Ele força a linkedição de algum módulo ao executável, mesmo que não haja referência explícita.

Para solucionar o teu problema, inclua a linha abaixo no início dos PRGs principais dos sistemas:

Código: Selecionar todos

REQUEST Descend()
Use a busca do fórum Existem tópicos semelhantes.
[]´s
Alexandre Santos (AlxSts)
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á

Falha no uso da função DESCEND

Mensagem por Pablo César »

Eu tenho visto como DESCENDING em https://vivaclipper.wordpress.com/2012/ ... -commands/

Exemplo de uso, você encontra em C:\hmg.3.0.46\SAMPLES\GRID.35

O changelog do Harbour diz:
2002-02-02 11:40 UTC+0300 Alexander Kresin <alex@belacy.belgorod.su>
* source/compiler/genhrb.c
* source/vm/runner.c
* Creating/checking signature and version number for .hrb file.
It is: \192 + 'H' + 'R' + 'B'
then 2 byte version number, currently - 2
* include/hbrddntx.h
* source/rdd/dbfntx/dbfntx1.c
* some fixes and additions - DESCENDING clause works now.
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

Falha no uso da função DESCEND

Mensagem por Mario Mesquita »

Valeu pelas dicas, pessoal.

Imaginei que pudesse ser algo assim, no caso do REQUEST.

Mas o estranho é que dentro do programa que trata a tabela, não dá erro. Só quando outro programa, estranho...

Não uso DESCENDING pois entendi, ao ler um guia do Harbour, ele engloba todas as chaves do indice. A função DESCEND() pode se aplicar a apenas uma chave. No meu caso a chave primaria.

A solução que consegui foi criar outro indice, fora daquele que dava o erro. Eu monto o um CDX unico, com aqueles TAGs, e botando todos os indices lá dentro.

Percebendo isso, fiz outro CDX com a organização que precisava para a importação dos dados e resolveu.

Ainda acho isso estranho, mas deu-se jeito.

Agradeço a ajuda de voces.

Saudações,
Mario.
Responder