![]() |
Zwei Objekte einer Klasse werden beide geändert
Hallo Zusammen,
ich habe zwei Objekte, die beide von der gleichen Klasse abstammen. Wenn ich jetzt von einem Objekt eine Variable ändere, dann ändert sich diese Variable auch in dem anderen Objekt. Hintergrund: Ich habe das Objekt Norm: TNorm Ich habe das Objekt Norm_Neu: TNorm Die Daten werden aus der Datenbank in das Objekt Norm und in das Objekt Norm_Neu geladen. Wenn jetzt Daten geändert werden, dann sollen die in den Variablen des Objektes Norm_Neu geändert werden. Wenn gespeichert wird, vergleiche ich die Variablen von Norm und Norm_Neu und mache für die geänderten Variablen das Update-Statement für die Query und protokolliere auch die Änderung. Problem wie gerade schon beschrieben, wenn die Daten in Norm_Neu durch eine Änderung in der Maske geändert werden
Delphi-Quellcode:
, dann ändert sich nicht nur der Wert der jeweiligen Variable in dem Objekt Norm_Neu, sondern auch in dem Objekt Norm.
Norm_Neu.Norm_Titel:=Edit_Norm_Titel.Text;
Ich hoffe das ist verständlich. Hat jemand eine Idee, was ich da falsch mache? Vielen Dank Patrick |
AW: Zwei Objekte einer Klasse werden beide geändert
Wenn Du folgendes machst:
A := TObject.Create; B := TObject.Create; hast Du zwei Objekte (also zwei verschiedene Speicherbereiche). Wenn Du folgendes machst; A := TObject.Create; B := A; hast Du zwei Variablen, die auf das gleiche Objekt zeigen. Hilft Dir das? Ansonsten zeige mal etwas Quelltext... |
AW: Zwei Objekte einer Klasse werden beide geändert
Hallo, dass hilft mir viellecht wirklich schon weiter.
Ich create zwar beide Objekte einzeln,
Delphi-Quellcode:
aber ich habe in der Load-Prozedure
initialization
Norm := TNorm.Create; Norm_Neu:= TNorm.Create;
Delphi-Quellcode:
Norm_Neu:=Norm;
stehen, weil ich dachte, dass ich auf diese Weise die Daten der Variablen am einfachsten von einem Objekt in das andere kopieren könnte. Aber das scheint dann wahrscheinlich der Fehler zu sein. Muss ich, um die ganzen Variablen von einem Objekt in das andere zu bekommen das wirklich eins nach dem anderen rüberschaufeln? Vielen Dank Patrick |
AW: Zwei Objekte einer Klasse werden beide geändert
Prinzipiell schon. Ab TPersistent gibt es 2 Methoden (Assign und AssignTo), die Du dazu überschreiben kannst. Trotzdem musst Du darin dann sagen, was vom Quell- ins Zielobjekt übernommen werden soll. Du musst natürlich nicht zwingend von TPersistent ableiten, sondern kannst Dir auch etwas ähnliches selbst basteln.
|
AW: Zwei Objekte einer Klasse werden beide geändert
Mit dieser Zeile
Delphi-Quellcode:
erzeugst du dir Speicherlecks, da deine Objekt-Referenz auf die Variable Norm überschrieben wird. Bau in deiner DPR-Datei mal die Zeile
Norm_Neu:=Norm;
Delphi-Quellcode:
ein. Somit siehst du, welche Klassen beim Beenden deines Programms nicht sauber wieder freigegeben wurden.
ReportMemoryLeaksOnShutdown := True;
|
AW: Zwei Objekte einer Klasse werden beide geändert
Hallo,
wie werden denn die Daten in den beiden Form angezeigt, durch Datensensitive Controls. Dann könnte es sein, das Norm_neu die Datenbank updated und Norm diese dann auch anzeigt. Grüße Klaus |
AW: Zwei Objekte einer Klasse werden beide geändert
Ich habe jetzt das Problem unschön gelöst, indem ich die Load-Anweisung für beide Objekte durchlaufen lasse.
Da es sich nicht um Forms handelt, sondern nur um Objekte, werden an der Stelle noch keine Daten auf DB geändert. Mit dieser Vorgehensweise läuft es jetzt erst einmal. Vielen Dank für die Hilfe Patrick |
AW: Zwei Objekte einer Klasse werden beide geändert
Zitat:
Mit Norm_Neu:=Norm überträgst Du lediglich den ZEIGER auf die Speicherstelle wo sich die Objektdaten befinden. Wenn Du später beide Objektvariablen auflöst wird der Speicher von Norm wieder freigegeben und kann wieder neu benutzt werden. Der reservierte Speicherplatz für Norm_Neu wird aber nicht mehr freigegeben und es bleibt beim (bzw. bis zum) Programmende blockierter Speicherplatz zurück. Das stört zwar andere Programme nicht, weist aber auf einen Fehler oder zumindest Unsauberkeit im eigenen Programm hin. Zitat:
|
AW: Zwei Objekte einer Klasse werden beide geändert
Ich habe in der Klasse eine Procedure erstellt, in der die Load-Anweisung für beide Objekt nacheinander durchgeführt wird. Jetzt rufe ich überall, wo ich die Daten geladen werdem müssen, diese neue Procedure auf. Ich finde die Lösung nicht so schön, weil ich dadurch das gleiche SQL-Statement auf der Datenbank direkt hintereinander ausführe, nur um die gleichen Daten in zwei unterschiedlichen Objekten verfügbar zu haben.
Was ich mir überlegen könnte, dass ich das SQL-Statement und die Verteilung der Daten in die Variablen des Objektes von einaner trenne. Dann könnte ich die Query nur einmal ausführen und die Daten dannach separat in beide Objekte befüllen... Muss ich mal noch drüber nachdenken. Vielen Dank Patrick |
AW: Zwei Objekte einer Klasse werden beide geändert
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:02 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