AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Objekt klonen (hier: TClientDataSet)

Ein Thema von Majortomster · begonnen am 20. Mai 2005 · letzter Beitrag vom 23. Mai 2005
Antwort Antwort
Majortomster

Registriert seit: 11. Mai 2005
27 Beiträge
 
#1

Objekt klonen (hier: TClientDataSet)

  Alt 20. Mai 2005, 16:03
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....
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Objekt klonen (hier: TClientDataSet)

  Alt 20. Mai 2005, 16:09
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Majortomster

Registriert seit: 11. Mai 2005
27 Beiträge
 
#3

Re: Objekt klonen (hier: TClientDataSet)

  Alt 20. Mai 2005, 16:18
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
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Objekt klonen (hier: TClientDataSet)

  Alt 20. Mai 2005, 16:32
du kannst mal das hier versuchen:

Delphi-Quellcode:
var obj1,obj2:TDummy;
obj1:=TDummy.create;
obj2:=obj1;
also es vor(!)dem createn einfach zuzuweisen. ob das eine echte kopie ergibt, weiss ich leider nicht genau.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Majortomster

Registriert seit: 11. Mai 2005
27 Beiträge
 
#5

Re: Objekt klonen (hier: TClientDataSet)

  Alt 23. Mai 2005, 08:25
Das hab ich auch schon versucht - funktioniert nicht
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Objekt klonen (hier: TClientDataSet)

  Alt 23. Mai 2005, 08:49
Assign() und Copy()?

Ich weiß zwar nicht was du so vor hast, aber eventuell solltest du mal die BDN-Artikel von Cary Jensen zum Thema lesen und dann nochmal neu anfangen.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Objekt klonen (hier: TClientDataSet)

  Alt 23. Mai 2005, 08:56
Zitat von DGL-luke:
du kannst mal das hier versuchen:

Delphi-Quellcode:
var obj1,obj2:TDummy;
obj1:=TDummy.create;
obj2:=obj1;
Autsch! Das was du da vorschlägst funktioniert bei Objekten nicht. obj2 bekommt die gleiche Referenz wie obj1. D.h. du hast jetzt 2 Zeiger auf das gleiche Objekt. Wenn obj1 und obj2 ein record wären, würde es funktinieren, da dann das Record kopiert würde.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#8

Re: Objekt klonen (hier: TClientDataSet)

  Alt 23. Mai 2005, 12:40
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
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#9

Re: Objekt klonen (hier: TClientDataSet)

  Alt 23. Mai 2005, 13:07
@Majortomster warum willst du dein eigentlich den TClientDataSet kopieren ????
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
Neuromancer

Registriert seit: 8. Aug 2003
62 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Objekt klonen (hier: TClientDataSet)

  Alt 23. Mai 2005, 15:17
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:
Mit Clone können Sie dem Recordset-Objekt der aufrufenden ADO-Datenmenge eine exakte Kopie des Recordset einer anderen TCustomADODataSet
-Komponente zuweisen. Verläuft die Operation erfolgreich, sind beide Recordsets identisch. Tritt ein Fehler auf, wird das Recordset-Objekt auf nil (Delphi) odr NULL (C++) gesetzt und eine EADOError-Exception ausgelöst.
Im Übrigen habe ich mit ADO weit bessere Erfahrungen als mit MyBase gemacht. Spätestens ab 20.000 Records fängt CDS nämlich an, kräftig zu lamen.
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...

Gruß
  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 19:44 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