![]() |
[OOP] Instanzen durchlaufen
Hallo Community. Suche nun schon eine weile und grübel über mein Problem nach, wie ich dies früher gelöst habe.
Ich habe eine Klasse
Delphi-Quellcode:
Im Programm übergebe ich den Namen eines Kunden, welchen ich schon bei der Instanzierung gleichzeitig in die ComboBox eingeschrieben habe an die Funktion.
type
TKunde = class(TObject) private fKID : Integer; fName : String; fVorname : String; fAnschrift : TAnschrift; fGebdatum : TDate; public constructor create (const kunden_id: integer); destructor destroy; function getid: integer; function find_customer_by_name(s: string): integer; property Name : String read fName write fName; property Vorname : string read fVorname write fVorname; property Anschrift : TAnschrift read fAnschrift write fAnschrift; property Gebdatum : TDate read fGebdatum write fGebdatum; end;
Delphi-Quellcode:
Nun möchte ich in meiner Funktion alle einzelnen Instanzen der Klasse durchlaufen um die jeweiligen Namen mit dem zu vergleichen und die ID zurückzugeben...
SQL.Add(format(SQL_SELECT_CALLCOUNT_YEAR_AT_WEEKEND, [k.find_customer_by_name(ComboBox1.Items[ComboBox1.ItemIndex])]));
Delphi-Quellcode:
Hier fehlt dann mein weiteres Verständnis für OOP ... Wie kann ich die einzelnen Instanzen in einer Schleife o.ä. durchlaufen und mit den Werten vergleichen?
function TKunde.find_customer_by_name(s: string): integer;
var s1: string; i : integer; begin result := 0; s1 := copy(s, 0, pos(',',s)-2); delete(s, 1, pos(',',s)); if (fName=s1) and (fVorname=s) then result := fKID; end; |
Re: [OOP] Instanzen durchlaufen
Du brauchst eine weitere Klasse TKundenListe. In dieser kannst du dann einen Kunden suchen. Vorrausgesetzt, du hast alle Kunden darin gespeichert.
|
Re: [OOP] Instanzen durchlaufen
D.h. eine Klasse als TStringList / TObjectlist? Und dann registriere ich beim Create des TKunden diese Instanz in der Liste?
EDIT: Hab es auf anderem Weg gelöst.
Delphi-Quellcode:
ComboBox1.Items.AddObject(k.displayname, TKunde);
Delphi-Quellcode:
So komme ich genau zu der ID des jeweiligen Kunden.
SQL.Add(format(SQL_SELECT_CALLCOUNT_YEAR_AT_WEEKEND, [TKunde(ComboBox1.Items.Objects[ComboBox1.ItemIndex]).getid]));
Trotzdem danke für eure Lösungsansätze. |
Re: [OOP] Instanzen durchlaufen
Huhu,
statt
Delphi-Quellcode:
sollte es vermutlich
ComboBox1.Items.AddObject(k.displayname, TKunde);
Delphi-Quellcode:
heißen... ;)
ComboBox1.Items.AddObject(k.displayname, k);
|
Re: [OOP] Instanzen durchlaufen
... und bitte noch das Override; beim Destructor ergänzen. (Du solltest dazu sogar eine Meldung vom Compiler bekommen: "Destroy verdeckt virtuelle Methode von TObject" o.ä.)
|
Re: [OOP] Instanzen durchlaufen
Ein Tutorial dazu gibt es hier:
![]() |
Re: [OOP] Instanzen durchlaufen
Die Methode find_customer_by_name hat nichts in der TKunde Klasse zu suchen, sondern gehört in die Listen- bzw. Collectionklasse.
|
Re: [OOP] Instanzen durchlaufen
Zitat:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:09 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