AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken FireDac Datensätze markieren

FireDac Datensätze markieren

Ein Thema von Kostas · begonnen am 22. Jan 2015 · letzter Beitrag vom 22. Jan 2015
Antwort Antwort
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
910 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

FireDac Datensätze markieren

  Alt 22. Jan 2015, 10:52
Datenbank: Firebird • Version: 2.5 • Zugriff über: FireDac
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
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.355 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: FireDac Datensätze markieren

  Alt 22. Jan 2015, 12:27
Das TFDQuery von TDataSet erbt, sollte die Eigenschaft Bookmark doch wohl vorhanden sein?
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#3

AW: FireDac Datensätze markieren

  Alt 22. Jan 2015, 18: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
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
8.928 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: FireDac Datensätze markieren

  Alt 22. Jan 2015, 19:45
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#5

AW: FireDac Datensätze markieren

  Alt 22. Jan 2015, 19:48
Stimmt auffallend Auf eine TBookmarkList wäre ich jetzt gar nicht auf Anhieb verfallen
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
910 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: FireDac Datensätze markieren

  Alt 22. Jan 2015, 20:32
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
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 06:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf