AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Alle Daten von einem Dataset in ein anderes kopieren???
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Henryk · begonnen am 16. Feb 2003 · letzter Beitrag vom 17. Feb 2003
Antwort Antwort
Henryk

Registriert seit: 8. Jan 2003
27 Beiträge
 
#1

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

  Alt 16. Feb 2003, 23:16
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
  Mit Zitat antworten Zitat
xbu58

Registriert seit: 10. Dez 2002
Ort: Bäretswil / Schweiz
121 Beiträge
 
Delphi 7 Enterprise
 
#2
  Alt 17. Feb 2003, 06: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
  Mit Zitat antworten Zitat
Henryk

Registriert seit: 8. Jan 2003
27 Beiträge
 
#3

Also mal konkret zum Aufbau

  Alt 17. Feb 2003, 10:10
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
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#4
  Alt 17. Feb 2003, 12: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
  Mit Zitat antworten Zitat
GuGl

Registriert seit: 30. Okt 2002
4 Beiträge
 
Delphi 5 Professional
 
#5
  Alt 17. Feb 2003, 17:03
per SQL gehts am schnellsten mit:

Insert into TABLE2 select * from TABLE1

Gruß, GuGl
  Mit Zitat antworten Zitat
Henryk

Registriert seit: 8. Jan 2003
27 Beiträge
 
#6

Danke euch!

  Alt 17. Feb 2003, 23:52
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
  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 12:31 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