ORDER BY

4D - Documentation   Français   English   German   Spanish   Japanese   4D Programmiersprache, Befehle nach Themen   4D Programmiersprache, Befehle alphabetisch   4D Programmiersprache, Konstanten nach Themen   Back   Previous   Next

Version 11 (Geändert)


ORDER BY ({Tabellenname}{; Datenfeld}{; > oder <}{; Datenfeld2; > oder <2; ...; DatenfeldN; > oder <N}{; *})

ParameterTypBeschreibung
TabellennameTabelleTabelle, deren ausgewählte Datensätze
sortiert werden sollen,
Haupttabelle ohne Angabe
DatenfeldDatenfeldFeld, nach dem sortiert werden soll
> oder <Sortierrichtung für jede Ebene:
> aufsteigend,
< absteigend
*Sortiermodus beibehalten

Beschreibung

ORDER BY sortiert die aktuelle Auswahl des laufenden Prozesses von Tabellenname. Ist die Sortierung abgeschlossen, lädt 4D den ersten Datensatz der Auswahl in den Hauptspeicher. Er wird zum aktuellen Datensatz. Ist die Tabelle, in der sortiert wird, im Lese/Schreib-Modus, sperrt 4D den Datensatz, außer er ist schon durch einen anderen Prozess gesperrt.

Geben Sie den Parameter Tabellenname nicht an, bezieht sich der Befehl auf die Haupttabelle. Gibt es keine Haupttabelle, tritt ein Fehler auf.

Geben Sie die Parameter Datenfeld, >oder< bzw. * nicht an, zeigt ORDER BY für Tabellenname den Sortiereditor. In der Designumgebung sieht er folgendermaßen aus:

Weitere Informationen zum Sortiereditor finden Sie im Handbuch 4D Designmodus.

Der Benutzer legt die Sortierkriterien fest und klickt dann auf die Schaltfläche Sortieren, um die Sortierung auszuführen. Läuft die Sortierung ohne Unterbrechung, nimmt die Systemvariable OK den Wert 1 an. Klickt der Benutzer auf die Schaltfläche Abbrechen, wird die Sortierung annulliert, die Systemvariable OK nimmt dann den Wert 0 (Null) an.

Beispiele

1. Folgende Zeile zeigt den Sortiereditor für die Tabelle [Products]:

   ORDER BY([Products])

2. Folgende Zeile zeigt den Sortiereditor für die Haupttabelle (sofern vorhanden)

   ORDER BY

Geben Sie Datenfeld und >oder< an, erscheint nicht der Sortiereditor, die Sortierung erfolgt per Programmierung. Sie können die Auswahl nach einer oder mehreren Ebenen sortieren. Geben Sie für jede Ebene Datenfeld und die Sortierreihenfolge >oder< an. "Größer als" (>) sortiert in aufsteigender Reihenfolge, "Kleiner als" (<) in absteigender Reihenfolge. Ohne Festlegung wird in aufsteigender Reihenfolge sortiert.

Beispiele

3. Folgende Zeile sortiert die Auswahl von [Products] nach Name in aufsteigender Reihenfolge:

   ORDER BY([Products];[Products]Name;>)

4. Folgende Zeile sortiert die Auswahl von [Products] nach Name in absteigender Reihenfolge:

   ORDER BY([Products];[Products]Name;<)

5. Folgende Zeile sortiert die Auswahl von [Products] nach Typ und Preis, beide Male in aufsteigender Reihenfolge:

   ORDER BY([Products];[Products]Type;>;[Products]Price;>)

6. Folgende Zeile sortiert die Auswahl von [Products] nach Typ und Preis, beide Male in absteigender Reihenfolge:

   ORDER BY([Products];[Products]Type;<;[Products]Price;<)

7. Folgende Zeile sortiert die Auswahl von [Products] nach Typ in aufsteigender Reihenfolge, nach Preis in absteigender Reihenfolge:

   ORDER BY([Products];[Products]Type;>;[Products]Price;<)

8. Folgende Zeile sortiert die Auswahl von [Products] nach Typ in absteigender Reihenfolge, nach Preis in aufsteigender Reihenfolge:

   ORDER BY([Products];[Products]Type;<;[Products]Price;>)

9. Folgende Zeile sortiert die Auswahl von [Products] nach Name in aufsteigender Reihenfolge:

   ORDER BY([Products];[Products]Name)

Ist nur ein Datenfeld angegeben (1 Sortierebene) und ist dieses indiziert, wird mit Index sortiert. Ist das Datenfeld nicht indiziert bzw. gibt es mehrere Datenfelder, wird sequentiell sortiert (mit Ausnahme von zusammengesetzten Indices). Das Datenfeld kann zur Tabelle der Auswahl oder zu einer Eine-Tabelle gehören, die über eine automatische oder manuelle Verknüpfung mit Tabellenname verbunden ist. In diesem Fall ist die Sortierung immer sequentiell.

Sind die sortierten Felder in einem zusammengesetzten Index integriert, verwendet ORDER BY den Index der Sortierung.

Beispiele

10. Folgende Zeile führt eine indizierte Sortierung aus, wenn [Products]Name indiziert ist:

   ORDER BY([Products];[Products]Name;>)

11. Folgende Zeile führt eine sequentielle Sortierung aus, egal ob die Datenfelder indiziert sind oder nicht:

   ORDER BY([Products];[Products]Type;>;[Products]Price;>)

12. Folgende Zeile führt eine sequentielle Sortierung mit verknüpften Datenfeld aus:

   ORDER BY([Invoices];[Companies]Name;>)
         ` Rechnungen werden alphabetisch nach dem Datenfeld Firmenname sortiert.

13. Folgendes Beispiel führt eine indizierte Sortierung auf zwei Ebenen aus, wenn in der Anwendung der zusammengesetzte Index [Contacts]LastName + [Contacts]FirstName angegeben ist.

   ORDER BY([Contacts];[Contacts]LastName;> ;[Contacs]FirstName;>)

Wollen Sie mehrfach sortieren, rufen Sie ORDER BY so oft, wie notwendig auf und geben den optionalen Parameter * an, jedoch mit Ausnahme des letzten Aufrufs, denn der startet die aktuelle Sortierung. Damit können Sie in individuell erstellten Benutzerumgebungen die Mehrfachsortierung verwalten.

Achtung: Mit dieser Syntax können Sie pro Aufruf von ORDER BY nur eine Sortierebene übergeben.

Beispiel

(14) Klickt der Benutzer in der Runtimeumgebung in einem Ausgabeformular in den Spaltentitel, wird diese Spalte in aufsteigender Reihenfolge sortiert.

Klickt er bei gedrückter Umschalttaste in einen anderen Spaltentitel, wird in mehreren Ebenen sortiert:

Jeder Spaltentitel hat eine hervorgehobene Schaltfläche mit folgender Objektmethode:

   MULTILEVEL (->[CDs]Titel)   `Name der Schaltfläche für Spaltentitel

Jede Schaltfläche ruft die Projektmethode MULTILEVEL mit einem Zeiger auf das entsprechende Spaltenfeld auf. Die Projektmethode lautet:

      ` Projektmethode MULTILEVEL 
      ` MULTILEVEL (Zeiger)
      ` MULTILEVEL (->[Tabelle]Feld)

   C_POINTER($1)  `Sortierebene (Feld)
   C_LONGINT($lEbeneNr)

      `Erhalte Sortierebenen
   If (Not(Shift down))  `Einfaches Sortieren (eine Ebene))
      ARRAY POINTER(aPtrSortFeld;1)
      aPtrSortFeld{1}:=$1
   Else 
      $lEbeneNr:=Find in array(aPtrSortFeld;$1)  `Ist dieses Feld schon sortiert?
      If ($lEbeneNr<0)  `Wenn nicht
         INSERT ELEMENT(aPtrSortFeld;Size of array(aPtrSortFeld)+1;1)
         aPtrSortFeld{Size of array(aPtrSortFeld)}:=$1
      End if 
   End if 
      `Führe Sortierung aus
   $lEbeneNr:=Size of array(aPtrSortFeld)
   If ($lEbeneNr>0)  `Es gibt mindestens eine Sortierebene
      For ($i;1;$lEbeneNr)
         ORDER BY([CDs];(aPtrSortFeld{$i})->;>;*)  `Erstelle eigene Sortierung
      End for 
      ORDER BY([CDs])  `Ohne * endet die eigene Sortierung und 
                                       die aktuelle Sortierung startet
   End if 

4D zeigt Ihnen den Sortierablauf während der Suche an. Wird das Ablaufthermometer angezeigt, kann der Benutzer die Sortierung mit der Schaltfläche Stop unterbrechen. Mit den Befehlen MESSAGES ON, MESSAGES OFF können Sie diese Anzeige an- bzw. abschalten. Bricht der Anwender die Sortierung ab, wird OK auf 0 gesetzt, sonst auf 1.

Referenz

ORDER BY FORMULA.

Anwendung des Befehls

Related Tables


4D - Documentation   Français   English   German   Spanish   Japanese   4D Programmiersprache, Befehle nach Themen   4D Programmiersprache, Befehle alphabetisch   4D Programmiersprache, Konstanten nach Themen   Back   Previous   Next