4D v14.3

ORDER BY

Página Inicial

 
4D v14.3
ORDER BY

ORDER BY 


 

ORDER BY ( {tabela ;}{ campo }{; > ou < }{; campo2 ; > ou <2 ; ... ; campoN ; > ou <N}{; *} ) 
Parâmetro Tipo   Descrição
tabela  Tabela in Tabela na qual vai ordenar os registros selecionados, ou tabela Padrão, se omitido
campo  Campo in Campo no qual estabelecer a ordem para cada nível
> ou <  Operador in Direção da ordem para cada nível: > para ordenar em ordem ascendente, ou < para ordenar em ordem descendente
Operador in Continuar a bandeira de ordem

ORDER BY ordena (reordena) os registros da seleção atual de tabela para o processo atual. Quando tiver realizada a ordenação, o primeiro registro da nova seleção atual se converte no registro atual.

Se omite o parâmetro tabela, o comando se aplica à tabela por padrão, se tiver definido uma tabela por padrão. Se não, 4D utiliza a tabela do primeiro campo passado como parâmetro. Se não passa um parâmetro e se não foi definido uma tabela por padrão, é devolvido um erro.

Se não especifica o parâmetro campo, nem os parâmetros > ou < ou *, ORDER BY mostra a caixa de diálogo Ordenar de 4D para tabela. Esta é a caixa de diálogo do editor:



Para maior informação sobre a utilização do editor de ordenação, consulte o Manual de desenho de 4D.

O usuário construí a ordenação, depois clica no botão ordenar para realizar a ordenação. Se a ordenação é realizada corretamente, a variável OK toma o valor 1. Se o usuário  clica em Cancelar, ORDER BY termina sem realizar a ordenação, e a variável OK toma o valor 0 (zero).

O exemplo a seguir mostra a caixa de diálogo Ordenar para a tabela [Produtos]:

 ORDER BY([Produtos])

O exemplo a seguir mostra a caixa de diálogo Ordenar para a tabela padrão (se tiver sido definida):

 ORDER BY

Se especifica os parâmetros campo e > ou < , a caixa de diálogo Ordenar não é apresentada e a ordenação é definida por programação. Pode ordenar a seleção em um ou vários níveis. Para cada nível de ordenação, você especifica um campo no parâmetro campo e uma ordem em > ou <. Se passa o parâmetro “maior que” (>), a ordem é ascendente. Se passa o símbolo “menor que” (<), a ordem é descendente.

O exemplo a seguir ordena a seleção atual de [Produtos] por nome em ordem ascendente:

 ORDER BY([Produtos];[Produtos]Nome;>)

O exemplo ordena a seleção atual de [Produtos] por nome em ordem descendente:

 ORDER BY([Produtos];[Produtos]Nome;<)

A linha seguinte ordena a seleção de [Produtos] por tipo e preço em ordem ascendente para ambos os níveis:

 ORDER BY([Produtos];[Produtos]Tipo;>;[Produtos]Preço;>)

O exemplo ordena a seleção atual de [Produtos] por tipo e preço em ordem descendente para ambos níveis:

 ORDER BY([Produtos];[Produtos]Tipo;<;[Produtos]Preço;<)

O exemplo a seguir ordena a seleção atual de [Produtos] por tipo em ordem ascendente e por preço em ordem descendente:

 ORDER BY([Produtos];[Produtos]Tipo;>;[Produtos]Preço;<)

O exemplo a seguir ordena a seleção atual de [Produtos] por tipo em ordem descendente e por preço em ordem ascendente:

 ORDER BY([Produtos];[Produtos]Tipo;<;[Produtos]Preço;>)

Se omite o parâmetro de ordenação > o <, automaticamente a ordem é ascendente.

O exemplo a seguir ordena a seleção atual de [Produtos] por nome em ordem ascendente:

 ORDER BY([Produtos];[Produtos]Nome)

Se só for especificado um campo (um nível de ordenação) e estiver indexado, o índice é utilizado para a ordenação. Se o campo não estiver indexado ou se houver mais de um campo,a ordenação se realiza de maneira sequêncial (exceto no caso dos índices compostos). O campo pode pertencer à tabela da seleção que estiver sendo reordenada ou a uma tabela Um relacionada a tabela com uma relação manual ou automática. (Lembre, a tabela à qual se aplica ORDER BY deve ser a tabela Muitos). Neste caso, a ordenação é sempre sequêncial.
Se os campos ordenados são incluídos em um índice composto, ORDER BY utiliza o índice para a ordenação.

O exemplo a seguir realiza uma ordenação indexada se o campo [Produtos]Nome está indexado:

 ORDER BY([Produtos];[Produtos]Nome;>)

O exemplo a seguir  realiza uma ordenação sequêncial, sem importar se os campos estão indexados:

 ORDER BY([Produtos];[Produtos]Tipo;>;[Produtos]Preço;>)

O exemplo a seguir realiza uma ordenação sequêncial utilizando um campo relacionado:

 ORDER BY([Faturas];[Empresas]Nome;>) ` As faturas são ordenadas alfabeticamente pelo campo Nome da empresa

O exemplo a seguir realiza uma ordenação indexada em dois níveis se um índice composto for especificado no banco [Contatos]Sobrenomes + [Contatos]Nome:

 ORDER BY([Contatos];[Contatos]Sobrenome;>;[Contatos]Nome;>)


Para realizar ordenações múltiplas (ordenação em múltiplos campos), pode chamar ORDER BY tantas vezes quantas sejam necessárias e especificar o parâmetro opcional *, exceto para a última chamada a ORDER BY, a qual inicia a operação de ordenação real. Esta funcionalidade é útil para administrar ordenações múltiplas em interfaces de usuário personalizadas.

Advertência
: com esta sintaxe, pode passar unicamente um nível de ordenação (campo) por linha de instrução.

Em um formulário de saída mostrado em modo Aplicação, você lhe permite aos usuários ordenar uma coluna em ordem crescente simplesmente clicando no cabeçalho da coluna. Se o usuário mantém pressionada a tecla Shift enquanto clica em outros cabeçalhos de colunas, a ordenação é realizada em vários níveis:



Cada cabeçalho de coluna contém um botão ressaltado associado com o seguinte método de objeto:

 MULTINIVEL(->[CDs]Titulo`Botão do cabeçalho da coluna título

Cada botão chama ao método de projeto MULTINIVEL passando um ponteiro ao campo da coluna correspondente. O método de projeto MULTINIVEL é o seguinte:

  ` Método de projeto MULTINIVEL
  ` MULTINIVEL(Ponteiro)
  ` MULTINIVEL(->[Tabela]Campo)
 
 C_POINTER($1)&nbsp;&nbsp`Nível de ordenação (campo)
 C_LONGINT($lNivelNb)
 
  `Construção de critérios
 If(Not(Shift down))&NBSP;&NBSP`Ordenação simples (um nível)
    ARRAY POINTER(aPtrCampoOrdem;1)
    aPtrCampoOrdem{1}:=$1
 Else
    $lNivelNb:=Find in array(aPtrCampoOrdem;$1)&NBSP;&NBSP`Já está ordenado este campo?
    If($lNivelNb<0)&NBSP;&NBSP`Sim não
       INSERT IN ARRAY(aPtrCampoOrdem;Size of array(aPtrCampoOrdem)+1;1)
       aPtrCampoOrdem{Size of array(aPtrCampoOrdem)}:=$1
    End if
 End if
  `Execução da ordenação
 $lNivelNb:=Size of array(aPtrCampoOrdem)
 If($lNivelNb>0)&NBSP;&NBSP`Há pelo menos um nível de ordenação
    For($i;1;$lNivelNb)
       ORDER BY([CDs];(aPtrCampoOrdem{$i})->;>;*)&NBSP;&NBSP`Construir a ordenação
    End for
    ORDER BY([CDs])&NBSP;&NBSP`SE não houver * termina a definição da ordenação e começa a operação de ordenação atual.
 End if


Sem importar como se defina a ordenação, se a operação de ordenação vai a tomar algum tempo, 4D mostra automaticamente uma mensagem que contenha um termômetro de progressão. Estas mensagens podem ser ativadas e desativadas utilizando os comandos MESSAGES ONMESSAGES OFF. Se for mostrado o termômetro de progresso, o usuário pode clicar no botão Deter para interromper a ordenação. Se a ordenação é terminada corretamente, OK toma o valor 1. Do contrário, se a ordenação for interrompida, OK toma o valor 0 (zero).

 
PROPRIEDADES 

Produto: 4D
Tema: Pesquisas
Número 49

Este comando modifica a variável sistema OKO comando altera o registro atual

 
HISTÓRIA 

Modificado: 4D v11 SQL

 
VER TAMBÉM 

ORDER BY FORMULA

 
ARTICLE USAGE

Manual de linguagem 4D ( 4D v12.4)
Manual de linguagem 4D ( 4D v11 SQL Release 6)
Manual de linguagem 4D ( 4D v14 R3)
Manual de linguagem 4D ( 4D v14 R2)
Manual de linguagem 4D ( 4D v13.5)
Manual de linguagem 4D ( 4D v14.3)
Manual de linguagem 4D ( 4D v14 R4)