AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi TQuery/TTable filtern ohne Daten neu abzurufen
Thema durchsuchen
Ansicht
Themen-Optionen

TQuery/TTable filtern ohne Daten neu abzurufen

Ein Thema von Nils S. · begonnen am 23. Mai 2014 · letzter Beitrag vom 25. Mai 2014
Antwort Antwort
Seite 1 von 3  1 23      
Nils S.

Registriert seit: 10. Apr 2014
36 Beiträge
 
Delphi XE5 Professional
 
#1

TQuery/TTable filtern ohne Daten neu abzurufen

  Alt 23. Mai 2014, 11:57
Guten Tag zusammen,

wenn man bei einem Query oder Table den Filter setzt (Table1.Filter := 'Column1 = abc'; ), wird die Datenmenge, welche die Komponente abrufen soll, neu abgerufen (mit einer Where-Klausel o.ä.) oder nicht?
Wenn dem so ist, würde das die Performance bei größeren Datenmengen wohl stark beeinflussen.
Gibt es eine Möglichkeit, dass einfach nur die vorhandene Datenmenge der Komponente gefiltert und angezeigt wird ohne, dass die Daten neu abgerufen werden?
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#2

AW: TQuery/TTable filtern ohne Daten neu abzurufen

  Alt 23. Mai 2014, 12:08
Ich war bisher der Meinung, dass keine neue Abfrage an die DB geschickt wird, sondern, dass der Filter auf die abgerufene Datenmenge angewendet wird.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: TQuery/TTable filtern ohne Daten neu abzurufen

  Alt 23. Mai 2014, 12:15
Filter ist noch nur von TDataSet vorgegeben, wie die konkrete Implementierung aussieht, kann wahrscheinlich jede Implementierung (FireDAC, dbExpress, ...) selbst entscheiden, oder?

Das hätte ich jetzt geraten ohne irgendetwas zu prüfen...
  Mit Zitat antworten Zitat
Nils S.

Registriert seit: 10. Apr 2014
36 Beiträge
 
Delphi XE5 Professional
 
#4

AW: TQuery/TTable filtern ohne Daten neu abzurufen

  Alt 23. Mai 2014, 12:19
Also in meinem Fall handelt es sich um FireDAC Komponenten.
Ich habe mal was gehört von server- und clientseitigem Filter.
Finden kann ich unter diesen Begriffen aber nichts.
  Mit Zitat antworten Zitat
rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
297 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: TQuery/TTable filtern ohne Daten neu abzurufen

  Alt 23. Mai 2014, 12:24
Kannst Du den sicherstellen, dass sich zwischendurch nichts geändert hat?

Wenn nicht, dann wäre es nicht sinnvoll, wenn Du nur in den bereits gelesenen Daten filtern würdest.

Moin
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: TQuery/TTable filtern ohne Daten neu abzurufen

  Alt 23. Mai 2014, 13:12
FireDAC verweist auf die Data.DB-Grundphilosophie.

Zitat:
Anmerkung: Wenn die Filterung aktiviert ist und der Benutzer einen Datensatz bearbeitet, kann dies dazu führen, dass der Datensatz die Filterbedingungen nicht mehr erfüllt. Beim nächsten Abrufen von Datensätzen aus der Datenmenge anhand des Filters ist ein solcher Datensatz dann "verschwunden". Der nächste Datensatz, der die Bedingungen erfüllt, wird dann zum aktuellen.
Also ich würde so rauslesen, dass ein Ändern der Filter nicht aktiv wird und nochmals Queries absetzt...
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#7

AW: TQuery/TTable filtern ohne Daten neu abzurufen

  Alt 23. Mai 2014, 14:20
wenn man bei einem Query oder Table den Filter setzt (Table1.Filter := 'Column1 = abc'; ), wird die Datenmenge, welche die Komponente abrufen soll, neu abgerufen (mit einer Where-Klausel o.ä.) oder nicht?
Läßt sich doch ganz einfach testen:
Du programmierst dir eine Methode zum Setzen bzw. Löschen des Filters:
Delphi-Quellcode:

private {private Deklarationen}

Procedure TFormMain.Filtern(MyTable : TTable; MyFilter : String; Setzen : Boolean);
begin
  MyTable.Filtered := False;

  if Setzen then
  begin
    MyTable.Filter := MyFilter;
    MyTable.Filtered := True;
  end;
end;
Die rufst du – meinetwegen mit einem Buttonklick – auf, nachdem du mit deinem Lieblings-Datenbank-Manager einen Wert in dieser Tabelle geändert hast. Wird der geänderte Wert auch in deiner Anwendung angezeigt, hat das Setzen des Filters aktuelle Daten aus der DB geschaufelt, andernfalls nicht.
  Mit Zitat antworten Zitat
Nils S.

Registriert seit: 10. Apr 2014
36 Beiträge
 
Delphi XE5 Professional
 
#8

AW: TQuery/TTable filtern ohne Daten neu abzurufen

  Alt 24. Mai 2014, 07:43
wenn man bei einem Query oder Table den Filter setzt (Table1.Filter := 'Column1 = abc'; ), wird die Datenmenge, welche die Komponente abrufen soll, neu abgerufen (mit einer Where-Klausel o.ä.) oder nicht?
Läßt sich doch ganz einfach testen:
Du programmierst dir eine Methode zum Setzen bzw. Löschen des Filters:
Delphi-Quellcode:

private {private Deklarationen}

Procedure TFormMain.Filtern(MyTable : TTable; MyFilter : String; Setzen : Boolean);
begin
  MyTable.Filtered := False;

  if Setzen then
  begin
    MyTable.Filter := MyFilter;
    MyTable.Filtered := True;
  end;
end;
Die rufst du – meinetwegen mit einem Buttonklick – auf, nachdem du mit deinem Lieblings-Datenbank-Manager einen Wert in dieser Tabelle geändert hast. Wird der geänderte Wert auch in deiner Anwendung angezeigt, hat das Setzen des Filters aktuelle Daten aus der DB geschaufelt, andernfalls nicht.
Das habe ich mir auch kurz nach dem Erstellen gedacht und gemacht.
Habe nun festgestellt, dass bei einem Filter die Daten aus der Datenbank neu abgerufen werden.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#9

AW: TQuery/TTable filtern ohne Daten neu abzurufen

  Alt 24. Mai 2014, 07:47
Habe nun festgestellt, dass bei einem Filter die Daten aus der Datenbank neu abgerufen werden.
Siehst du – geht doch

Und wenn du nicht willst, daß beim Filtern die Datenmenge neu abgerufen wird, verwendest du ein TClientDataset oder ein TMemoryDataSet, das zum Zeitpunkt der Filtersetzung keine Verbindung zur Datenbank besitzt, was bei großen Datenmengen selbstverständlich entsprechende Speicherkapazitäten voraussetzt.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: TQuery/TTable filtern ohne Daten neu abzurufen

  Alt 24. Mai 2014, 09:26
Geprüft habe ich es jetzt selbst noch nicht, aber das hätte ich jetzt nicht erwartet!

Ich hatte mehr aus Interesse einfach mal nicht die Query angepasst, sondern mal mit der Filter-Einstellung gespielt.

Wenn es um ein paar GB geht ist ein Memory-Dataset bei mir allerdings auch keine Option mehr
Ich glaube, ich lasse die ganze Filter-Geschichte einfach sein...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 15:46 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