Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.537 Beiträge
 
Delphi 12 Athens
 
#4

AW: ClientDataset: Wie Record verschieben oder Position tauschen

  Alt 5. Mai 2016, 17:49
Eine direkte Methode zum verschieben von Records gibt es nicht. Es bleibt also nur das Lesen und Schriben der einzelnen Felder des jeweiligen Datensatzes. Für solche Zwecke habe ich mir mal zwei Hilfsroutinen geschrieben, mit denen man den aktuellen Datensatz einfach sichern und wieder zurückschreiben kann.

Delphi-Quellcode:
type
  TRecordStore = TDictionary<string, Variant>;

  TDataSetHelper = class helper for TDataSet
  public
    procedure LoadRecord(Source: TRecordStore);
    procedure StoreRecord(Target: TRecordStore);
  end;

procedure TDataSetHelper.LoadRecord(Source: TRecordStore);
{ Überträgt die Daten aus dem RecordStore in den aktuellen Datensatz }
var
  fld: TField;
  fldName: string;
begin
  for fldName in Source.Keys do begin
    fld := FindField(fldName);
    if (fld <> nil) and not fld.ReadOnly then begin
      fld.Value := Source[fldName];
    end;
  end;
end;

procedure TDataSetHelper.StoreRecord(Target: TRecordStore);
{ Überträgt den aktuellen Datensatz in den RecordStore }
var
  fld: TField;
begin
  Target.Clear;
  for fld in Fields do begin
    Target.AddOrSetValue(fld.FieldName, fld.Value);
  end;
end;
Für deinen Fall könnte man das etwa so verwenden:

Delphi-Quellcode:
var
  sto: TDictionary<string, Variant>;
  sto2: TDictionary<string, Variant>;
begin
  sto := TRecordStore.Create;
  try
    sto2 := TRecordStore.Create;
    try
      ClientDataSet1.First;
      ClientDataSet1.StoreRecord(sto);
      ClientDataSet1.Last;
      ClientDataSet1.StoreRecord(sto2);
      ClientDataSet1.Edit;
      ClientDataSet1.LoadRecord(sto);
      ClientDataSet1.Post;
      ClientDataSet1.First;
      ClientDataSet1.Edit;
      ClientDataSet1.LoadRecord(sto2);
      ClientDataSet1.Post;
    finally
      sto2.Free;
    end;
  finally
    sto.Free;
  end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat