Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Bearbeiten von sortierten Datensätzen (https://www.delphipraxis.net/4288-bearbeiten-von-sortierten-datensaetzen.html)

Crr 22. Apr 2003 20:39


Bearbeiten von sortierten Datensätzen
 
ich habe die folgende verkettung:

table - datasource1 - query - datasource2 - dbgrid

ich möchte meine datenbank voll über das grid steuern, das klappt soweit ganz gut...

doch dann möchte ich die datensätze per click auf den spaltentitel sortieren: bei der ontitleclick methode des grids schreibe ich zur laufzeit die entsprechende sortieranfrage und erhalte eine sortierte tabelle.

problem: editiren eines datensatzes führt jetzt zum chaos... das grid ändert die tabelle an der stelle an der sich der cursor befindet; dort befindet sich jedoch ein anderer datensatz als jetzt(sortiert) auf dem bildschirm angezeigt wird (da eine sql abfrage ja nicht die tabelle umstrukturiert sonder eine virtuelle tabelle erstellt)

wie kann ich dieses problem umgehen ?

thx im voraus

MrSpock 22. Apr 2003 20:57

Hallo Crr,

zunächst einmal herzlich willkommen im Delphi-Praxis Forum. Hier wird dir bei fast allen Fragen geholfen :mrgreen: .

In deinem Fall bieten sich sogenannte "Sekundärindices" an. Erzeuge einfach für alle Felder, nach denen du sortieren willst je einen Sekundärindex. Beim Spaltenklick wählst du dann einfach den entsprechenden Index. Du arbeitest dann immer auf derselben Tabelle, die nur über einen anderen Index sortiert wurde.

Crr 22. Apr 2003 22:39

sorry aber da komm ich nicht ganz mit :oops:

Zitat:

In deinem Fall bieten sich sogenannte "Sekundärindices" an. Erzeuge einfach für alle Felder, nach denen du sortieren willst je einen Sekundärindex.
ich arbeite mit einer einzigen tabelle (nix normalform, keine schlüsselfelder außer der unsichtbare counter).

ich wüsste auch nicht wie sich mein problem mithilfe eines schlüssels lösen ließe, denn das grid macht da imho keinen unterschied.

Zitat:

Du arbeitest dann immer auf derselben Tabelle, die nur über einen anderen Index sortiert wurde.
es sei denn wir haben ne unterschiedliche definition von sekundärindex :freak:

ein sekundärindex(oder sekundärschlüssel) ist für mich ein datenfeld, das zusammen mit einem anderen (primärschlüssel) zur eindeutigen identifizierung eines datensatzes dient.

p.s.: die sortierung erfolgt durch SELECT * FROM db ORDER BY ...

MrSpock 23. Apr 2003 16:06

Hallo Crr,

das ist so nicht ganz richtig. Ein Sekundärindex ist oder mehrere Felder, die zur schnellen Suche und/oder Sortierung einer Tabelle genutzt werden können. Sekundärindices sind unabhängig vom Primärindex und können (müssen aber nicht) eindeutig sein. Wenn du bei einem TTable Objekt z.B. das Feld IndexName auf einen solchen Index setzt, wird die Tabelle automatisch nach diesem sortiert und du arbeitest immer auf derselben Tabelle.

Da du -wie ich gerade noch einmal gesehen habe- aber mit einer TQuery Komponente zur arbeiten scheinst, helfen Indices dabei nicht. Benutzt du aber das SQL Statement nur zur Sortierung, sind Sekundärindices eine Alternative.

Musst oder willst du aber mit einer TQuery-Komponente arbeiten. Gibt es auch eine Möglichkeit. Du merkst dir die ID des Datensatzes, schließt die Query, erzeugst die neue (mit der neuen Sortierreihenfolge), öffnest die Query und benutzt Locate, um den vorher gewählten Satz wieder auszuwählen:

Delphi-Quellcode:
LastId := myQuery.FieldByName('ID').AsInteger;
myQuery.Close;
{ neues SQL Statement erzeugen }
myQuery.Open;
myQuery.Locate('ID', LastId, []);


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz