indexar ntx descendente

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

Moderador: Moderadores

jcsprog
Usuário Nível 2
Usuário Nível 2
Mensagens: 63
Registrado em: 27 Abr 2005 12:04
Localização: sao paulo - jd.brasil

indexar ntx descendente

Mensagem por jcsprog »

e ai pessoal preciso indexar descendente os seguintes campos nome fantasia + numero do pedido
fantasia = space(20) e numero do pedido numerico(10)
no clipper 5.3 erra assim index on fantasia+descend(str(pedido,10)) to lanp1
funcionava tudo bem
no harbour nao funciona da erro ja na linha de index
agradeço a ajuda
utilizo harbour x minigui



---
Nota da Moderação (Maligno):
A presente mensagem, totalmente composta por letras maiúsculas, teve de ser editada para a troca de caixa. Por favor, atente para as regras do fórum e redija suas mensagens de acordo com as regras de netiqueta.
jcsprog
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Re: indexar NTX DESCENDENTE

Mensagem por alxsts »

Olá!

Experimente colocar, no início do arquivo .PRG, a declaração abaixo:

Código: Selecionar todos

REQUEST descend
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: indexar NTX DESCENDENTE

Mensagem por sygecom »

Não seria apenas assim:

Código: Selecionar todos

INDEX ON FANTASIA+STR(PEDIDO,10) TO LANP1 DESCENDING 
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
jamazevedo
Usuário Nível 3
Usuário Nível 3
Mensagens: 122
Registrado em: 29 Dez 2005 16:50
Localização: Manaus - AM

Re: indexar NTX DESCENDENTE

Mensagem por jamazevedo »

O problema que ocorre é que a função DESCEND() não é linkada com o executável. Sabe-se lá porque motivo.
Para resolver o problema fiz uma chamada a essa função no fim do programa e funcionou, veja o exemplo abaixo:

Código: Selecionar todos

FUNCTION Main()
          ....
          USE Clientes VIA "DBFCDX"
          INDEX ON Clientes->Nome + DESCEND( Clientes->Numero ) TO Clientes
          ....
RETURN
DESCEND()
Já a solução apresentada pelo Alxsts para mim é novidade vou testá-la.

E a solução do Sygecom deixará todo o índice invertido, mas pelo que percebi em teu exemplo, a necessidade é somente inverter o numero.
______________________________________________________
Usando: Linux Ubuntu 18.04, Harbour 3.2.0dev r1811161533
______________________________________________________
José Airton de Menezes Azevedo
Manaus - AM
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: indexar ntx descendente

Mensagem por Maligno »

O problema que ocorre é que a função DESCEND() não é linkada com o executável.
Exatamente. Explicando: a simples inclusão do nome "Descend()" na chave de índice não surte efeito algum. Uma chave de índice é apenas uma simples string, avaliada em run-time.
Para casos assim, há duas soluções: como você descobriu, inserindo uma simples chamada à função, de forma inócua OU utilizando o comando apropriado para esse fim: REQUEST DESCEND, como o colega "alxsts" indicou. Isso faz com o que o símbolo DESCEND seja forçosamente incluído na tabela de ligações passada ao linker, que então incluirá no EXE o módulo onde este símbolo se encontra.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Re: indexar ntx descendente

Mensagem por lugab »

Pessoal, a solucão é colocar "REQUEST DESCEND" no ínício ?

Se SIM, por tabela, a solução para quem usa CDX seria a abaixo ?

REQUEST DBFCDX
RDDSETDEFAULT("DBFCDX")
REQUEST DESCEND

Grato,

gabriel
lugab
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: indexar ntx descendente

Mensagem por Maligno »

Para o problema de "unresolved external" deve funcionar. Ou pelo menos deve gerar o EXE sem qualquer erro. Porém, o OP não se manifestou a respeito, nem tampouco detalhou o erro. Apenas cogitou-se a possibilidade do erro ser esse. Se for, deve resolver. Se for outro erro, restará ao OP entrar em detalhes.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
jcsprog
Usuário Nível 2
Usuário Nível 2
Mensagens: 63
Registrado em: 27 Abr 2005 12:04
Localização: sao paulo - jd.brasil

fUNCIONOU COM REQUEST

Mensagem por jcsprog »

VALEU GALERA
:D
jcsprog
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Re: indexar ntx descendente

Mensagem por alxsts »

Olá!

Ótimo!

Algumas considerações finais:
- Descend() de um campo tipo data retorna um valor numérico. Portanto, para indexar uma data em ordem cronológica inversa, use:

Código: Selecionar todos

INDEX ON STR( Descend( dtAlgo ) )
- para recuperar dados em um arquivo indexado com Descend(), é necessário usar a função também:

Código: Selecionar todos

<xcAlias>->( DbSeek( STR( Descend( dtAlgo ) ) ) )
- existe uma queda de performace nos processos de indexação e busca.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: indexar ntx descendente

Mensagem por Maligno »

A regra é clara: a perfomance na busca por uma chave de índice será tão pior quanto mais complexa for a expressão da chave.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Responder