![]() |
Re: Datensatz Sortierreihenfolge ändern und verschieben
Zitat:
|
Re: Datensatz Sortierreihenfolge ändern und verschieben
Zitat:
Delphi-Quellcode:
Es waren also drei Schritte nötig.
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) + ''; Und für die andere Richtung einfach:
Delphi-Quellcode:
Ein Nachteil noch: Das dbGrid flackert leider.
iNewSortorder := iSortorder-2;
|
Re: Datensatz Sortierreihenfolge ändern und verschieben
Zitat:
Delphi-Quellcode:
kunden.disableControls;
... tuwas kunden.enableControls; |
Re: Datensatz Sortierreihenfolge ändern und verschieben
Zitat:
|
Re: Datensatz Sortierreihenfolge ändern und verschieben
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; |
Re: Datensatz Sortierreihenfolge ändern und verschieben
Wenn die LfdNr eindeutig ist (Primary Key), reichen 2 Updates, ok. eigentlich nur einer.
In T-SQL (MS SQL Server ginge das so)
SQL-Code:
Update Kunden set
Sortorder = case when LfdNr = :Von then SortOrder + 1 when LfdNr = :Nach then SortOrder - 1 else SortOrder end where LfdNr in (:Von, :Nach) |
Re: Datensatz Sortierreihenfolge ändern und verschieben
Das sollte so in FB genauso gehen
|
Re: Datensatz Sortierreihenfolge ändern und verschieben
Zitat:
wie bau ich das denn in den Delphi-Quellcode ein? Wo übergebe ich meine Variablen (iNewSortorder und iOldSortorder)? |
Re: Datensatz Sortierreihenfolge ändern und verschieben
Zitat:
Hat jemand ein Beispiel? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14: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