Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#12

AW: Firebird Datensatz verschieben via PrimaryKey

  Alt 22. Mär 2012, 11:14
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
  Mit Zitat antworten Zitat