Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi TClientDataSet: zu langsam! Alternative? (https://www.delphipraxis.net/87471-tclientdataset-zu-langsam-alternative.html)

Reinhold_P 1. Mär 2007 07:20

Datenbank: Oracle • Version: 10g • Zugriff über: SQLDirect

TClientDataSet: zu langsam! Alternative?
 
Hallo,

ich verwende ein TClientDataSet um im Arbeitspeicher die Datensätze einer Tabelle zu cachen (readonly).

Das Einfügen der Datensätze in das TClientDataSet dauert zu lange.
Fügen über TQuery > TDataSetProvider > TClientDataSet ein. (SQLDirect statt BDE)

Hat jemand eine bessere Komponente? Oder muss ich ein Array programmieren?

Danke.
Reinhold P.

daddy 1. Mär 2007 09:23

Re: TClientDataSet: zu langsam! Alternative?
 
Was genau dauert denn zu lange? Das Speichern im ClientDataSet oder das anschließende Übertragen an die Datenbank? Ich arbeite selber mit ClientDataSets (allerdings verbunden mit einem Firebird-Server) und stelle da keine Probleme fest.

Reinhold_P 1. Mär 2007 09:32

Re: TClientDataSet: zu langsam! Alternative?
 
- Die Daten werden von der Datenbank einmal in das TClientDataSet eingefügt.
- Der Zugriff erfolgt auf die Daten erfolgt dann mehrmals auf das TClientDataSet.
- Die Daten werden nicht verändert und auch nicht an die Datenbank zurückgeschrieben.

Das Einfügen der Datensätze in das ClientDataset (abhängig von Filterparameter bis zu 1000 Datensätze) dauert lange. Die Datenbankabfrage ist sehr schnell.

Ich hoffe, die Beschreibung erklärt den Ablauf.

Danke für die Hilfe.

Reinhold P.

daddy 1. Mär 2007 09:45

Re: TClientDataSet: zu langsam! Alternative?
 
Also wenn ich es richtig verstanden habe, dauert das Laden der ca. 1.000 Datensätze zu lange. Hierzu folgende Anregungen bzw. Anmerkungen:

1. Was heißt denn eigentlich lange?
2. Wie viele Datensätze enthält die Ursprungstabelle?
3. Du schreibst, Du arbeitest mit Filtern. Ich nehme an, es handelt sich um Filter im ClientDataSet. Meines Erachtens ist das Filtern im zugrundeliegenden Query effektiver. Also lieber im ursprünglichen Select eine entsprechende Where-Klausel deklarieren und die Client-Menge nicht weiter filtern. Oder gäbe es hierbei Probleme im Kontext Deines Programms?

f.siebler 1. Mär 2007 10:00

Re: TClientDataSet: zu langsam! Alternative?
 
welche art von daten hast du da? wie groß sind die tabellen usw...? ein paar mehr infos wären schon nicht schlecht. im bezug auf die filter kann ich mich nur meinem vorredner anschließen, die sql abfrage einzuschränken, also in der db zu filtern ist um welten schneller als es im tclientdataset zu machen.

Frickler 6. Mär 2007 17:33

Re: TClientDataSet: zu langsam! Alternative?
 
Zitat:

Zitat von Reinhold_P
- Die Daten werden von der Datenbank einmal in das TClientDataSet eingefügt.
- Der Zugriff erfolgt auf die Daten erfolgt dann mehrmals auf das TClientDataSet.
- Die Daten werden nicht verändert und auch nicht an die Datenbank zurückgeschrieben.

Wenn Du die Daten nicht zurückschreiben musst, würde ich empfehlen, bei dem ClientDateSet die Property "LogChanges" auf FALSE zu setzen (bevor Du Daten einfügst). Geht dann viel schneller.



Der Frickler

Peinhard 7. Mär 2007 08:28

Re: TClientDataSet: zu langsam! Alternative?
 
Wenn es dir nur um das Cachen zur Laufzeit geht, ohne die erweiterten Möglichkeiten des TClientDataSet zur 'Rücksynchronisation', dann würde ich mir auch mal reine MemDataSets wie zB TkbmMemTable (Freeware, SourceForge) oder TdxMemData (DeveloperExpress) ansehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:44 Uhr.

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