AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Bearbeiten von sortierten Datensätzen
Thema durchsuchen
Ansicht
Themen-Optionen

Bearbeiten von sortierten Datensätzen

Ein Thema von Crr · begonnen am 22. Apr 2003 · letzter Beitrag vom 23. Apr 2003
Antwort Antwort
Crr

Registriert seit: 22. Apr 2003
2 Beiträge
 
#1

Bearbeiten von sortierten Datensätzen

  Alt 22. Apr 2003, 20:39
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
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#2
  Alt 22. Apr 2003, 20:57
Hallo Crr,

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

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.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Crr

Registriert seit: 22. Apr 2003
2 Beiträge
 
#3
  Alt 22. Apr 2003, 22:39
sorry aber da komm ich nicht ganz mit

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

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 ...
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#4
  Alt 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, []);
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:55 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