Criar indices

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
Ricardo Sales Ribeiro
Usuário Nível 3
Usuário Nível 3
Mensagens: 279
Registrado em: 13 Jul 2004 18:06
Localização: Fortaleza-Ceara

Criar indices

Mensagem por Ricardo Sales Ribeiro »

Olá amigos
Boa Tarde!


Gostaria de saber como executar um comando onde eu crio um índice, de um campo numérico, de tal forma que fique
em ordem decrescente, ou seja do maior para o menor.

Tenho um banco onde eu gero uma media, gostaria que esse banco ficasse por ordem de media, do maior para o menor.


Atenciosamente,
Ricardo Sales
Fortaleza-Ce
lodara53@yahoo.com.br
lodara53@hotmail.com
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Criar indices

Mensagem por alxsts »

Olá!

Precisa usar a função Descend()

Código: Selecionar todos

REQUEST DESCEND

FUNCTION Main()

   Indexar()

   USE Tabela Shared New 
   Tabela->( DbSetIndex( "Tabela" ) )

   // Usar a função Descend() na pesquisa também
   Tabela->( DbSeek(Descend( 876 ) ) )

   ? Tabela->Media

   Tabela->( DbCloseArea() )
Return

//----------------------------------------------

FUNCTION Indexar()

   USE Tabela Exclusive New

   // Usar a função Descend() para criar indice decrescente
   Index On Descend(media) To Tabela

   Tabela->( DbCloseArea() )

Return

//----------------------------------------------
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Ricardo Sales Ribeiro
Usuário Nível 3
Usuário Nível 3
Mensagens: 279
Registrado em: 13 Jul 2004 18:06
Localização: Fortaleza-Ceara

Criar indices

Mensagem por Ricardo Sales Ribeiro »

Olá

Obrigado pela orientação e ajuda.

Atenciosamente
Ricardo Sales
Fortaleza-Ce
lodara53@yahoo.com.br
lodara53@hotmail.com
Eros
Usuário Nível 3
Usuário Nível 3
Mensagens: 291
Registrado em: 19 Dez 2008 19:23
Localização: Goiania

Criar indices

Mensagem por Eros »

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 ou IDX ou NTX - Depende do uso
RDDSETDEFAULT("DBFCDX")
REQUEST DESCEND

So assim a função de indexar por ordem inversa vai funcionar.. caso contrario nao se consegue.

Ou DBSetOrder->
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Criar indices

Mensagem por alxsts »

Olá!

Sim Eros, tudo que você escreveu é verdadeiro.

A função Descend(), quando usada, é incorporada como atributo do arquivo de índice, para possibilitar a execução de REINDEX. Na hora da pesquisa é obrigatório utilizá-la, se você criou um índice usando ela. Tudo isto contribui para a degradação da performance do aplicativo pois leva mais tempo a cada atualização de índices (por exemplo, após incluir ou excluir registros).

Se precisar de ordenações descendentes, o ideal é usar a cláusula DESCENDING do comando INDEX ON:

Código: Selecionar todos

        USE Customer NEW
        INDEX ON Name TO Customer DESCENDING
Neste caso, Descend() também é incorporada como atributo do arquivo de índice, para possibilitar a execução de REINDEX, mas a atualização de índices é mais rápida.

Fonte.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Criar indices

Mensagem por Eolo »

O REQUEST só é necessário se uma função NÂO está explícita e então vc precisa "request" (requerer) ao linkador para a incluir.

No exemplo abaixo:
1. se vc guardar os parâmetros dentro de uma string - pra usar depois a "&", a linkedição não vai considerar DESCEND(), que está "escondida" dentro da string, e vai dar pau no run time; 2. se DESCEND() estiver explícito, não precisa do REQUEST.

Código: Selecionar todos

* 1
request descend
indice="anome+descend(dtos(odata))"
index on &indice to lixo

* 2
* request descend // não precisa
inde on anome+descend(dtos(odatv))+strzero(ovalo,15,2) to blabla
Responder