Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Wie kann ich die SQL Sortierung in eine Tabelle speichern? (https://www.delphipraxis.net/1593-wie-kann-ich-die-sql-sortierung-eine-tabelle-speichern.html)

MrSpock 14. Dez 2002 21:57

Hallo Hansa,

Indices kannst du nur Tabellen, nicht aber TQueries zuordnen. Einen aus den vorhandenen Indices einer Tabelle kannst du det TTable Eigenschaft IndexNames zuordnen:

Delphi-Quellcode:
  tabPersonen.IndexNames := 'idxNachOrten';
Du kannst aber auch IndexFieldNames verwenden.

Die WHERE Klausel gehört zu SQL, dient aber zur Beschränkung einer Auswahl und ist somit eher das Gegenstück zum Filter einer Tabelle. Zum Sortieren benutzt du die ORDER BY Klausel. Zum Einfügen einer Datenmenge in eine Tabelle nutzt du das INSERT Statement.

fiasko 15. Dez 2002 00:28

Hallo,

Zitat:

Zitat von MrSpock
Indices dienen tatsächlich nur dazu, die Daten sortiert anzuzeigen, die

Na das stimmt ja so nicht ganz. Die dienen vorallem als Unterscheidungsmerkmal zwischen den Datensätzen. Ohne Index ist es möglich, mehrere gleiche Einträge zu haben (auch wenn's dann eigentlich keine Mengen mehr sind). Wenn die DB aber ein Index hat, kann schnell beim einfügen geprüft werden, ob der Eintrag eineindeutig ist und evtl. blockiert werden.

Zitat:

Zitat von MrSpock
physikalische Reihenfolge bleibt davon unberührt.

Also die physikalische Reihenfolge ist wohl Sache des Betriebssystems und die logische des Datenbanktreibers und alles ne große Blackbox. Bei Paradox 7 wird die Sortierung einfach über Sekundärindizes bei jeder Veränderung am DB-Inhalt mit gepflegt und kann damit auch für das ursprüngliche Problem eingesetzt werden. Allerdings hab ich das vor langer Zeit mal mit Delphi 1 gemacht...


Thomas

MrSpock 15. Dez 2002 16:57

Hallo fiasko,

Zitat:

Na das stimmt ja so nicht ganz. Die dienen vorallem als Unterscheidungsmerkmal zwischen den Datensätzen. Ohne Index ist es möglich, mehrere gleiche Einträge zu haben...
Nur eindeutige (unique) Indices verhindern die Mehrfacheingabe. Primärindices müssen eindeutig sein, aber gerade Sekundärindices sind häufig nicht eindeutig und verhindern so zum Glück nicht die Eingabe eines gleichen Wertes. :mrgreen:

fiasko 15. Dez 2002 18:01

Hallo MrSpock

Zitat:

Zitat von MrSpock
Nur eindeutige (unique) Indices verhindern die Mehrfacheingabe. Primärindices müssen eindeutig sein, aber gerade Sekundärindices sind häufig nicht eindeutig und verhindern so zum Glück nicht die Eingabe eines gleichen Wertes.

Hab ich ja auch nirgends geschrieben, sonst wäre es ja auch sinnlos zwischen Primären und Sekundären Indizes zu unterscheiden. :mrgreen::mrgreen::mrgreen:

sol_e_sombre 17. Dez 2002 14:22

Hallo Rapthor!

Es gibt bei der TQuery die Eigenschaft "RequestLive" die muß auf True stehen, dann bekommst Du eine aktualisierbare Datenmenge zurück. Das müsste Dein Problem lösen, die Daten nach dem sortieren nicht mehr editieren zu können!

Rapthor 19. Dez 2002 08:22

Laut Delphi-Hilfe funktioniert RequestLive zur Rücklieferung BEARBEITBARER Ergebnismengen, wenn die SQL Anweisung mit der ORDER BY Klausel auf der Sortierung mit Index basiert.
Da meine Sortierung jedoch OHNE Index funktioniert scheint hier der Grund gegeben zu sein, warum ich RequestLive NICHT anwenden kann.
Jetzt ergibt sich für mich die Frage, wie ich die Sortierung mit Indexerstellung fertigbringe.
Kann mir da jemand eine Schritt-für-Schritt-Anleitung geben?
Ich hoffe dann nämlich die RequestLive Funktion nutzen zu können ...... :o
Ich habe zu danken

MrSpock 19. Dez 2002 08:45

Hallo Rapthor,

diese Einschränkung ist mir neu, aber man lernt ja nie aus...

Hintergrund scheint zu sein, dass bei Einfügen eines neuen Datensatzes aufgrund des fehlenden Indexes eine korrekte Einsortierung des neuen Datensatzes nicht möglich ist. Also bleibt doch nur der Weg, bereits bei der Definition der Tabelle einen (Sekundär-)Index anzulegen, dann brauchst du aber auch kein Select-Statement in einer TQuery Komponente, sondern kannst wie ich schon einmal beschrieben habe, einfach den Index auswählen. Du hattest ja ganz am Anfang sowieso SELECT * verwendet, also alle Felder ausgewählt.

Rapthor 19. Dez 2002 08:55

Gut, einen Index erstellen :D
Und wie/wo geht das? Ich bin da leider total der Laie und müsste wissen unter welchen Menüpunkten ich das machen kann. Tut mir Leid wenn ich damit schon nerve ..... :oops:

Rapthor 19. Dez 2002 09:39

Gut also Indexerstellung hab ich jetzt erledigt...undzwar mithilfe der Datenbankoberfläche (ein Extraprogramm des Delphipakets).Sortieren klappt und nen neuen Datensatz hinzuzufügen klappt jetzt nach der Sortierung auch. ALLERDINGS funktioniert es dann wieder NICHT eine erneute Sortierung nach Index vorzunehmen.
D.h. nach dem ersten Hinzufügen sind die Indexdinger nutzlos und eine Sortierung kann nicht durchgeführt werden.

Zitat:

"Index nicht mehr gültig!"
Gibt's ne Möglichkeit das zu verhindern?

MrSpock 19. Dez 2002 09:55

Hallo Rapthor,

das mit der DB - Oberfläche war goldrichtig! Hast du den Index als "gewartet" (Optioonsfeld bei der Definition des Indexes) definiert?


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:40 Uhr.
Seite 3 von 3     123   

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 by Thomas Breitkreuz