Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   ADO und Clientdataset sehr langsam (https://www.delphipraxis.net/156375-ado-und-clientdataset-sehr-langsam.html)

Rainer Wolff 30. Nov 2010 07:34

Datenbank: SQL Server • Version: 2008 • Zugriff über: ADO

ADO und Clientdataset sehr langsam
 
Hallo,

ich versuche, eine größere Menge von Daten aus einem SQL-Server in einem Grid anzuzeigen. Dabei verwende ich momentan ADOQuery und Clientdataset. Diese Kombination ist aber sehr langsam, wie ich festgestellt habe.

Ich habe zum Vergleich die selben 20000 Datensätze auf einem Firebird-Server und auf einem SQL-Server angelegt.
Öffnen des Clientdataset bei Firebird: 0,36 s
Öffnen des Clientdataset bei ADO: 5,8 s
Öffnen der ADOQuery direkt ohne Clientdataset: 0,17s

Wer kann mir einen Tip geben warum das so ist und wie ich es optimieren kann. Clientdataset würde ich eigentlich gern beibehalten, da ich das selbe Anzeigeformular bisher mit Firebird verwendet habe und weiter verwenden möchte und dabei nur die Query-Logik dahinter austauschen möchte.
Alternativ könnte ich klar neu auf ADOQuerys aufbauen, aber das möchte ich eigentlich vermeiden.

Gruß Rainer

Bernhard Geyer 30. Nov 2010 08:55

AW: ADO und Clientdataset sehr langsam
 
Welche CurserLocation wird bei ADO verwendet? Sollte clUseClient sein.

Rainer Wolff 30. Nov 2010 09:07

AW: ADO und Clientdataset sehr langsam
 
Ist auch dlUseClient.

Ich habe für mein Testprojekt alle Komponenten mit den Standardeinstellungen aufs Formular gezogen und inzwischen versucht, ein paar Einstellungen zu variieren, allerdings ohne Erfolg.

jobo 30. Nov 2010 09:41

AW: ADO und Clientdataset sehr langsam
 
Ich nehme an, Du hast einen wichtigen Grund, ADOQuery und Clientdataset gemeinsam zu verwenden? Warum reicht ADOQuery nicht?
Werden 20000 DS zu Testzwecken geladen oder ist das ein Standardanwendungsfall?

Rainer Wolff 30. Nov 2010 10:19

AW: ADO und Clientdataset sehr langsam
 
Zitat:

Zitat von jobo (Beitrag 1064980)
Ich nehme an, Du hast einen wichtigen Grund, ADOQuery und Clientdataset gemeinsam zu verwenden? Warum reicht ADOQuery nicht?
Werden 20000 DS zu Testzwecken geladen oder ist das ein Standardanwendungsfall?

Ich wusste ja fast, daß die Frage mit der Datensatzzahl kommt :-D.

Es geht um eine Erfassung von Störmeldungen, darüber wird anschließend eine Auswertung gelegt, einmal die Einzelstörungen, aber dann auch aufsummiert oder nach Tagen gruppiert.

Das ganze läuft seit Jahren mit Firebird, jetzt hab ich aber SQL Server für eine Anwendung vorgegeben.
Ich wollte eigentlich nur die IBQuery gegen eine ADOQuery austauschen und den Rest lassen, wie er ist (Sortieren in der Tabelle übers Clientdataset z.B.).
Und hier fall ich eben mit der Geschwindigkeit auf die Schnauze.
Ich sehe auch noch andere Optionen (z.B. mit den dbExpress-Komponenten geht das ganze viel fixer, aber dann kommt der Kollege mit dem Turbo-Delphi nicht an das Projekt, oder eben direkt die ADOQuery anzeigen, aber dann muss ich meine Auswertung stärker umkrempeln und bin weg von meinem Standardformular), daher hoffe ich noch auf eine Lösung mit den eingesetzen Komponenten. Und sicherlich kann ich auch Einschränkungen machen um die Anzahl der Datensätze zu reduzieren, aber das bedeutet eben auch ein paar Änderungen mehr als ich eigentlich machen wollte.

Rainer

jobo 30. Nov 2010 10:47

AW: ADO und Clientdataset sehr langsam
 
Ich würde immer versuchen, solche Datenmengen im Client zu vermeiden. Für Zählen und Gruppieren ist der Server da. Kenne mich nicht mit MS SQL aus, aber vlt. hilft Dir das hier weiter:
http://www.databasejournal.com/featu...erver-2008.htm

(Inbesondere rollup/cube, grouping sets, ..)


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:10 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