4D v13.4

ORDER BY

Inicio

 
4D v13.4
ORDER BY

ORDER BY 


 

ORDER BY ( {tabla ;}{ unCampo }{; > o < }{; unCampo2 ; > o <2 ; ... ; unCampoN ; > o <N}{; *} ) 
Parámetro Tipo   Descripción
tabla  Tabla in Tabla para la cual ordenar los registros seleccionados o Tabla por defecto si se omite
unCampo  Campo in Campo en el cual efectuar la ordenación para cada nivel
> o <  Operador in Sentido de la ordenación para cada nivel: > para orden ascendente o < para orden descendente
Operador in Continua la bandera de ordenación

ORDER BY ordena (reordena) los registros de la selección actual de tabla para el proceso actual. Una vez efectuada la ordenación, el primer registro de la nueva selección actual se convierte en el registro actual.

Si omite el parámetro tabla, el comando se aplica a la tabla por defecto, si se ha definido una tabla por defecto. Si no 4D utiliza la tabla del primer campo pasado como parámetro. Si no pasa un parámetro y si no se ha definido una tabla por defecto, se devuelve un error.

Si no especifica el parámetro campo, ni los parámetros > o < o, ORDER BY muestra la caja de diálogo Ordenar de 4D para tabla. Esta es la caja de diálogo del editor:

Para mayor información sobre la utilización del editor de ordenación, consulte el Manual de diseño de 4D.

El usuario construye la ordenación, luego hace clic en el botón ordenar para realizar la ordenación. Si la ordenación se realiza correctamente, la variable OK toma el valor 1. Si el usuario hace clic en Cancelar, ORDER BY termina sin efectuar la ordenación, y la variable OK toma el valor 0 (cero).

El siguiente ejemplo muestra la caja de diálogo Ordenar para la tabla [Productos]:

 ORDER BY([Productos])

El siguiente ejemplo muestra la caja de diálogo Ordenar para la tabla por defecto (si ha sido definida):

 ORDER BY

Si especifica los parámetros campo y > o < , la caja de diálogo estándar Ordenar no se presenta y la ordenación se define por programación. Puede ordenar la selección en uno o varios niveles. Para cada nivel de ordenación, usted especifica un campo en el parámetro campo y un orden en > o <. Si pasa el parámetro “mayor que” (>), el orden es ascendente. Si pasa el símbolo “menor que” (<), el orden es descendente.

El ejemplo siguiente ordena la selección actual de [Productos] por nombre en orden ascendente:

 ORDER BY([Productos];[Productos]Nombre;>)

El siguiente ejemplo ordena la selección actual de [Productos] por nombre en orden descendente:

 ORDER BY([Productos];[Productos]Nombre;<)

La línea siguiente ordena la selección de [Productos] por tipo y precio en orden ascendente para ambos niveles:

 ORDER BY([Productos];[Productos]Tipo;>;[Productos]Precio;>)

El siguiente ejemplo ordena la selección actual de [Productos] por tipo y precio en orden descendente para ambos niveles:

 ORDER BY([Productos];[Productos]Tipo;<;[Productos]Precio;<)

El siguiente ejemplo ordena la selección actual de [Productos] por tipo en orden ascendente y por precio en orden descendente:

 ORDER BY([Productos];[Productos]Tipo;>;[Productos]Precio;<)

El siguiente ejemplo ordena la selección actual de [Productos] por tipo en orden descendente y por precio en orden ascendente:

 ORDER BY([Productos];[Productos]Tipo;<;[Productos]Precio;>)

Si omite el parámetro de ordenación > o <, por defecto el orden es ascendente.

El siguiente ejemplo ordena la selección actual de [Productos] por nombre en orden ascendente:

 ORDER BY([Productos];[Productos]Nombre)

Si sólo se especifica un campo (un nivel de ordenación) y está indexado, el índice se utiliza para la ordenación. Si el campo no está indexado o si hay más de un campo, la ordenación se lleva a cabo de manera secuencial (excepto en el caso de los índices compuestos). El campo puede pertenecer a la tabla de la selección que está siendo reordenada o a una tabla Uno relacionada a tabla con una relación manual o automática. (Recuerde, la tabla a la cual se aplica ORDER BY debe ser la tabla Muchos). En este caso, la ordenación es siempre secuencial.
Si los campos ordenados se incluyen en un índice compuesto, ORDER BY utiliza el índice para la ordenación.

El siguiente ejemplo efectúa una ordenación indexada si el campo [Productos]Nombre está indexado:

 ORDER BY([Productos];[Productos]Nombre;>)

El siguiente ejemplo efectúa una ordenación secuencial, sin importar si los campos están indexados:

 ORDER BY([Productos];[Productos]Tipo;>;[Productos]Precio;>)

El siguiente ejemplo efectúa una ordenación secuencial utilizando un campo relacionado:

 ORDER BY([Facturas];[Empresas]Nombre;>) ` Las facturas son ordenadas alfabéticamente por el campo Nombre de la empresa

El siguiente ejemplo realiza una ordenación indexada en dos niveles si un índice compuesto se ha especificado en la base [Contactos]Apellidos + [Contactos]Nombre:

 ORDER BY([Contactos];[Contactos]Apellido;>;[Contactos]Nombre;>)
 
Para realizar ordenaciones múltiples (ordenación en múltiples campos), puede llamar ORDER BY tantas veces como sea necesario y especificar el parámetro opcional *, excepto para la última llamada a ORDER BY, la cual inicia la operación de ordenación real. Esta funcionalidad es útil para administrar ordenaciones múltiples en interfaces de usuario personalizadas.

Advertencia: con esta sintaxis, puede pasar únicamente un nivel de ordenación (campo) por línea de instrucción.

En un formulario de salida mostrado en modo Aplicación, usted le permite a los usuarios ordenar una columna en orden creciente simplemente haciendo clic en el encabezado de la columna. Si el usuario mantiene presionada la tecla Mayús mientras hace clic en otros encabezados de columnas, la ordenación se lleva a cabo en varios niveles:

Cada encabezado de columna contiene un botón resaltado asociado con el siguiente método de objeto:

 MULTINIVEL(->[CDs]Titulo`Botón del encabezado de la columna título

Cada botón llama al método de proyecto MULTINIVEL pasando un puntero al campo de la columna correspondiente. El método de proyecto MULTINIVEL es el siguiente:

  ` Método de proyecto MULTINIVEL
  ` MULTINIVEL(Puntero)
  ` MULTINIVEL(->[Tabla]Campo)
 
 C_POINTER($1)&nbsp;&nbsp`Nivel de ordenación (campo)
 C_LONGINT($lNivelNb)
 
  `Construcción de criterios
 If(Not(Shift down))&NBSP;&NBSP`Ordenación simple (un nivel)
    ARRAY POINTER(aPtrCampoOrden;1)
    aPtrCampoOrden{1}:=$1
 Else
    $lNivelNb:=Find in array(aPtrCampoOrden;$1)&NBSP;&NBSP`¿Ya está ordenado este campo?
    If($lNivelNb<0)&NBSP;&NBSP`Si no
       INSERT IN ARRAY(aPtrCampoOrden;Size of array(aPtrCampoOrden)+1;1)
       aPtrCampoOrden{Size of array(aPtrCampoOrden)}:=$1
    End if
 End if
  `Ejecución de la ordenación
 $lNivelNb:=Size of array(aPtrCampoOrden)
 If($lNivelNb>0)&NBSP;&NBSP`Hay por lo menos un nivel de ordenación
    For($i;1;$lNivelNb)
       ORDER BY([CDs];(aPtrCampoOrden{$i})->;>;*)&NBSP;&NBSP`Construir la ordenación
    End for
    ORDER BY([CDs])&NBSP;&NBSP`No * termina la definición de la ordenación y comienza la operación de ordenación actual.
 End if


Sin importar cómo se defina la ordenación, si la operación de ordenación va a tomar algún tiempo, 4D muestra automáticamente un mensaje que contiene un termómetro de progresión. Estos mensajes pueden activarse y desactivarse utilizando los comandos MESSAGES ON y MESSAGES OFF. Si se muestra el termómetro de progreso, el usuario puede hacer clic en el botón Detener para interrumpir la ordenación. Si la ordenación se termina correctamente, OK toma el valor 1. De lo contrario, si la ordenación se interrumpe OK toma el valor 0 (cero).

 
PROPIEDADES 

Producto: 4D
Tema: Búsquedas
Número 49

Este comando modifica la variable sistema OKEl comando cambia el registro actual

 
INDEX

Lista alfabética de los comandos

 
HISTORIA 

Modificado: 4D v11 SQL

 
VER TAMBIÉN 

ORDER BY FORMULA