Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Alle Daten von einem Dataset in ein anderes kopieren??? (https://www.delphipraxis.net/2980-alle-daten-von-einem-dataset-ein-anderes-kopieren.html)

Henryk 16. Feb 2003 22:16


Alle Daten von einem Dataset in ein anderes kopieren???
 
Hallo!

wie kopiere ich SCHNELL ich den kompletten Inhalt von einem Dataset in ein anderes - inklusive Indizes?

Quasi als ob ich die Daten-Files auf der Platte kopieren wuerde, nur halt auf saubere Art, weil auf die Datenbank mehrere Leute gleichzeitig zugreifen und ich so korrupte Files bekommen koennte...

Ne Schleife von first bis last und dann immer insert + post dauert mir bei der Menge der Datensaetze bissl lang und kommt mir auch nicht sonderlich elegant vor...

Danke!!!

Henryk

xbu58 17. Feb 2003 05:37

Hallo Henryk

Ich kenne keine andere Methode, als Insert und Post um Daten zwischen zwei Dataset's zu kopieren. Diese Methode wird auch in den Memory-Tables angewendet, welche ich von DevExpress einsetze. Diese Methode ist im Normalfall sehr schnell (z.B. für 1000 Datensätze under 2 Sek natürlich abhängig von der Anzahl Felder). Wenn Du jedoch den Kopiervorgang auf ein Dataset machst, welches ein File erstellen muss, dann kann ich mir vorstellen, dass das einige Zeit dauert.

Ich denke aber, dass Dein Ansatz für die Lösung des Multiuser-Problems doch sehr umständlich ist. Es wäre meiner Meinung nach besser, wenn Du eine Multiuser-DB einsetzen würden. Falls Du Kosten sparen musst, kannst Du ja immer noch auch eine Freeware-DB wie z.B. MySQL oder Freebird (heisst glaube ich so) setzen. Diese DB's setzen einen DB-Manager ein, um das Multiuser-Problem zu lösen. Wie gut sie sind weiss ich nicht, da ich selber MS-SQLserver und Sybase SQLAnywhere einsetze. Ich habe jedoch bis jetzt nichts negatives in diesem Zusammenhang gelesen.

Gruss
Xaver

Henryk 17. Feb 2003 09:10

Also mal konkret zum Aufbau
 
HAst Recht! Wir muessen Kosten sparen und haben deshalb folgende Architektur:

Ich benutze ClientDataSets.

Auf dem Server laeuft ein DCOM-Objekt - der Datenbankserver. Dieser enthaelt wieder ClientDataSets mit denen die Clients über einen Provider verbunden sind. Die ClientDataSet auf'm Server greifen schliesslich auf Files zu.

Diese Architektur hat sich bewaehrt, da das lokale Filtern und Sortieren deutlich schneller geht , als mit echten SQL-Anweisungen und ich grosse Datenmengen anzeigen muss.

Beim Kopieren von einem Dataset in ein anderes hat es aber ewig gedauert. Das lag sicher daran, dass ich nach jedem Post ApplyUpdates aufgerufen hab. Das ist natuerlich ein Performance-Killer. Werde ich nachher mal rausnehmen. Vorher brauchte ich aber immer gleich die neue ID der Datesaetze um Verknüpfungen zu erstellen, aber das kann ich jetzt umgehen.

Mal gucken, wie schnell es dann geht...

Ich hatte nur im Internet ein paar Schlagwoerter gelesen: [b]DataPump, BatchMove[/] und so weiter und dachte, da gibt es schon fertige schnelle Funktionen...

Henryk

oki 17. Feb 2003 11:24

Hi,

ich kann noch folgende Tips zusteuern.

Wenn es eine Batchmove oder anderweitige Methode zum lesen/bewegen mehrerer Datensätze gibt lohnt sich auf jeden fall die Suche. Hier werden in der Regel Vorgänge für das Bewegen von Daten zwischen DataSet's im Block durchgeführt, was bedeutend schneller ist.
Zur Not mal nach einer Methode AppendRecord suchen. hier wird zumindest der Kopiervorgang für einen gesamten Record auf einem Hieb durchgeführt und man kann sich auch das anschließende Post sparen. Das ist so richtig auch kein Durchbruch in Bezug auf Geschwindigkeit, aber schon ein bischen schneller.

Gruß oki

GuGl 17. Feb 2003 16:03

per SQL gehts am schnellsten mit:

Insert into TABLE2 select * from TABLE1

Gruß, GuGl

Henryk 17. Feb 2003 22:52

Danke euch!
 
Erstmal Danke für die Antworten!

So richtig bin ich nicht weiter gekommen.

SQL geht ja leider bei den TClientDataSets nicht. AppendRecord muss ich nochmal testen. Auf den ersten Blick hat das aber den Nachteil, dass ich jedesmal verdammt aufpassen muss, wenn ich irgendwie die Datenbankstruktur anpassen muss, weil alle Felder einfach als Parameter üebergeben werden. Trotzdem werde ich's mal testweise einbauen!

Datapump hab ich leider nur in Bezug auf BDE gefunden.

Noch was: Mit welchem Tool kann ich vernuenftig Datenbankstrukturen von ClientDataSets editieren (Felddefinitionen etc.)???

Henryk


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