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
Dejan Vu
(Gast)

n/a Beiträge
 
#1

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
 
#2

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
Dejan Vu
(Gast)

n/a Beiträge
 
#3

AW: TQuery/TTable filtern ohne Daten neu abzurufen

  Alt 24. Mai 2014, 14:03
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.
... Ich auch nicht, wenn ich darüber nachdenke.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#4

AW: TQuery/TTable filtern ohne Daten neu abzurufen

  Alt 24. Mai 2014, 17:11
Und Du meinst Filtered auf False/True setzen macht einen Unterschied?
Das ist die normale Vorgehensweise beim Setzen eines neuen Filters. Genau dafür gibt es das Filtered-Property.

Geändert von Perlsau (24. Mai 2014 um 17:14 Uhr)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#5

AW: TQuery/TTable filtern ohne Daten neu abzurufen

  Alt 24. Mai 2014, 17:16
Wenn du den Filter-String bei gesetztem Filtered-Property (filtered := true) änderst, passiert gar nichts.
Das dachte ich auch, bis ich es eben ausprobiert habe (Mit ADO). Aber da SetFilterText auch virtual ist, dürfte das individuell und unterschiedlich sein. Daher: Ausprobieren.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#6

AW: TQuery/TTable filtern ohne Daten neu abzurufen

  Alt 24. Mai 2014, 17:29
Wenn du den Filter-String bei gesetztem Filtered-Property (filtered := true) änderst, passiert gar nichts.
Das dachte ich auch, bis ich es eben ausprobiert habe (Mit ADO). Aber da SetFilterText auch virtual ist, dürfte das individuell und unterschiedlich sein. Daher: Ausprobieren.
Hast du den Filter bei aktivem Dataset und gesetztem Filtered-Property lediglich im Objekt-Inspektor geändert? In dem Fall änders sich auch bei mir die Filtermenge oder, anders ausgedrückt, bei Enter in der OI-Zelle mit dem neuen Filterwert wird der Filter gesetzt und aktiviert. Mache ich dasselbe jedoch im Code, passiert absolut gar nichts:
Delphi-Quellcode:
  IF DatMod.V_Messung.Filter = 'THEN
     DatMod.V_Messung.Filter := 'M_WERT < 100ELSE
     DatMod.V_Messung.Filter := '';

     StatBarMain.Panels[3].Text := DatMod.V_Messung.Filter;
Erst ein Ausschalten des Filters und darauf folgendes Einschalten aktiviert hier den Filter. (getestet mit IbDac und Firebird)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#7

AW: TQuery/TTable filtern ohne Daten neu abzurufen

  Alt 24. Mai 2014, 17:39
Ich habe als Test eine Tabelle mit einer Spalte, die 5 unterschiedlicher Werte annehmen kann, genommen. Dann einen Button auf die Form und im Buttonclick:

Delphi-Quellcode:
Procedure TForm.ButtonClick(Sender : TObject);
Begin
  id := id mod 5 + 1;
  myDataSet.Filter := 'ColumnType = '+intToStr(id);
end;
Dann noch ein Grid, ein Dataset, mit der Datenbank verbunden und los. Nun klicke ich auf den Button und sehe im Grid nacheinander jeweils die Einträge mit 'ColumnType=1', 'ColumnType=2' usw.

Funktioniert also. Dann habe ich das so geändert, das ich noch id=6 nehme und dann den Filtertext leere, also so:
Delphi-Quellcode:
Procedure TForm.ButtonClick(Sender : TObject);
Begin
  id := id mod 6 + 1;
  if id=6 then
    myDataSet.Filter := ''
  else
    myDataSet.Filter := 'ColumnType = '+intToStr(id);
end;
Funzt auch.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#8

AW: TQuery/TTable filtern ohne Daten neu abzurufen

  Alt 24. Mai 2014, 18:39
Du hast recht: auch bei mir mit IbDac und Firebird läuft das so, ebenso mit Ado und MsSQL. Ich hatte beim ersten Testen nicht daran gedacht, Filtered zuvor auf True zu setzen und daher ein falsches Testergebnis erhalten. Und die Datenmenge muß aus gutem Grund jedesmal neu eingelesen werden, wenn der Filter sich ändert, denn der Filter legt fest, was sich in der Datenmenge befindet: Ausgefilterte Datensätze sind nicht Teil der Datenmenge.
  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 04:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz