Delphi-PRAXiS
Seite 1 von 10  1 23     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)

globetrotter77 29. Jan 2009 07:59

Datenbank: Firebird • Version: 2.1 • Zugriff über: SQLConnection

ClientDataSet - wie kann man Indizes verwenden?
 
Hallo!

Bin ich zu doof dafür, oder gibt es wirklich gar keine Möglichkeit, mit TClientDataSet auf die in der DB definierten Indizes zurückzugreifen?

Zitat aus der Hilfe:
Es gibt drei Möglichkeiten, einer Client-Datenmenge einen neuen Index hinzuzufügen:
1) Die Eigenschaft TCustomClientDataSet.IndexFieldNames verwenden
... Diese Indizes bleiben nicht erhalten, wenn Sie die Datenmenge schließen ...
2) TCustomClientDataSet.AddIndex aufrufen
... Mit AddIndex erstellte Indizes werden beim Schließen der Client-Datenmenge nicht beibehalten ...
3) Die Eigenschaft TCustomClientDataSet.IndexDefs verwenden
... Als dritte Möglichkeit können Sie einen Index zu dem Zeitpunkt erstellen, zu dem die Client-Datenmenge erzeugt wird ...
... Auf diese Weise erzeugte Indizes sind persistent und werden gespeichert, ...

Sieht so aus, als käme nur Variante 3 in Frage. Aber merkwürdigerweise werden diejenigen Indizes, die bereits in der DB vorhanden sind, überhaupt nicht berücksichtigt. Heißt das nun, dass ich alle DB-Definitionen nicht mehr mit einem DB-Tool durchführen kann, sondern mit Delphi selber stricken muss?

Das widerspricht ja schon ein bisschen dem Prinzip der Trennung von Daten und Programm, oder?

Was käme denn statt ClientDataSet noch in Frage?

Danke im Voraus

Harald


PS: ich verwende Turbo Delphi Explorer

globetrotter77 29. Jan 2009 18:43

Re: ClientDataSet - wie kann man Indizes verwenden?
 
ich heb das noch mal nach oben ...

wie ist die Formulierung aus der Hilfe unter Punkt 3) nun wirklich zu verstehen?
Delphi-Quellcode:
3) Die Eigenschaft TCustomClientDataSet.IndexDefs verwenden
... Als dritte Möglichkeit können Sie einen Index zu dem Zeitpunkt erstellen, zu dem die Client-Datenmenge erzeugt wird ...
... Auf diese Weise erzeugte Indizes sind persistent und werden gespeichert, ...

Ich hätte gedacht, dass "IndexDefs verwenden" heißt, man kann über die IndexDefs den passenden Index auswählen. So wie sonst eben auch. Geht aber nicht.
Bedeutet im Klartext vermutlich auch, dass eine der wichtigsten Eigenschaften einer DB nicht genutzt werden kann.
Oder habe ich nur etwas übersehen???

mkinzler 29. Jan 2009 19:09

Re: ClientDataSet - wie kann man Indizes verwenden?
 
Nicht auswählen sondern erzeugen

globetrotter77 29. Jan 2009 19:16

Re: ClientDataSet - wie kann man Indizes verwenden?
 
wann erzeugen???

ich habe ne Datenbank, die im aktuellen Fall ca. 100000 Datensätze enthält, über die ich mehrere Indizes legen will (eben, weil es so viele sind).

Das will ich genau einmal machen, aber wie?

globetrotter77 29. Jan 2009 19:19

Re: ClientDataSet - wie kann man Indizes verwenden?
 
sorry, soll natürlich heißen:
nicht die Datenbank, sondern eine Tabelle aus der Datenbank enthält ca. 100000 Sätze.
In anderen Fällen können es auch mal 500000 sein.
Da will man die Indizes natürlich auf Dauer erhalten wissen.

mkinzler 29. Jan 2009 19:20

Re: ClientDataSet - wie kann man Indizes verwenden?
 
Delphi-Quellcode:
<ds>.IndexDef.Add()

globetrotter77 29. Jan 2009 19:27

Re: ClientDataSet - wie kann man Indizes verwenden?
 
IndexDefs.Add kenne ich schon, aber was ist denn der Unterschied zwischen einem selbst (also vom eigenen Programm) generierten und einem fremdgenerierten Index. Die Indizes sind ja schon da, aber warum sehe ich sie nicht??

Thomas F 29. Jan 2009 19:40

Re: ClientDataSet - wie kann man Indizes verwenden?
 
Ich hab mal ne Datenbank mit Clientdataset erstellt, und man konnte die Spalten
sortieren , indem man oben auf den Spaltennamen geklickt hat.

Das war dieser Code

Delphi-Quellcode:
procedure TForm1.DBGrid2TitleClick(Column: TColumn);
begin
  try
   ClientDataset2.IndexFieldNames := Column.FieldName;
  except
    ShowMessage('Das Feld kann nicht sortiert werden' + Column.FieldName);
end;
end;

globetrotter77 29. Jan 2009 19:52

Re: ClientDataSet - wie kann man Indizes verwenden?
 
@Thomas:

richtig! das geht auch wunderbar, aber ab einer bestimmten Größe dauert es einfach zu lange, weil der Index nach jedem Programmstart wieder neu aufgebaut werden muss.
Dauert bei 100000 Sätzen zwar immer noch "nur" ca. 5 Sekunden, aber das gilt für jeden Index.
Hat man also mehrere Indizes zu verwalten und evtl. noch mehr Datensätze, dann wird es irgendwann einmal unzumutbar für den Benutzer.
Deshalb gibt es ja auch normalerweise bei einer DB die Möglichkeit, einen Index nachträglich hinzuzufügen, um so Performance-Gewinne herauszuholen.
Der beste Performance-Gewinn hilft aber nicht weiter, wenn man das immer wieder neu machen muss.
:cry:

Harald

Thomas F 29. Jan 2009 20:14

Re: ClientDataSet - wie kann man Indizes verwenden?
 
Da kenn ich mich leider nicht aus.

Vielleicht ne andere Datenbank nehmen, die für große Datenmengen besser geeignet ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:15 Uhr.
Seite 1 von 10  1 23     Letzte »    

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