![]() |
Datenbank: firebird • Version: 2.1 • Zugriff über: Zeos
In ERgebinsmenge suchen
hallo zusammen,
ich lese per sqlstatement eine db-tabelle in ein db-Grid. Dabei handelt es sich um ein paar tausend DS. Gibt es ne Möglichkeit in diesen berits gelesenen DS (im Grid ? ) nach bestimmten Kriterien zu suchen, ohne nochmals auf die DB zuzugreifen. Hintergrund ist eine schnelleres Ergebnis der Suche über eine (langsame) Internetleitung. Danke euch recht herzlich KHH |
AW: In ERgebinsmenge suchen
Zitat:
Suchen: Datenmenge wird nach einem best. String (der Wildcards * und ? enthalten darf) von vorne nach hinten durchsucht. Bei einem Treffer bleibt die Suche stehen und der Datensatzzeiger steht auf dem gefunden Datensatz. Der Benutzer kann Suche fortsetzen und/oder Suchrichtung ändern. (was die Implementierung der Suche etwas schwierig und schwerfällig macht) Filtern: Alle Datensätze ausblenden, die nicht den Suchkriterien entsprechen Highlighten: Datensätze farbig hervorheben, die den Suchkriterien entsprechen |
AW: In ERgebinsmenge suchen
Zitat:
|
AW: In ERgebinsmenge suchen
Am Einfachsten wäre dann Filtern über das Event OnFilterRecord.
kleines Beispiel:
Delphi-Quellcode:
procedure TForm1.NotenFilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin Accept := (DataSet.fieldByName('Punkte').AsInteger > 12) and (DataSet.fieldByName('Status').AsString='OK'); end; |
AW: In ERgebinsmenge suchen
Zitat:
ok, probiere ich so aus, ich danke euch |
AW: In ERgebinsmenge suchen
Ich werfe dann noch mal das Stichwort Locate im Dataset in den Raum...
|
AW: In ERgebinsmenge suchen
Zitat:
Delphi-Quellcode:
, aber das würde schon wieder auf die DB zugreifen).
...FieldByName('MARKIERT').AsBoolean := FALSE;
Oder einfach mit CachedUpdates arbeiten ... hat aber auch Nachteile, wenn mehrere Benutzer auf die DB zugreifen. |
AW: In ERgebinsmenge suchen
Die Information, ob ein Datensatz als markiert zu betrachten ist, kann man auch 'auslagern'. Nämlich in einen In-Memory-Dataset, der nur das (oder die) Schlüsselfeld(er) der zu durchsuchenden Tabelle enthält. Für 'Markiert' werden die Schlüsselinformationen eingefügt, für 'Demarkiert' entsprechend wieder gelöscht. Für die Darstellung kann man dann zB eine ungebundene Spalte im Grid anlegen und in OnDrawColumnCell entsprechend mit einem WingDings-Häkchen oä bestücken. Für weitere Verarbeitungen ist es natürlich praktisch und sinnvoll, wenn die fragliche Tabelle einen eindeutigen (Primär-) Index mit nur einem Feld enthält (zB für SELECT ... WHERE Key IN (3,5,17...) usw). Und noch praktischer ist es natürlich, wenn man gleich einen TDBGrid-Abkömmling erstellt, der die entsprechenden Methoden kapselt.
|
AW: In ERgebinsmenge suchen
Zitat:
wie komm ich zum nächsten relevanten ds ? |
AW: In ERgebinsmenge suchen
Soetwas mal eben zu schreiben, sollte das geringste Problem sein.
Edit: Wenn die Verbindung so langsam ist, würde ich das Filtern im Server machen. Es ist vielleicht keine gute Idee, erst alle Daten über die langsame(!) Verbindung zu saugen und dann, nachdem die vielen Daten endlich angekommen sind, durch filtern nur die geeigneten auszuwählen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 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