Einzelnen Beitrag anzeigen

Perlsau
(Gast)

n/a Beiträge
 
#3

AW: FireDac Datensätze markieren

  Alt 22. Jan 2015, 17:44
Habt jemand eine Idee wie man die markierten Datensätze am besten Verwalten kann. Übrigens, die fdQuery ist mit einem
DexExpress cxGrid verbunden. Ich bin der Meinung, die Verwaltung sollte nicht über das cxGrid erfolgen sondern irgendwie
über die Query. Die Liste selbst in einer Array zu verwalten ist sicherlich auch eine Möglichkeit. Das FireDac dass nicht
vorgesehen haben soll, wundert mich an dieser Stelle, oder ich habe es noch nicht gefunden.
Eine Möglichkeit bestünde, der jeweiligen Tabelle eine Boolean-Spalte zu spendieren, entweder physikalisch in der Datenbank oder als virtuelles Feld im Query. Beim Markieren bzw. Demarkieren via DBGrid, in dem natürlich MultiSelect erlaubt sein muß, wird dann der Boolean-Wert entsprechend gesetzt.

Das TFDQuery von TDataSet erbt, sollte die Eigenschaft Bookmark doch wohl vorhanden sein?
Bookmark erlaubt aber doch nur das Setzen eines einzigen Lesezeichens, soweit ich das verstanden habe:

Gibt das aktuelle Bookmark-Objekt in der Datenmenge an. Bookmark ermöglicht den Zugriff auf das aktuelle Bookmark-Objekt in einer Datenmenge. Diese Objekte ermöglichen das Markieren einer bestimmten Position in einer Datenmenge, um später rasch zu diesen Datensätzen zurückzukehren. In einer Anwendung kann Bookmark gelesen werden, um die Positionsmarkierung für den aktuellen Datensatz zu ermitteln, oder auf ein gespeichertes Bookmark gesetzt werden, um den aktiven Datensatz zu wechseln.

In einer weiterführenden Erklärung steht dann auch ein Beispiel, das meines Erachtens eindeutig darauf hinweist, daß es beim Bookmark-Property lediglich darum geht, sich eine ganz bestimmte Position zu merken – z.B. vor dem Durchiterieren durch eine Datenmenge –, um danach wieder zu genau dieser gemerkten ("gebookmarkten") Position zurückkehren zu können:
Delphi-Quellcode:
procedure DoSomething (const Tbl: TTable)
var
  Bookmark: TBookmark;
begin
  Bookmark := Tbl.GetBookmark; { Speicher reservieren und einen Wert zuweisen }
  Tbl.DisableControls; { Datensatzanzeige in Steuerelementen deaktivieren }
  try
    Tbl.First; { Auf den ersten Datensatz in der Tabelle positionieren }
    while not Tbl.Eof do {durch alle Datensätze der Tabelle iterieren }
    begin
      { Hier folgt die weitere Verarbeitung }
      .
      .
      .
      Tbl.Next;
    end;
  finally
    Tbl.GotoBookmark(Bookmark);
    Tbl.EnableControls; { ggf. Anzeige von Datensätzen in Datensteuerelementen wieder aktivieren }
    Tbl.FreeBookmark(Bookmark); {Von Positionsmarke belegten Speicher freigeben }
  end;
end;
  Mit Zitat antworten Zitat