![]() |
AW: Firebird Datensatz verschieben via PrimaryKey
Zitat:
Die Lösung mit der Zusatzspalte (SeitenNr) ist auf jeden Fall die bessere. Hab vielen Dank für deine Hinweise.:wink: |
AW: Firebird Datensatz verschieben via PrimaryKey
Die Bedingungen sollten meiner Meinung nach erfüllt werden:
- der Index auf das Sortierfeld ist eindeutig - auf die Daten wird auch bei der Änderung über den Index zugegriffen - die Änderung erfolgt innerhalb einer Transaktion Ich würde das in einer Stored Procedure kapseln.
Code:
create procedure P_BILDER_VERSCHIEBEN (
SRCINDEX integer, DSTINDEX integer) AS begin if (srcindex <> dstindex) then begin if (srcindex < dstindex) then begin update bilder set idx = -idx where (idx >= :srcindex) and (idx <= :dstindex); dstindex = -dstindex; srcindex = -srcindex; update bilder set idx = (-idx) - 1 where (idx >= :dstindex) and (idx < :srcindex); end else begin update bilder set idx = -idx where (idx >= :dstindex) and (idx <= :srcindex); dstindex = -dstindex; srcindex = -srcindex; update bilder set idx = (-idx) + 1 where (idx > :srcindex) and (idx <= :dstindex); end dstindex = -dstindex; update bilder set idx = :dstindex where (idx = :srcindex); end end |
AW: Firebird Datensatz verschieben via PrimaryKey
Jetzt hatten wir ihn gerade davon überzeugen können, dass man den Primärschlüssel tunlichst nicht anfassen sollte und sich dieser nicht zur Festlegung einer Anzeigereihenfolge eignet. Aber wir sind halt alle Idioten und haben keine Ahnung.
|
AW: Firebird Datensatz verschieben via PrimaryKey
Zitat:
Zumal die Verschiebungen ja mit eingeschaltetem Filter geschehen und deshalb gar nicht alle PrimaryIndexes sichtbar sind:
Delphi-Quellcode:
DatasetBilder.Filter := 'PROJEKTIDX=' + StrToInt(ProjektIndex);
Zitat:
(auch wenn sich der finanzielle Profit in Grenzen hält ...) |
AW: Firebird Datensatz verschieben via PrimaryKey
Zitat:
Das man den Primärschlüssel nicht verändert ist ja jetzt hoffentlich allen klar. Es gibt noch weitere Gründe, die dagegen sprechen und noch nicht genannt wurden (z.B. Lock-Konflikte, OPF, Replication). Demnach kann das Sortierfeld natürlich nicht der Primärschlüssel sein und ein zusätzlicher Index ist für den schnellen Zugriff auf jeden Fall sinnvoll. Ich schreibe "eindeutiger Index", weil hier sonst leicht Fehler gemacht werden, die den Datenzugriff ausbremsen. Beispiel, mehrere Touren mit eigenen Anlaufstellen:
Code:
CREATE TABLE T_LIEFERWEG (
/* ... */ TOUR_ID INTEGER, POS INTEGER /* ... */ ); /* die Abfrage */ select * from T_LIEFERWEG where TOUR_ID = :ID order by POS; /* der für diese Abfrage optimale Index */ CREATE UNIQUE INDEX IDX_LIEFERWEG ON T_LIEFERWEG (TOUR_ID, POS); |
AW: Firebird Datensatz verschieben via PrimaryKey
Liste der Anhänge anzeigen (Anzahl: 1)
Meine Sortierungsmethoden sind implementiert und funktionieren mit der zusätzlichen Spalte "SeitenNr" nun genau so, wie sie sollen:
Beim Hoch- und Runterschieben eines Datensatzes werden einfach die Seitennummern zweier untereinanderstehender Datensätze vertauscht. Die restlichen Methoden genauer zu erklären ist mir nun aber doch zu viel, weil es sich um recht viele Sortiermöglichkeiten handelt, wie das Bild im Anhang zeigt ... Thema kann von mir aus geschlossen werden ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:10 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