AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi CLientDataset ApplyUpdates sehr langsam
Thema durchsuchen
Ansicht
Themen-Optionen

CLientDataset ApplyUpdates sehr langsam

Ein Thema von Pluto · begonnen am 5. Okt 2008 · letzter Beitrag vom 7. Okt 2008
Antwort Antwort
Pluto

Registriert seit: 30. Nov 2005
Ort: Dietzenbach
53 Beiträge
 
Delphi 7 Enterprise
 
#1

CLientDataset ApplyUpdates sehr langsam

  Alt 5. Okt 2008, 20:04
Datenbank: Access, Paradox • Version: 7 • Zugriff über: SQL
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.

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 !
war alles einwandfrei übertragen.

Kennt jemand eine Möglichkeit, wie man das beschleunigen kann?
Dank im Voraus für jede Hilfe und Anregung.
begin
if Aufwand > Ergebnis then exit;
end;
  Mit Zitat antworten Zitat
mr2

Registriert seit: 3. Mai 2003
140 Beiträge
 
Delphi 2006 Enterprise
 
#2

Re: CLientDataset ApplyUpdates sehr langsam

  Alt 5. Okt 2008, 20:40
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
"... we know, there are known knowns; there are things we know we know. We also know there are known unknowns; that is to say we know there are some things we don't know. But there are also unknown unknowns - the ones we don't know we don't know."
  Mit Zitat antworten Zitat
Pluto

Registriert seit: 30. Nov 2005
Ort: Dietzenbach
53 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: CLientDataset ApplyUpdates sehr langsam

  Alt 5. Okt 2008, 22:43
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??
begin
if Aufwand > Ergebnis then exit;
end;
  Mit Zitat antworten Zitat
Pluto

Registriert seit: 30. Nov 2005
Ort: Dietzenbach
53 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: CLientDataset ApplyUpdates sehr langsam

  Alt 6. Okt 2008, 19:56
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.
begin
if Aufwand > Ergebnis then exit;
end;
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: CLientDataset ApplyUpdates sehr langsam

  Alt 7. Okt 2008, 01:53
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
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:41 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