Árvore de páginas

Altera a flag de ordem (crescente/decrescente) do índice, mas não altera fisicamente a ordem dos registros na tabela.

Sintaxe

OrdDescend( < xExp >, [ cIndex ], [ lDesc ] )

Parâmetros

Nome

Tipo

Descrição

Obrigatório

Referência

xExp

qualquer

Indica o índice que será utilizado.

X

 

cIndex

caractere

Nome do índice (opcionalmente com path e nome do arquivo, mas sem extensão).

 

 

lDesc

lógico

Caso defina como Verdadeiro (.T.), ativa a flag de ordem decrescente; caso contrário, Falso (.F.) ativa a flag de ordem crescente.

 

 

Retorno

Nome

Tipo

Descrição

lRet

lógico

Caso lDesc não seja especificado, retorna o valor corrente para a flag de ordem. Caso seja, retorna o valor prévio da configuração da flag de ordem.

Observações

  • O primeiro parâmetro da função OrdDescend pode ser do tipo Caractere (recebe o alias do índice) ou Numérico (recebe a ordem do índice).
  • A utilização da função OrdDescend não reposiciona o ponteiro de registros para o alias aberto.
  • Caso a função OrdDescend seja executada sem uma área ativa, a seguinte mensagem de erro será exibida: Work area not in use
  • Caso seja repassada uma ordem de índice de valor negativo no primeiro parâmetro da OrdDescend, a seguinte mensagem de erro será exibida: Array index out of bounds
  • Caso opte por utilizar um arquivo de índice local, só serão aceitos índices localizados abaixo do RootPath.
  • A tentativa de acesso a um índice no disco local resultará na seguinte mensagem de erro: It is not permited to access database local files

Exemplos

O exemplo abaixo utiliza a RDD "TOPCONN", mas a função pode ser utilizada com qualquer uma das RDDs válidas.

user function test()

  local cT1  := "T1"
  local cMsg := ""
  local aReg := {}
  local nI

  TCLink()
  if TCCanOpen(cT1)
    TCDelFile(cT1)
  endif

  DBCreate(cT1, {{"T1_COD" , "N",  2, 0}}, "TOPCONN")
  DBUseArea(.T., "TOPCONN", cT1, cT1, .F., .F.)

  for nI := 1 to 10
    (cT1)->( DBAppend( .F. ) )
    (cT1)->T1_COD  := nI
    (cT1)->( DBCommit() )
  next

  DBCreateIndex("T1INDEX1", "T1_COD", {|| T1_COD })
  DBSetIndex("T1INDEX1")
  DBSetOrder(1)
  DBGoTop()

  aReg := {}
  while !(EOF())
    AAdd(aReg, cValToChar(T1_COD) )
    dbskip()
  enddo
  
  cMsg := ""
  for nI := 1 to len(aReg)
    cMsg += "Registro: " + aReg[nI] + chr(13)+chr(10)
  next
  
  msgInfo("::::::: OrdDescend OFF :::::::" + chr(10) + cMsg)

  OrdDescend(1, "T1INDEX1", .T.)
  DBGoTop()
  
  aReg := {}
  while !(EOF())
    AAdd(aReg, cValToChar(T1_COD) )
    dbskip()
  enddo
  
  cMsg := ""
  for nI := 1 to len(aReg)
    cMsg += "Registro: " + aReg[nI] + chr(13)+chr(10)
  next
  
  msgInfo("::::::: OrdDescend ON :::::::" + chr(13)+chr(10) + cMsg)

return
  • Sem rótulos