![]() |
AW: TQuery/TTable filtern ohne Daten neu abzurufen
Zitat:
|
AW: TQuery/TTable filtern ohne Daten neu abzurufen
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:
Aber klar, ADO != FireDAC. (Und TDataSet.SetFiltered ist virtual).
Procedure TForm1.Button1Click(Sender : TObject)
Begin myDataset.Filtered := not myDataSet.Filtered; End; |
AW: TQuery/TTable filtern ohne Daten neu abzurufen
Also wenn ich .Filter := ... setze, werden immer die aktuellen Daten aus der Datenbank angezeigt.
Hier ist der Code:
Delphi-Quellcode:
Filtered ist standardmäßig auf True gesetzt.
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; 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. |
AW: TQuery/TTable filtern ohne Daten neu abzurufen
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:
Vielleicht kann man das Problem damit Umschiffen. Das sieht mir nämlich nach einem Refresh-Problem im FMX-Framework aus.
myDataSet.DisableControls;
Try myDataSet.Filtered := False; myDataSet.Filter := CreateMyNewFilter(); myDataSet.Filtered := True; Finally myDataSet.EnableControls; end; |
AW: TQuery/TTable filtern ohne Daten neu abzurufen
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. |
AW: TQuery/TTable filtern ohne Daten neu abzurufen
Zitat:
|
AW: TQuery/TTable filtern ohne Daten neu abzurufen
Zitat:
|
AW: TQuery/TTable filtern ohne Daten neu abzurufen
Zitat:
|
AW: TQuery/TTable filtern ohne Daten neu abzurufen
Zitat:
Delphi-Quellcode:
Erst ein Ausschalten des Filters und darauf folgendes Einschalten aktiviert hier den Filter. (getestet mit IbDac und Firebird)
IF DatMod.V_Messung.Filter = '' THEN
DatMod.V_Messung.Filter := 'M_WERT < 100' ELSE DatMod.V_Messung.Filter := ''; StatBarMain.Panels[3].Text := DatMod.V_Messung.Filter; |
AW: TQuery/TTable filtern ohne Daten neu abzurufen
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:
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.
Procedure TForm.ButtonClick(Sender : TObject);
Begin id := id mod 5 + 1; myDataSet.Filter := 'ColumnType = '+intToStr(id); end; Funktioniert also. Dann habe ich das so geändert, das ich noch id=6 nehme und dann den Filtertext leere, also so:
Delphi-Quellcode:
Funzt auch.
Procedure TForm.ButtonClick(Sender : TObject);
Begin id := id mod 6 + 1; if id=6 then myDataSet.Filter := '' else myDataSet.Filter := 'ColumnType = '+intToStr(id); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:09 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 by Thomas Breitkreuz