Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Denkanstoß MemTable/Cachetable FireDac (https://www.delphipraxis.net/205644-denkanstoss-memtable-cachetable-firedac.html)

Eppos 2. Okt 2020 10:04

AW: Denkanstoß MemTable/Cachetable FireDac
 
Also grundsätzlich wird bisher immer ein SQL mit der entsprechenden Where-Bedingungn abgesetzt. Dies funktioniert auch schnell, aber der Mitarbeiter muss warten, also er startet das Prüfprogramm.
Und die ständige Abfrage dauert immer ca. 30 ms. Dies ist nicht die einzige Tabelle die Daten beinhaltet, die zur Prüfung notwendig sind.

In der besagten Tabelle sind nur 10-50 Datensätze enthalten, diese in den Speichern zu nehmen und über den Filter einzugrenzen sehe ich als Peformanceverbesserung an.
In einer weiteren Tabelle benfalls nur 10-20.

Delphi.Narium 2. Okt 2020 10:09

AW: Denkanstoß MemTable/Cachetable FireDac
 
Also jetzt haben wir mal eine Mengenangabe.

Bei so kleinen Mengen ist ein Filter sinnvoll.

Und wenn Du davon ein paar Tabellen hast, sehe ich keinen Grund, warum Du das nicht so machen solltest.

Eppos 2. Okt 2020 10:31

AW: Denkanstoß MemTable/Cachetable FireDac
 
Perfekt, dickes Danke schön!

himitsu 2. Okt 2020 14:25

AW: Denkanstoß MemTable/Cachetable FireDac
 
Zitat:

Zitat von Eppos (Beitrag 1474746)
Was aber vermutlich nicht geht, Locate mit ">= Datum_Von", "<= Datum_Bis"? Hat jemand eine Idee?

Nee, Locate geht nur auf einen Wert, aber man könnte da auch sowas wie LIKE benutzen (loPartialKey).

Alternativ müsstest du dann eben dein SELECT so aufbauen, dass es pro Tag (oder Monat) einen Datensatz liefert, welcher sich per Locate oder Lookup anspringen liese.
Selbst bei "Tagen" wären es in 100 Jahren aber auch nicht soooo viel Speicher, für die paar Datensätze.

Delphi.Narium 2. Okt 2020 14:39

AW: Denkanstoß MemTable/Cachetable FireDac
 
Zitat:

Zitat von himitsu (Beitrag 1474796)
Nee, Locate geht nur auf einen Wert, aber man könnte da auch sowas wie LIKE benutzen (loPartialKey).

Stimmt nicht: Mehrere Werte geht durchaus:
Delphi-Quellcode:
DataSet.Locate('DatumVon;DatumBis', VarArrayOf([vDatumVon, vDatumBis]), []);

himitsu 2. Okt 2020 15:28

AW: Denkanstoß MemTable/Cachetable FireDac
 
Ja, mehrere Spalten prüfen, aber nicht mehrere Werte in einer Spalte, bzw. ein Wert zwischen zwei Spalten. :zwinker:

Delphi-Quellcode:
// Datem zwischen Von und Bis

DataSet.Locate('Datum', VarArrayOf([DatumVon, DatumBis]), []);

DataSet.Locate('DatumVon;DatumBis', Datum), []);
geht nicht.

Was aber beim Filter ginge
Delphi-Quellcode:
Query.Filter := Format('%0:d <= Datum and Datum <= %0:d', [2020, 2021]);

Query.Filter := Format('DatumVon <= %0:d and %0:d <= DatumBis', [2020]);
Query.Filtered := True;
if Query.RecordCount > 0 then
oder im Query.OnFilterRecord (Locate/Lookup mit einer Eventmethode wäre manchmal was Feines ... oder sowas wie im LINQ)

Eppos 2. Okt 2020 15:37

AW: Denkanstoß MemTable/Cachetable FireDac
 
Jetzt muss ich doch nochmal Fragen, ich bekomme das mit den zwei Werten im Filter nicht hin.
Kennt jemand die genaue Syntax?

himitsu 2. Okt 2020 15:45

AW: Denkanstoß MemTable/Cachetable FireDac
 
Zitat:

Zitat von Eppos (Beitrag 1474806)
Kennt jemand die genaue Syntax?

http://docwiki.embarcadero.com/Libra...DataSet.Filter

Eppos 2. Okt 2020 15:50

AW: Denkanstoß MemTable/Cachetable FireDac
 
Danke für den Link. Hätte ich auch selber drauf kommen können. :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:36 Uhr.
Seite 2 von 2     12   

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