AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken ClientDataset: Wie Record verschieben oder Position tauschen
Thema durchsuchen
Ansicht
Themen-Optionen

ClientDataset: Wie Record verschieben oder Position tauschen

Ein Thema von Harry Stahl · begonnen am 5. Mai 2016 · letzter Beitrag vom 11. Mai 2016
 
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: ClientDataset: Wie Record verschieben oder Position tauschen

  Alt 5. Mai 2016, 16: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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:23 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