![]() |
Datenbank: InterBase • Version: 6.1 • Zugriff über: IBObjects
Tabelle/Query, die ihre Daten aus einer anderen Query bezieht
Hallo Leute,
wir arbeiten mit Delphi 5 und den IBObjects (TIBOQuery usw.). Gibt es die Möglichkeit, eine Query, ein Table oder irgendein anderes TDataSet so zu benutzen, dass es sich die Daten nicht aus der Datenbank, sondern aus einer anderen Query holt? Das Anwendungsszenario sieht folgendermaßen aus: Ich habe eine Tabelle, in der gesucht werden kann. Die Daten werden währenddessen in einem Tabellen-Control angezeigt. Nun möchte ich, dass sich bei jedem Tastenanschlag in einem Suchfeld die Anzeige weiter einschränkt. Ich kann also nicht jedes Mal eine neue DB-Anfrage machen, nur um eine Teilmenge der schon geholten Daten nochmals zu holen. Stattdessen möchte ich einfach die schon bekannten Daten nutzen und davon nur eine Teilmenge darstellen. Es handelt sich um größere Datenmengen (mehrere 10.000 Datensätze). Ich weiß, dass das TClientDataSet dazu wie geschaffen ist. Dessen Einsatz steht aber außer Frage, da wir noch in Delphi 5 programmieren und hier die Nutzung nur erfolgen kann, wenn die midas.dll auf allen Clients installiert und registriert ist (Uses LibMidas ist erst ab D6 möglich) und das können wir nicht sicherstellen. |
AW: Tabelle/Query, die ihre Daten aus einer anderen Query bezieht
Moin, Moin,
Die Idee eine Query mit dem kompletten Datenbestand einmalig öffnen, und dann mit einer weiteren Query darauf zu greifen wird nicht funktionieren ! Schon mal über die Verwendung eines Filters nachgedacht, oder eventuell mit Locate arbeiten ? Die bessere Alternative für eine schnelle Suche innerhalb der Daten ist auf jeden Fall die Daten gut und geschickt zu indizieren, und alle Möglichkeiten Deines Datenbankservers zu nutzen. Was für eine RDBMS setzt Du denn ein ? (Ups, wer lesen kann ....) Beste Grüße Michael |
AW: Tabelle/Query, die ihre Daten aus einer anderen Query bezieht
Wenn ich bei jedem Tastenanschlag eine DB-Abfrage starten würde, dann wäre das einfach nur elendig langsam. Allein die Latenz durch das LAN ist doch schon zu langsam dafür - egal wie schnell der Server reagieren würde. Deshalb möchte ich die Einschränkung lokal berechnen, und zwar vorzugsweise nur für so viele Datensätze wie ich grad brauche (wie angezeigt werden).
Tastenanschlag -> Grid unter Berücksichtigung der neuen Bedingungen mit so vielen Datensätzen füllen, wie angezeigt werden Das Ganze muss also in Sekundenbruchteilen (Hundertstel) passieren! |
AW: Tabelle/Query, die ihre Daten aus einer anderen Query bezieht
klingt so als ob Du Filter verwenden solltest ....
|
AW: Tabelle/Query, die ihre Daten aus einer anderen Query bezieht
Ich denke, der Ansatz ist nicht optimal. Ein Tastenanschlag (bzw. Suchänderung) könnte ja auch bedeuten, dass aus dem Suchstring etwas gelöscht wurde. Dann kommst Du mit einer weiteren Subfilterung nicht mehr zurecht.
Du solltest versuchen, immer komplett neu zu selectieren/zu filtern und diesen Vorgang bestmöglich zu optimieren. Das wäre jedenfalls mein Ansatz. Ich habe ein altes Projekt, bei dem ich anhand von Sucheingaben einen Datensatz lokalisiere. Das erfolgt bei jeder Suchtextänderung indem erst in einer Straßen-Tabelle nach einem passenden Straßenindex gesucht wird und dann in einer Grundstücks-Tabelle nach dem Straßenindex und der passenden Hausnummer. Durch die Trennung in zwei Tabellen und Index-Verwendung geht das sehr schnell. Vielleicht kannst Du ja Deine DB noch optimieren? |
AW: Tabelle/Query, die ihre Daten aus einer anderen Query bezieht
Zitat:
Dieses lokale Filtern geht wohl z.B. in FibPlus. Zitat:
Ich weiß ja nicht, was du als "Tabellencontrol" benutzt. Aber allein das Neu Laden der gefilterten Daten in der Grid dauert lange genug. Aus gutem Grunde gibt es dieses Verhalten in diversen LookUp - Komponenten. Aber ich würde nie auf die Idee kommen, eine Rechnung über ein LookUp zu suchen. Für Anreden, Mengenneinheiten - eben kleinere Tabellen - ist das OK. Aber wenn du es versuchen willst, dann benutze diverse MemDatasets. Diese können meist per Assign Daten und Struktur eines TDataSet übernehmen. Ich würde aber bei so vielen Daten immer Eingabe - Enter - Suchen bevorzugen. Evtll. noch durch einen Timer, welcher nach ca. 1 Sekunde Pause automatisch filtert. Frank |
AW: Tabelle/Query, die ihre Daten aus einer anderen Query bezieht
Ich habe mich jetzt ein wenig zu TIBOQuery und Filtern belesen. In den IBO-FAQ steht folgendes:
Zitat:
|
AW: Tabelle/Query, die ihre Daten aus einer anderen Query bezieht
hat die Komponente eventuell ein onFilterRecord Ereignis?
In dem Ereignis kannst Du nach Deinen Kriterien Filtern. Ich nutze es mit TMSQuery da funktioniert es super und blitz schnell |
AW: Tabelle/Query, die ihre Daten aus einer anderen Query bezieht
Zitat:
|
AW: Tabelle/Query, die ihre Daten aus einer anderen Query bezieht
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:37 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