Erro na função DESCEND pelo DBUSEAREA()

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Erro na função DESCEND pelo DBUSEAREA()

Mensagem por asimoes »

Mário esse assunto com DESCEND vem desde 2012 você é o autor do tópico:

https://pctoledo.org/forum/viewto ... 45&t=13702
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
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

Erro na função DESCEND pelo DBUSEAREA()

Mensagem por Mario Mesquita »

Bom dia a todos!

Caramba, do fundo falso do baú. Confesso que nem lembrava do post e quando joguei DESCEND na busca veio um monte de coisas e não reparei esse.

Tem como eu verificar os meus posts? Assim, evito assuntos redundantes.

Foi sem querer, desculpem minha distração.

Saudações,
Mario.
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

Erro na função DESCEND pelo DBUSEAREA()

Mensagem por Mario Mesquita »

Bom dia, pessoal.

Levantei o tópico pois de novo me deparo com problemas com o DESCEND. Depois da última dúvida/problema de porque o DESCEND não carregava e com a ajuda de vcs resolvi aqui, eis que, prosseguindo com a passagem do 3.0.46 para a 3.4.3 notei algo estranho.

Notei que ao abrir um browse com uma tabela que exibe registros com um índice com DESCEND, ele não ia ao topo do arquivo. Fica parado em um ponto da tabela. E pelo que notei, parece que ele não está indexando a tabela toda. Isso funciona perfeitamente compilado com o HMG 3.0.46, mas na 3.4.3 está ocorrendo isso. Pra ilustrar abaixo a indexação do arquivo:

Código: Selecionar todos

DBUSEAREA( .T.,"DBFCDX","TITULOS" )
INDEX ON PROTOCOLO+SERIE                                        TAG TITCOD  TO TITULOS    // 1
INDEX ON SACADO+SITUACAO                                        TAG TITSAC  TO TITULOS     // 2
INDEX ON CGC+SITUACAO                                              TAG TITPESS TO TITULOS     // 3
INDEX ON NUMDOC                                                        TAG TITDOC  TO TITULOS    // 4
INDEX ON DTOS(DTENTRADA)+PROTOCOLO                     TAG DTPROT  TO TITULOS   // 5
INDEX ON DTOS(DTPAGTO)                                            TAG TITCANC TO TITULOS   // 6
INDEX ON CODBANCO+DTOS(DTPROTESTO)                     TAG TITBCO   TO TITULOS   // 7
INDEX ON CODBANCO+PROTOCOLO+DTOS(DTPROTESTO) TAG TITBCOP TO TITULOS  // 8
INDEX ON DTOS(DTPROTESTO)                                       TAG TITDATA TO TITULOS  // 9
INDEX ON CPF+SITUACAO                                               TAG TITCPF   TO TITULOS  // 10
INDEX ON LIVAPT+FOLAPT+PROTOCOLO                         TAG TITLIV    TO TITULOS   // 11
INDEX ON DTOS(DTCHEQUE)+NUMCHEQUE                      TAG TITGUIA TO TITULOS // 12
INDEX ON NUMDISTRIB                                                   TAG TITDIST  TO TITULOS  // 13
INDEX ON DESCEND(PROTOCOLO+SERIE)                         TAG DESCOD  TO TITULOS // 14  <-- esse índice
INDEX ON ARQREMESSA                                                 TAG TITREM   TO TITULOS  // 15
INDEX ON SITUACAO                                                     TAG TITSIT    TO TITULOS    // 16
DBCLOSEAREA()
Então, em uma tela de consulta, quando dou um DBGOTOP() com esse índice, ele não vai ao início, que na verdade é o fim, porém invertido:

Código: Selecionar todos

DBUSEAREA( .T.,"DBFCDX","TITULOS",, .T. )   
SET INDEX TO TITULOS
DBSETORDER(14)
DBGOTOP()

DO EVENTS

Load Window Frm_11100
Frm_11100.center
Frm_11100.Btn_Inclui.Enabled  := .T.
Frm_11100.Btn_Altera.Enabled := .T.
Frm_11100.Btn_Exclui.Enabled := .T.
Frm_11100.Text_1.SetFocus
Frm_11100.activate
Estou indexando com CDX e compilando com a HMG ANSI 32 bits. Preocupa que uma coisa boba não funcione corretamente. Nunca tive problema com DESCEND desde o Clipper.

Como sempre, agradeço qualquer luz que alguém puder me dar. Vi que alguns colegas usam o DESCEND normalmente, então deve ser algo que não estou fazendo ou fazendo errado ou de forma incorreta para a versão da HMG.

Saudações,
Mario.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Erro na função DESCEND pelo DBUSEAREA()

Mensagem por asimoes »

Mário,

Tenta isso:

Código: Selecionar todos

TITULOS->( OrdSetFocus("DESCOD") )
TITULOS->( DbGoTop() )
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Erro na função DESCEND pelo DBUSEAREA()

Mensagem por asimoes »

Mário,

Pode tentar isso também:

INDEX ON DESCEND(PROTOCOLO+SERIE) TAG DESCOD TO TITULOS // 14 <-- esse índice

Por

INDEX ON PROTOCOLO+SERIE TAG DESCOD DESCEND TO TITULOS // 14 <-- esse índice
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Erro na função DESCEND pelo DBUSEAREA()

Mensagem por JoséQuintas »

O último post do ASimões é o correto.

Se quiser ver mais detalhes...
https://pctoledo.org/forum/viewto ... nd#p107630

Mas num resumo, por ser compatível com Clipper, Descend() não se dá bem no Harbour por causa o uso de codepage.
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
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Erro na função DESCEND pelo DBUSEAREA()

Mensagem por asimoes »

Mário,

Pode fazer isso também:

INDEX ON PROTOCOLO+SERIE TAG DESCOD TO TITULOS // 14 <-- esse índice

Seta a ordem ascendente

DbSetOrder(14)
*
SET DESCENDING ON //tradução ordDescend( ,, .T. )
....
Desfaz a ordem acendente, depois de usar o indice
SET DESCENDING OFF //tradução ordDescend( ,, .F. )
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Erro na função DESCEND pelo DBUSEAREA()

Mensagem por asimoes »

Mário,

É disso que eu to falando:

Código: Selecionar todos

// The example creates an ascending index and demonstrates
// the effect when the navigational order is reversed.

   PROCEDURE Main
      USE Customer
      INDEX ON Upper(Lastname+Firstname) TO Cust01

      GO TOP
      ? LastName               // result: Alberts
      GO BOTTOM
      ? LastName               // result: Waters

      OrdDescend( ,, .T. )     // change navigational order

      SKIP -1                  // skipping backwards from the last
                               // record hits begin of file.
      ? Bof()                  // result: .T.

      GO BOTTOM
      ? Eof()                  // result: .F.
      ? LastName               // result: Alberts

      SKIP
      ? Eof()                  // Result: .T.

      GO TOP
      ? LastName               // result: Waters

      USE
   RETURN
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
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

Erro na função DESCEND pelo DBUSEAREA()

Mensagem por Mario Mesquita »

Bom dia, amigos.

Uau, mil opções! Vou tentar todas e aviso vocês do resultado. Mas já sei que vai dar certo, com tantas possibilidades é impossível não dar.

Desde já, agradeço o apoio de vocês.

Volto com notícias.

Abraços,
Mario.
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

Erro na função DESCEND pelo DBUSEAREA()

Mensagem por Mario Mesquita »

Bom dia, voltei!

Vocês são uns monstros. Ainda tenho que comer muita grama pra chegar nesse nível, rs

Deu certo o "INDEX ON PROTOCOLO+SERIE TAG DESCOD DESCEND TO TITULOS". A ordem dos fatores altera o produto nesse caso.

Obrigado, amigos. Salvaram minha caveira outra vez.

Abraços e bom feirado a todos,
Mario.
Responder