Indexação utilizando descending.

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

Moderador: Moderadores

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

Indexação utilizando descending.

Mensagem por JoséQuintas »

Esqueceram de uma coisa: CODEPAGE
A função Descend() não funciona pra qualquer codepage, somente pra padrão.
Eu criei esta aqui pra funcionar com qualquer codepage.

http://www.harbourdoc.com.br/show.asp?s ... PDescend()

E lógico... confira isso de mudar a ordem.
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
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Indexação utilizando descending.

Mensagem por Eolo »

Help do xHarbour

"StrZero() converts a numeric value to a character string. This is required when numeric values must be concatenated with character strings for formatted display, or when index keys containing Numeric and Character fields must be created."
Poka,

Tava procurando algo sobre indexação, cheguei neste tópico. Ele é meio antigo, talvez vc já tenha resolvido, mas vou acrescentar uma coisa. Li em algum lugar (ou alguém me sugeriu), ainda no tempo do Summer, que a indexação pressupõe valores sempre de mesmo tamanho e que, se fosse necessário usar STR(), era preciso fazer o seguinte:

Código: Selecionar todos

- definir um tamanho fixo para a saída:
str(1234.34,10,2) -> "   1234.34" // sendo 10 o tamanho do campo
str(   1.34,10,2) -> "      1.34"

- ou (preferencialmente) usar o STRZERO(), também com tamanho fixo:
strzero(1234.34,10,2) -> "0001234.34"
strzero(   1.34,10,2) -> "0000001.34"
Não lembro mais da explicação da coisa, mas usava STR() e passei a usar STRZERO(), com tamanho fixo, e nunca tive problemas no Clipper (Summer e 52e) ou no xHarbour, usando Descend() ou não.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Indexação utilizando descending.

Mensagem por JoséQuintas »

Só reforçando o detalhe da codepage.
Tive problemas aqui num index on Descend(Dtos()), sendo que Dtos() só usa números.
Isso foi depois de adotar a codepage PTISO.
Quando relatei o problema, o pessoal falou que por questão de compatibilidade com Clipper isso não seria alterado.
Então quando se usa codepage, é bom esquecer a Descend() original e também a compatibilidade com outros programas.
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
Poka
Usuário Nível 4
Usuário Nível 4
Mensagens: 563
Registrado em: 25 Out 2004 21:26
Localização: Leme/SP

Indexação utilizando descending.

Mensagem por Poka »

Olá Eolo e José Quintas.


Na época não resolvi não, deixei o relatório em outra ordem mesmo, não do jeito que cliente pediu. Vou fazer mais uns testes, depois volto aqui para dizer se resolveu ou não.

Um abraço

Poka
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Indexação utilizando descending.

Mensagem por Kapiaba »

Código: Selecionar todos

//#include "FiveWin.ch"

REQUEST DBFCDX
REQUEST DESCEND  //-> EXTERNAL DESCEND - É obrigatório.

function Main()

   rddRegister(   "DBFCDX", 1 )
   rddsetdefault( "DBFCDX" )

   indexar()

return nil

function indexar()

   USE ARQCID ALIAS ARQCID NEW

   INDEX ON CODPRACA  + DESCEND(STR(VALOR)) TAG CODPRA TO ARQCID

   INDEX ON NOMEPRACA + DESCEND(STR(VALOR)) TAG NOMVAL TO ARQCID

   go top

   SET ORDER TO 01

   Browse()

   go top

   SET ORDER TO 02

   Browse()

return nil
abs
Responder