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
Perlsau
(Gast)

n/a Beiträge
 
#1

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.114 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

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
Perlsau
(Gast)

n/a Beiträge
 
#3

AW: TQuery/TTable filtern ohne Daten neu abzurufen

  Alt 24. Mai 2014, 09:29
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...
Du entwickelst doch mit XE5, da kann man doch wunderbar 64-Bit-Anwendungen compilieren, und wenn du wie heute üblich mind. 8 oder besser gleich 16 oder 32 GB Arbeitsspeicher hast, passen da die allermeisten Tabellen doch locker rein
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#4

AW: TQuery/TTable filtern ohne Daten neu abzurufen

  Alt 24. Mai 2014, 10:33
Man liest keine GB an Daten in den Speicher. Wozu? Wer soll sich das anschauen?

Ich würde noch mit dem 'OnFilterRecord'-Event herumspielen, das finde ich flexibler und es wäre denkbar, das die Daten dann doch nicht mehrfach geladen werden. Ich kann mir das auch nicht vorstellen, ehrlich gesagt.

Zeig mal den Code, mit dem Du das testest.

Ich lass mich gerne überzeugen.

Edit: Ich habe das hier mal (allerdings mit ADO) nachgestellt. Die Daten werden *nicht* neu geladen, wenn ich das Filtern umstelle:
Delphi-Quellcode:
Procedure TForm1.Button1Click(Sender : TObject)
Begin
  myDataset.Filtered := not myDataSet.Filtered;
End;
Aber klar, ADO != FireDAC. (Und TDataSet.SetFiltered ist virtual).

Geändert von Dejan Vu (24. Mai 2014 um 10:44 Uhr)
  Mit Zitat antworten Zitat
Nils S.

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

AW: TQuery/TTable filtern ohne Daten neu abzurufen

  Alt 24. Mai 2014, 11:28
Also wenn ich .Filter := ... setze, werden immer die aktuellen Daten aus der Datenbank angezeigt.
Hier ist der Code:
Delphi-Quellcode:
procedure SetTblUserFilter;
begin
  with UserDat.tblUser do
  begin
    Close;
    Filter :=
      ('lower(LAST_NAME) like ''%' +
      AnsiLowerCase(UserSettingsFrm.edtSearchUser.Text) + '%''' +
      ' or lower(FIRST_NAME) like ''%' +
      AnsiLowerCase(UserSettingsFrm.edtSearchUser.Text) + '%''' +
      ' or lower(LOGIN_NAME) like ''%' +
      AnsiLowerCase(UserSettingsFrm.edtSearchUser.Text) + '%''');
    Open;
  end;
Filtered ist standardmäßig auf True gesetzt.
Das Close und Open verwende ich, da es sonst teilweise zu merkwürdigen Anzeigefehlern im Grid kommt,
wo wir schonmal dabei sind, ist das auch schonm Mal jemandem aufgefallen? Arbeite mit XE5, Firemonkey.
Ich habe es aber natürlich auch ohne Open und Close getestet und jedes mal, wenn der Filter geändert wird,
werden die aktuellen Daten aus der Datenbank angezeigt.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#6

AW: TQuery/TTable filtern ohne Daten neu abzurufen

  Alt 24. Mai 2014, 13:50
Das liegt an dem 'Open' und nicht am Filter.
Ich würde das mit dem Verändern des Filters vielleicht mal so probieren

Delphi-Quellcode:
myDataSet.DisableControls;
Try
  myDataSet.Filtered := False;
  myDataSet.Filter := CreateMyNewFilter();
  myDataSet.Filtered := True;
Finally
  myDataSet.EnableControls;
end;
Vielleicht kann man das Problem damit Umschiffen. Das sieht mir nämlich nach einem Refresh-Problem im FMX-Framework aus.
  Mit Zitat antworten Zitat
Nils S.

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

AW: TQuery/TTable filtern ohne Daten neu abzurufen

  Alt 24. Mai 2014, 13:57
Wie gesagt, das Close und Open habe ich nach dem Test hinzugefügt, wegen des Anzeigefehlers.
Und Du meinst Filtered auf False/True setzen macht einen Unterschied?

Kann ich mir noch nicht so ganz vorstellen aber ich werde das später mal ausprobieren.
  Mit Zitat antworten Zitat
Antwort Antwort


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 10:47 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