Einzelnen Beitrag anzeigen

DevStar

Registriert seit: 26. Aug 2007
79 Beiträge
 
#15

Re: Datensatz Sortierreihenfolge ändern und verschieben

  Alt 14. Dez 2009, 23:04
Hier die ganze Procedur, falls sie jemand braucht.

Delphi-Quellcode:
procedure TfrmKunden.SortorderKunden (richtung: boolean);
var
  iAktuellerDatensatz,
  iSortorder, iOldSortorder, iNewSortorder, iTempSortorder: integer;
  sID, sSQL_Befehl1, sSQL_Befehl2, sSQL_Befehl3: string;

begin
  if not VarIsNull(DBGrid1.DataSource.DataSet.FieldByName('SORTORDER').Value) then
    begin
      iAktuellerDatensatz := DBGrid1.DataSource.DataSet.FieldByName('ID').Value;
      iSortorder := DBGrid1.DataSource.DataSet.FieldByName('SORTORDER').Value;
      iTempSortorder := 0;
    end
  else
    begin
      ShowMessage ('Datensatz hat keine Identnummer!');
      exit;
    end;

  DBGrid1.DataSource.DataSet.DisableControls;

  if iAktuellerDatensatz <> 0 then
    begin
    
      with DataModuleKunden.DataSetAnlagen do
        begin
          Open;
          if Locate('SORTORDER', IntToStr(iSortorder), [loCaseInsensitive]) then
            iSortorder := FieldByName ('SORTORDER').AsInteger;
          iOldSortorder := iSortorder;

          case richtung of
            true : iNewSortorder := iSortorder-1; //up
            false : iNewSortorder := iSortorder+1; //down
            else
              exit;
          end;

        
          sSQL_Befehl1 := 'UPDATE kunden SET sortorder = ' + IntToStr(iTempSortorder) + ' '+
                          'WHERE sortorder = ' + IntToStr(iOldSortorder) + '';

          sSQL_Befehl2 := 'UPDATE kunden SET sortorder = ' + IntToStr(iOldSortorder) + ' '+
                          'WHERE sortorder = ' + IntToStr(iNewSortorder) + '';

          sSQL_Befehl3 := 'UPDATE kunden SET sortorder = ' + IntToStr(iNewSortorder) + ' '+
                          'WHERE sortorder = ' + IntToStr(iTempSortorder) + '';
      
          try
            ModifySQL.Clear;
            ModifySQL.Text := sSQL_Befehl1;
            Open;
            Edit;
            UpdateRecord;
            Post;

            ModifySQL.Clear;
            ModifySQL.Text := sSQL_Befehl2;
            Open;
            Edit;
            UpdateRecord;
            Post;

            ModifySQL.Clear;
            ModifySQL.Text := sSQL_Befehl3;
            Open;
            Edit;
            UpdateRecord;
            Post;
          except
            MessageDlg ('Der Eintrag kann nicht geändert verschoben werden, ' +
              'da ein anderer Benutzer auf den Datensatz zugreift.', mtError,[mbOK], 0);
          end;
      end;
      //Close;
      DataModuleKunden.KundenTransaction.Commit;
    end;

  with DBGrid1.DataSource.DataSet do
    begin
      Open;

      case richtung of
        true : Prior; //up
        false : Next; //down
      else
        exit;
      end;

      Locate('SORTORDER', iNewSortorder, [loCaseInsensitive]);
    end;
  DBGrid1.DataSource.DataSet.EnableControls;
end;
  Mit Zitat antworten Zitat