![]() |
Objekt klonen (hier: TClientDataSet)
Hallo zusammen,
ich stehe im Moment vor dem Problem, ein TClientDataSet Objekt zu erschaffen, das die exakte Kopie eines anderen Objekts dieses Typs ist. Es ist dabei wichtig, dass es sich dann WIRKLICH zwei mal im Speicher befindet (und keine zwei unterschiedlichen Zeiger auf die gleiche Stelle im Speicher). In Java ist sowas sehr bequem machbar, aber in Delphi bin ich echt am verzweifeln. Hier gibt es keinen Copy-Konstruktor, keine Clone-Methode... (oder hab ich sie einfach nur noch nicht gefunden?) Wie kann ich das anstellen? Bitte helft mir. Grüße, T P.S.: Ich hab mir mal einen Copy-Konstruktor gebastelt, aber irgendwie scheinen die beiden Objekte doch noch miteinander zu tun zu haben, da sich beim zweiten Objekt gewisse Nebeneffekte zeigen wenn ich am ersten bestimmte Dinge ändere.... |
Re: Objekt klonen (hier: TClientDataSet)
bei Delphi-Objecten ist dies in der Regel die "Assign"-Methode. Ob diese auch wirklich funktioniert hängt davon ab ob der Programmierer diese Implementiert hat. Bei den Delphi-Standard-Komponenten sollte dies in dein meisten Fällen wenn nicht sogar immer vorhanden sein.
|
Re: Objekt klonen (hier: TClientDataSet)
Genau die Methode habe ich auch eben grade gefunden :)
Aber wenn ich sie so benutze: ziel.Assign(quelle); // (wobei ziel, quelle vom Typ TClientDataSet) Dann kommt zur Laufzeit eine EConvertError Exception + die Meldung:'TClientDataSet kann nicht zu TClientDataSet zugewiesen werden.' Ich blicke da nicht durch... :/ Gruß, T |
Re: Objekt klonen (hier: TClientDataSet)
du kannst mal das hier versuchen:
Delphi-Quellcode:
also es vor(!)dem createn einfach zuzuweisen. ob das eine echte kopie ergibt, weiss ich leider nicht genau.
var obj1,obj2:TDummy;
obj1:=TDummy.create; obj2:=obj1; |
Re: Objekt klonen (hier: TClientDataSet)
Das hab ich auch schon versucht - funktioniert nicht :?
|
Re: Objekt klonen (hier: TClientDataSet)
Assign() und Copy()?
Ich weiß zwar nicht was du so vor hast, aber eventuell solltest du mal die ![]() Grüße vom marabu |
Re: Objekt klonen (hier: TClientDataSet)
Zitat:
|
Re: Objekt klonen (hier: TClientDataSet)
Ich weiß nicht genau, aber könnte man nicht prinzipiell eine Klasse von TClientDataSet ableiten und davon eine Instanz erzeugen? Dann hat man zwei verschiedene Klassen, mit exakt den selben Eigenschaften und Methoden ;)
|
Re: Objekt klonen (hier: TClientDataSet)
@Majortomster warum willst du dein eigentlich den TClientDataSet kopieren ????
|
Re: Objekt klonen (hier: TClientDataSet)
Hallo,
die Lösung mag ein wenig weit hergeholt sein, aber wie wäre es mit einem Umstieg auf ADO? Das ADODataSet kann (fast) alles, was das CDS auch kann, mit ganz wenigen Ausnahmen: ADT-Felder, Array-Felder und Nested Datasets, wobei ein Nested DataSet mit ca. 10 Zeilen Code sehr schnell nachprogrammiert werden kann. Warum mein Vorschlag? Das ADODataSet besitzt eine Methode namens "Clone". Aus der Hilfe: Zitat:
Mal abgesehen, dass, sobald MyBase mit BLObs arbeitet, es zu der lästigen Fehlermeldung "Im Datensatzpuffer befindet sich ein ungültiges BLOb-Handle" kommen kann, dessen Ursache ich bis heute noch nicht herausgefunden habe. Und bevor jetzt hier in Massen die Augen gerollt werden: Nein, ADO muss nicht unbedingt an eine Connection sprich einen DB-Server geknüpft werden. Es kann durchaus - wie CDS auch - für sich alleine stehen. Alle Eigenschaften, mit der sonst immer so nett für für MyBase geworben wird, beherrscht ADO auch, und meiner Meinung nach sogar besser, umfangreicher und performanter (Speichern auf Platte, Speichern als XML-Datei usw.). Nur wissen das leider die wenigsten.. Und: Nein, ich arbeite nicht bei Microsoft... :zwinker: Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz