Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi CLientDataset ApplyUpdates sehr langsam (https://www.delphipraxis.net/121839-clientdataset-applyupdates-sehr-langsam.html)

Pluto 5. Okt 2008 20:04

Datenbank: Access, Paradox • Version: 7 • Zugriff über: SQL

CLientDataset ApplyUpdates sehr langsam
 
Hallo,

Ich habe eine Access Tabelle mit ca. 20000 Einträgen nach Paradox exportiert.
Dabei ist es mir nicht gelungen, die Sonderzeichen (ä,ü,ß, etc.) sauber zu übertragen.
Meine Lösung: Ich übertrage die exportierte Paradox-Tabelle in ein ClientDataset.
Mit einer Stringroutine finde ich dann in jedem Rekord in allen Stringfeldern
die Sonderzeichen und ersetze sie mit den für Paradox lesbaren Zeichen.
Das geht recht schnell (12 Sekunden), da alles im Memory abläuft.
Damit habe ich im Clientdataset eine fehlerfrreie Paradoxtabelle, die ich auch in einem
StringGrid kontrollieren kann. :-D

Wenn ich dann anschließend ClientDataset.ApplyUpdates(-1) aufrufe, dann dauert das
endlos lange. Ich dachte zuerst, das Programm hätte sich aufgehängt, aber nach 7 Minuten ! :pale:
war alles einwandfrei übertragen.

Kennt jemand eine Möglichkeit, wie man das beschleunigen kann?
Dank im Voraus für jede Hilfe und Anregung.

mr2 5. Okt 2008 20:40

Re: CLientDataset ApplyUpdates sehr langsam
 
Hallo,

Du solltest einfach innerhalb Deiner ersten Schleife alle ca. 200 Datensätze ApplyUpdates aufrufen.
Alternativ würde ich vorschlagen solche "Einmalaktionen" nicht über ClientDataSets abzuwicklen, sondern direkt mittels TQuery etc.

mr2

Pluto 5. Okt 2008 22:43

Re: CLientDataset ApplyUpdates sehr langsam
 
Hallo mr2

Dank für Deinen Tipp. Leider dauert die Schleife dann auch 7 Minuten, wenn ich
nach allen 200 records ApplyUpdates aufrufe.

Es handelt sich auch nicht um "Einmalaktionen", sondern um Daten wie Bankleitzahlen,
Postleitzahlen und Ähnliches, die ich nur als Access-Dateien im Internet gefunden
habe. Diese Daten müssen einmal im Monat im Anwendungsprogramm upgedated werden.

ClientDataset hat den echten Vorteil, daß die Konvertierung der Umlaute damit sehr
schnell abläuft. Als nächstes werde ich versuchen mit einer Schleife alle Datensätze aus
ClientDataset direkt auszulesen und mit Append in eine Paradox Tabelle einzulesen.

Aber vielleicht hat jemand noch eine bessere Lösung??

Pluto 6. Okt 2008 19:56

Re: CLientDataset ApplyUpdates sehr langsam
 
Hallo an Alle die es interessiert,

Problem gelöst.
Ich lese aus dem Clientdataset die Struktur aus und erzeuge damit dynamisch
eine leere Paradoxtabelle mit gleicher Struktur. Dann habe ich mit einer while
not EOF Schleife alle Datensätze von dem CDS in die Tabelle kopiert. Das
dauerte 75 Sekunden.
Eigentlich erstaunlich: ApplyUpdates muss ja nur die geänderten Felder übertragen
und braucht dafür 7 Minuten.

Vielleicht liest dies auch ein Delphi Guru, der mir erklären kann, warum ApplyUpdates
so langsam ist.

hoika 7. Okt 2008 01:53

Re: CLientDataset ApplyUpdates sehr langsam
 
Hallo,

1. falsche Datenbank
jaja, musste sein ;)

2. ApplyUpdates prüft wohl jeden der 20000 Datensätze vor dem Speichern,
ob sich was geändert hat
dein while not EOF wohl nicht (?)


Heiko


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