Delphi-PRAXiS
Seite 7 von 10   « Erste     567 89     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ClientDataSet - wie kann man Indizes verwenden? (https://www.delphipraxis.net/128397-clientdataset-wie-kann-man-indizes-verwenden.html)

omata 1. Feb 2009 20:36

Re: ClientDataSet - wie kann man Indizes verwenden?
 
Ja, das Thema ist nicht so einfach. Ich versuche mich mit dem Thema zu beschätigen und hatte deshalb die, wie ich fand, interresanten Links angegeben.

Hier ist auch noch einer.

Was zeigt denn dein Ablaufplan an, werden dort Indiezes verwendet?

globetrotter77 1. Feb 2009 20:48

Re: ClientDataSet - wie kann man Indizes verwenden?
 
@Thomas F und mkinzler:
Sorry, das war vielleicht ein bisschen zu flapsig hingeschmissen!
Dachte, dass aus dem vorher Gesagten hervorgeht, dass der Open relativ flott geht und ich auch damit zufrieden bin (um die 10 Sekunde herum, je nach Rechner)
Nur bei diesem kurzen Ausflug mit ADO dauerte es plötzlich solange, daher der Krisenanfall ... :?

globetrotter77 1. Feb 2009 20:51

Re: ClientDataSet - wie kann man Indizes verwenden?
 
Zitat:

Zitat von mkinzler
Es braucht numnal eine Weilchen, die ganze Tabelle in den Hauptpsiecher zu laden. Deshalb sollte man das ja nicht machen

Soweit ich mittlerweile weiß, holt das ClientDataSet doch IMMER die gesamte Tabelle, ohne dass ich darauf Einfluss nehmen kann, oder?

PS: Der Open dauert mir im Normalfall ja auch gar nicht zu lange, sondern die Indizes sind nicht greifbar. Ich kann sie zwar bei jedem Programmstart neu aufbauen, aber dafür brauche ich natürlich schon die ganze Tabelle.

globetrotter77 1. Feb 2009 21:00

Re: ClientDataSet - wie kann man Indizes verwenden?
 
Zitat:

Zitat von omata
Was zeigt denn dein Ablaufplan an, werden dort Indiezes verwendet?

Irgendwie scheine ich mich falsch auszudrücken ... mit dem Ablaufplan hat das überhaupt nichts zu tun.
Es ist vorhersehbar, dass ich mit unterschiedlichen Sortierungen arbeiten muss.
Deshalb sind auch verschiedene Indizes in der Datenbank definiert.

Die Frage war ganz einfach:
Wie kann man diese Indizes verwenden?
Ich finde einfach keine Möglichkeit.

Langsam, aber sicher beschleicht mich der Verdacht, dass die eingesetzte IDE einfach nicht geeignet ist hierfür. War wohl eine Fehleinschätzung, dass ich dachte, das auch mit der Turbo-Explorer-Variante machen zu können.
Schade!

omata 1. Feb 2009 21:07

Re: ClientDataSet - wie kann man Indizes verwenden?
 
Das liegt nicht an der IDE.

Das sieht in den einzelnen Versionen überall gleich aus.
Der Ausführungsplan zeigt dir aber an, ob Firebird einen Index verwendet, dafür waren die Links, die ich angegeben habe.

Naja, du wirst das schon hinbekommen.

Edit: Ich habe auch verschiedene Zugriffsmethoden ausprobiert (ZEOS, dbExpress), beides gleich. Deshalb nochmal die Frage, was zeigt die Statistik der Indiezes an. Sind die überhaupt aktuell berechnet. Ich weiss jetzt kommt wieder, ich kann das in Delphi nicht auswählen...

globetrotter77 1. Feb 2009 21:52

Re: ClientDataSet - wie kann man Indizes verwenden?
 
Natürlich kommt das wieder!
Ich will direkte Möglichkeiten, zuzugreifen.
Abgesehen davon sehe ich auch sehr deutlich, was passiert, ohne irgendwelche Ausführungspläne zu analysieren.
Wüsste allerdings auch nicht sofort, wie ich an die Ausführungspläne komme, das gebe ich zu.
Aber damit könnte ich ja auch nur das aktuelle Problem ein bisschen besser einkreisen. Stattdessen denke ich eben lieber voraus und versuche, zu verstehen, wie ich grundsätzlich, also auch bei zukünftigen Projekten, vorgehen kann.

PS: Wenn ich sage, dass es an der IDE liegt, meine ich damit, dass es eben doch ein ziemlicher Nachteil ist, keine Fremdkomponenten einbinden zu können (oder nur sehr umständlich).
Grundsätzlich ist Turbo Delphi ein super Produkt, keine Frage!

omata 1. Feb 2009 21:55

Re: ClientDataSet - wie kann man Indizes verwenden?
 
Was mir gerade noch einfällt...
Wie sollen die verschiedenen Sortierungen umgesetzt werden?
Steht eigentlich der CommandTyp auf ctQuery oder auf ctTable?
Wird beim Umschalten auf eine neue Sortierung eine neue Datenbankabfrage gestartet?
Wenn ja, wieso ist dann ein Index in der Anwendung interressant? Dann ist doch nur wichtig, dass die Datenbank den Index kennt und ihn benutzt.

globetrotter77 1. Feb 2009 22:20

Re: ClientDataSet - wie kann man Indizes verwenden?
 
Um Himmels willen, nein!
Natürlich will ich nicht jedes Mal eine neue DB-Anfrage starten.
Deswegen steht der Commandtyp hierfür auch auf ctTable.
Im Augenblick behelfe ich mir, indem ich die in Frage kommenden Indizes beim Design von Hand eintrage und beim Programmlauf IndexName umstelle.
Geht aber, wie gesagt, immer erst bei der zweiten Benutzung des Index recht flott.
Wenn ich dann in die Detailbearbeitung gehe, brauche ich natürlich auch ctQuery.

hoika 2. Feb 2009 07:13

Re: ClientDataSet - wie kann man Indizes verwenden?
 
Hallo,

noch mal zum verständis.
Ein TClientDataSet hält eine Kopie der aktuellen Daten im Speicher.

Von welcher Datenbank die Daten kommen, ist ihm egal.
Man kann es auch per hand (lokal) füllen.

Ein Index ist eine interne Datenstruktur, je nach DB verschieden.

Aus diesem Grund kann das TClientDataSet keinen Firebird-Index benutzen.

Der Weg, Indizes im TClientDataSet zu erzeugen ist der richtige Weg.
Persistente Indizes machen aber keinen Sinn, die würden lokal angelegt.

Wenn du in ZEOS die Query benutzt, ohne TClientDataSet, sollte es funktionieren.
Ob das in der Turbo-Variante überhaupt geht, weiss ich allerdings nicht.


Heiko

globetrotter77 2. Feb 2009 08:15

Re: ClientDataSet - wie kann man Indizes verwenden?
 
Zitat:

Zitat von hoika
noch mal zum verständis.
Ein TClientDataSet hält eine Kopie der aktuellen Daten im Speicher.

Von welcher Datenbank die Daten kommen, ist ihm egal.
Man kann es auch per hand (lokal) füllen.

Soweit habe ich es bisher auch verstanden.

Zitat:

Ein Index ist eine interne Datenstruktur, je nach DB verschieden.

Aus diesem Grund kann das TClientDataSet keinen Firebird-Index benutzen.

Der Weg, Indizes im TClientDataSet zu erzeugen ist der richtige Weg.
Das verstehe ich nicht! Ich will doch nicht wissen, wie der Index DB-intern verwaltet wird, sondern nur die in der DB verwalteten Indizes nutzen. Wenn ich das nun programmintern wieder neu definieren muss, sind die Fehler doch schon vorprogrammiert.

Zitat:

Persistente Indizes machen aber keinen Sinn, die würden lokal angelegt.
Was meinst du in diesem Fall mit "lokal"? Ich brauche die ganze DB nur lokal.

Zitat:

Wenn du in ZEOS die Query benutzt, ohne TClientDataSet, sollte es funktionieren.
Ob das in der Turbo-Variante überhaupt geht, weiss ich allerdings nicht.
Dummerweise kann man in der Turbo-Variante eben keine Fremdkomponenten einbinden bzw. nur sehr umständlich. Und wenn das gerade bei den DB-Komponenten erforderlich ist, wird es schon sehr kompliziert. Ich will gar nicht wissen, wie lange ich gebraucht hätte für das, was ich bisher ausgetestet habe nur zu diesem Thema ... :cry:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:42 Uhr.
Seite 7 von 10   « Erste     567 89     Letzte »    

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