Registriert seit: 26. Aug 2007
79 Beiträge
|
Re: Datensatz Sortierreihenfolge ändern und verschieben
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;
|
|
Zitat
|