![]() |
ObjectList.Assign klappt nicht immer.
Liste der Anhänge anzeigen (Anzahl: 2)
Hi,
ich habe eine etwas merkwürdiges Problem. Ich versuche das mal zu beschreiben. Ich habe eine ObjectList (Gruppen: TGruppenList) mit Objecten, die ihrerseits wiederum eine ObjectList (Mitarbeiter: TMitarbeiterlist) beinhalten. Nun will ich folgendes machen: Die Daten eines Objects von Guppen samt Mitarbeiter an ein Unterformular weitergeben, dort ggf. bearbeiten und dann ggf. wieder zurückspeichern. Die Variablen der vom Gruppenelement übergebe ich in Editfelder und die Objectlist Mitarbeiter übergebe ich in eine eigene ObjectList des Bearbeitungsformulars. Ist die MitarbeiterList zu beginn leer funktioniert es auch so, wie erwartet. Sind dort aber schon Objecte vorhanden, so werden diese zwar an Bearbeitungsformular übergeben, aber kommen leer wieder zurück. Ist ein bischen blöd zu bescheiben, deswegen mal ein bischen Source. Der Aufruf der Berabeitungsform:
Delphi-Quellcode:
Die Units, in denen die ObjectListen erstellt werden, lege ich mal als Anhang bei.
frm_gruppebearbeiten.guid:=frm_main.gruppen[0].guid;
frm_gruppebearbeiten.edt_name.Text:=frm_main.gruppen[0].name; frm_gruppebearbeiten.edt_grnr.Text:=frm_main.gruppen[o].grnr; frm_gruppebearbeiten.mmo_beschreibung.Lines.Text:=frm_main.gruppen[0].Beschreibung; frm_gruppebearbeiten.mitglieder.Assign(frm_main.gruppen[0].Mitglieder); //<-- Das Funktioniert, ich kann auf die Daten in Unterform zugreifen if frm_gruppebearbeiten.ShowModal=mrOk then begin frm_main.gruppen[0].name:=frm_gruppebearbeiten.edt_name.Text; frm_main.gruppen[0].Beschreibung:=frm_gruppebearbeiten.mmo_beschreibung.Lines.Text; frm_main.gruppen[0].Mitglieder.Clear; //<-- Hab ich mal hinzugefügt, bringt aber keine Änderung frm_main.gruppen[0].Mitglieder.Assign(frm_gruppebearbeiten.mitglieder); //<-- Hier werden die Daten wohl nicht richtig zurückgegeben. // Es sind zwar alle Elemente vorhanden, aber sie sind leer. frm_main.gruppen[0].SaveToDB; LeseGruppen(True); end; Ich habe bestimmt irgendwo einen Fehler gemacht, aber ich finde den einfach nicht. Soweit ich weiß erstellt Assign ja eine Kopie der Object. Demnach müßte es ja eigentlich funktionieren. |
AW: ObjectList.Assign klappt nicht immer.
Wäre ja gut wenn TMitarbeiter eine Assign-Methode hätte.
|
AW: ObjectList.Assign klappt nicht immer.
Wieso?
Reicht nicht das Assign, was TObjectList für TMitarbeiterList bereitstellt? |
AW: ObjectList.Assign klappt nicht immer.
Damit wird ja nur die Liste der Pointer kopiert. Für die einzelnen Objekte musst Du dann ein eigenes Assign erstellen und ggf. aufrufen.
|
AW: ObjectList.Assign klappt nicht immer.
Ich hatte das aus der Hilfe:
Zitat:
|
AW: ObjectList.Assign klappt nicht immer.
In der Liste stehen aber nur die Pointer auf die darüber referenzierten Instanzen, NICHT die Instanzen selbst. Daher ist die Aussage in der Hilfe schon richtig: Da nur die Pointer in der Liste sind, werden auch nur diese kopiert. Willst du die Instanzen duplizieren, musst du das selbst tun.
|
AW: ObjectList.Assign klappt nicht immer.
@Captnemo
Assign ist nicht Assign, das ist evtl. das Problem. Was ein Assign der jeweiligen Klasse kopiert, das hängt von der Klasse ab. An besten immer in den Quellcode gucken. |
AW: ObjectList.Assign klappt nicht immer.
In dem Fall wären Deine Mitarbeiter besser bei TPersistent aufgehoben. Dann machst Du die Zuweisungen genau wie in Deiner DB-Speicherroutine.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:45 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