Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   FireDac Datensätze markieren (https://www.delphipraxis.net/183605-firedac-datensaetze-markieren.html)

Kostas 22. Jan 2015 09:52

Datenbank: Firebird • Version: 2.5 • Zugriff über: FireDac

FireDac Datensätze markieren
 
Hallo Zusammen,

in IBObjects verwaltet die Query die markierte Datensätze. Mit markiert meine ich, z.b. im Grid mit gedrückter
Strg + LinksKlick einen Datensatz markieren. Die Liste bleibt erhalten selbst wenn das Where der Query verändert wird.
Um das Where geht es mit in diesem Fall jedoch nicht. Soweit ich weis, verwaltet FireDac keine Liste für markierte
Datensätze.

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.

Gruß Kostas

Union 22. Jan 2015 11:27

AW: FireDac Datensätze markieren
 
Das TFDQuery von TDataSet erbt, sollte die Eigenschaft Bookmark doch wohl vorhanden sein?

Perlsau 22. Jan 2015 17:44

AW: FireDac Datensätze markieren
 
Zitat:

Zitat von Kostas (Beitrag 1287402)
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.

Zitat:

Zitat von Union (Beitrag 1287431)
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;

Uwe Raabe 22. Jan 2015 18:45

AW: FireDac Datensätze markieren
 
Zitat:

Zitat von Perlsau (Beitrag 1287483)
Bookmark erlaubt aber doch nur das Setzen eines einzigen Lesezeichens, soweit ich das verstanden habe:

Was ja niemanden hindert, eine Liste der Bookmarks zu verwalten - wie es übrigens auch TDbGrid mit einer TBookmarkList tut.

Perlsau 22. Jan 2015 18:48

AW: FireDac Datensätze markieren
 
Stimmt auffallend :thumb: Auf eine TBookmarkList wäre ich jetzt gar nicht auf Anhieb verfallen :wink:

Kostas 22. Jan 2015 19:32

AW: FireDac Datensätze markieren
 
Hallo Zusammen,

Wir haben das jetzt mit einem Dictionary und ein Calculated Field gelöst.
Beim markieren eines Datensatzes im Grid oder sonst wo, wird ein Eintrag ins Dict. mit dem PK geschrieben
und beim Abwählen wieder gelöscht oder getogglet je nach Anforderung. Bei OnCalcFields wird der Eintrag
über den PK gesucht. Falls vorhanden, wird das Calc. Boolean Field entsprechend gesetzt. Daraufhin zeigt
das Grind den aktuellen Zustand. Das hat den Vorteil dass ich Datensätze auch ohne Grid markieren kann
und der zweite Vorteil, ich kann dynamisch das Where durch Makro verändern und meine Auswahl fortsetzen
da sie bestehen bleibt. Das kann IBO per Default.


Gruß Kostas


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz