Ich verwirre Dich wohl mehr als geplant.
Ich war zuletzt davon ausgegangen, dass Du dem Formular alle Daten in Form von Objekten bzw. Objektlisten bereitstellt.
Wenn das Formular zur Anzeige der Daten nochmal auf die Datenbank zugreifen muss, sieht das natürlich noch etwas anders aus.
Dann kannst Du keine Objekte zur Benutzung übergeben sondern tatsächlich die Datensatz-Ids.
Grundsätzlich haust Du m.E. die Datenschicht und die Formularschicht zu sehr durcheinander.
Versuche doch mal, das noch konsequenter zu trennen. Dafür gibt es verschiedene Möglichkeiten. Am einfachsten, alles was die Datenmanipulation betrifft in eine eigene
Unit auslagern.
Dann könntest Du theoretisch alle Änderungen ohne ein Formular durchführen. Z.B. in einer Methode oder über ein Script.
Dann hast Du eine Datenschicht (und Businesslogik), die für sich funktioniert.
Jetzt muss das Formular sich nur noch an diese
Unit wenden und sagen, was es gerade braucht.
Dann kannst Du eine PKW-Liste in Form von kompletten Objekten oder als DataSet übergeben.
Auch kannst Du durch Aufruf bestimmter Methoden Änderungen in der Datenschicht veranlassen.
Jetzt muss den Controls noch gesagt werden, was und wie sie sich zeichnen und verhalten sollen.
Dabei solltest Du aber auf die Zuständigkeiten achten. In einer PKW-Klasse hat m.E. AddNew, Edit(IrgedeineID) und Delete(IrgendeineID) nichts verloren.
Der PKW ist nicht dafür zuständig, irgendwelche Listen zu manipulieren. Er ist ein Objekt und fertig.
Wenn der User in der View, die gerade einen PKW anzeigt, einen neuen PKW in die originalliste hinzufügen können soll, dann muss die View auch die Originalliste kennen. Besser sollte aber AddNew und Delete irgendwie über die Listbox selbst ermöglicht werden (ähnlich einem DBNavigator).
Der PKW sollte üblicherweise auch nicht die Liste kennen, in der er enthalten ist - es sei denn, dies wäre aus dem Datenmodell heraus sinnvoll (Sohn muss seinen Vater kennen).
Delphi-Quellcode:
TPKW = Class(TObject,IDetail)
PRIVATE
ffarbe : Tcolor;
fleistung: Integer;
fmarke : TPKWMarke;
fstatus: integer;
fid : integer;
PROTECTED
PUBLISHED
property Farbe:TColor read ffarbe write ffarbe;
property Leistung:integer read fleistung write fleistung
property Marke : TPKWMarke read fmarke write fmarke
Property ID:integer read fid write fid;
PUBLIC
Procedure SetMaster(element:IMaster);
Property Master:IMaster write setMaster;
Procedure AddNew(); // ???
Procedure Edit(id:integer); // ???
procedure Delete(id:integer); // ???
End;
Ich denke, wenn Du Dich erst konkret um das Daten- und Geschäftsmodell kümmerst und erst als nächsten Schritt um die
GUI wird es übersichtlicher.
Aber mal sehen, vielleicht kann ja noch jemand anders besser helfen.