AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Firebird-Spalte ohne Groß-Klein-Schreibung sortieren
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird-Spalte ohne Groß-Klein-Schreibung sortieren

Ein Thema von Perlsau · begonnen am 14. Jan 2011 · letzter Beitrag vom 19. Jan 2011
 
Perlsau
(Gast)

n/a Beiträge
 
#6

AW: Firebird-Spalte ohne Groß-Klein-Schreibung sortieren

  Alt 16. Jan 2011, 17:36
TQuery und 'Order by UPPER()' ??
Vielen Dank, das hat geholfen!

Verwende zwar kein TQuery, sondern weiterhin TDataset und kann auch für alle anderen Spalten weiterhin DoSort verwenden. Diese eine Spalte, in der Groß- und Kleinschreibung vorkommt, unterziehe ich jetzt einer Sonderbehandlung, indem ich sie aus dem CASE-Construct ausgliedere und die Sortierung direkt dem SelectSQL-String zuweise.

Vorher:
Delphi-Quellcode:
PROCEDURE Sort_Titel(Spalte : INTEGER);

VAR
   Merk : INTEGER;
   Aus : STRING;

BEGIN
     Merk := DatMod.FibSet_Titel.FieldByName('INDEX').AsInteger;
     IF Spalte = SortIndex THEN SortOrder := NOT SortOrder ELSE SortOrder := TRUE;

     CASE Spalte OF
      0 : DatMod.FibSet_Titel.DoSort(['INDEX'], [SortOrder]);
      1 : DatMod.FibSet_Titel.DoSort(['TITEL'], [SortOrder]);
      2 : BEGIN
               MeldungEin;
               DatMod.FibSet_Titel.DoSort(['VRegie'], [SortOrder]);
               MeldungAus;
          END;
      ...
      END;
Nachher:
Delphi-Quellcode:
PROCEDURE Sort_Titel(Spalte : INTEGER);

VAR
   Merk : INTEGER;
   Aus : STRING;

BEGIN
     Merk := DatMod.FibSet_Titel.FieldByName('INDEX').AsInteger;
     IF Spalte = SortIndex THEN SortOrder := NOT SortOrder ELSE SortOrder := TRUE;

     IF (Spalte <> 1) AND (SortIndex = 1) THEN
     BEGIN
          DatMod.FibSet_Titel.Close;
          DatMod.FibSet_Titel.SQLs.SelectSQL.Text := 'SELECT * FROM TITEL';
          DatMod.FibSet_Titel.Open;
     END ELSE
     IF Spalte = 1 THEN
     BEGIN
          DatMod.FibSet_Titel.Close;
          Aus := 'SELECT * FROM TITEL ORDER BY LOWER(TITEL) ';
          IF SortOrder THEN Aus := Aus + 'ASCELSE Aus := Aus + 'DESC';
          DatMod.FibSet_Titel.SQLs.SelectSQL.Text := Aus;
          DatMod.FibSet_Titel.Open;
     END;

     CASE Spalte OF
      0 : DatMod.FibSet_Titel.DoSort(['INDEX'], [SortOrder]);
      {ausgeklammert: 1 : DatMod.FibSet_Titel.DoSort(['TITEL'],          [SortOrder]);}
      2 : BEGIN
               MeldungEin;
               DatMod.FibSet_Titel.DoSort(['VRegie'], [SortOrder]);
               MeldungAus;
          END;
      ...
      END;
Kurze Erläuterung: SortIndex ist die Spaltennummer, nach der aktuell sortiert ist und die nach jeder neuen Sortierung gesetzt wird. SortOrder hat bei ASC den Wert TRUE und bei DESC den Wert FALSE. Beide Variablen sind global. So kann ich wie bei Excel durch einen Klick auf den Spaltentitel die Sortierung vornehmen, wobei ein zweiter Klick auf denselben Spaltentitel die Sortierung umkehrt.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz