![]() |
Objektarray als Rückgabewert einer Funktion
Hallo zusammen,
ich möchte in einem Projekt einen Array von Objekten von einer Funktion zurück geben lassen, wie kann ich das deklarieren? Denn folgendes geht nicht:
Delphi-Quellcode:
Ich habe auch schon versucht den Array als Typ zu deklarieren, leider aber auch erfolglos :-(
function getAllEntries(): array of TStudent;
Ich bin mir sicher, dass die Antwort auf die Frage trivial ist, trotzdem komme ich nicht drauf ;-) Danke schoneinmal für Eure Mühe! |
Re: Objektarray als Rückgabewert einer Funktion
Zitat:
Delphi-Quellcode:
type
TStudentArr = array of TStudent; function getAllEntries(): TStudentArr; |
Re: Objektarray als Rückgabewert einer Funktion
Ich glaube ich habe mich ein wenig ungünstig ausgedrückt...
Ich kann das durchaus als Typ deklarieren, das nimmt der Compiler auch so an. In der anderen Unit, in der ich die Funktion nun aufrufe deklariere wieder diesen Array, aber nur lokal in der Methode, um die Daten, die ich aus der Funktion erhalte, weiterverarbeiten zu können. Also sowas á la:
Delphi-Quellcode:
Leider bekomme ich nur einen leeren Array herraus. Die Funktion getAllEntries() sieht folgendermaßen aus:
var
Students: array of TStudents; i: Integer; begin for i := 0 to 100 do Students[i] := DBAccess.getAllEntries()[i]; end;
Delphi-Quellcode:
Ich dachte zuerst, dass es nicht der richtige Weg ist, den Rückgabewert als Typ zu deklarieren, daher habe ich meine Frage wohl ein wenig missverständlich formuliert, ich hoffe, dass es jetzt klarer ist, Sorry.
function TDBAccess.getAllEntries(): Students; //Students ist weiter oben als Typ deklariert
begin for i := 0 to 100 do Students[i] := TStudent.Create; //Ein paar SQL Queries, die den Array füllen end; BTW: Der oder Das Array? |
Re: Objektarray als Rückgabewert einer Funktion
Ich bin mir nicht ganz sicher, aber da es sich um ein dynamisches Array handelt, müsste man da vorher nicht die Dimension des Arrays festlegen?
Delphi-Quellcode:
Eventuell mal die Bereichsprüfung in den optionen aktivieren, da dürfte Delphi dann rummeckern, wenn es nicht passt ;)
function TDBAccess.getAllEntries(): Students; //Students ist weiter oben als Typ deklariert
begin SetLength(Students, 101); // => Students: Array[0..100] of TStudents for i := 0 to 100 do Students[i] := TStudent.Create; //Ein paar SQL Queries, die den Array füllen end; PS: Ich würde das Array sagen, wegen das Datenfeld (= Array). Im Zweifelsfall einfach De Array sagen xD Edit: Was mir noch auffällt: Einmal heißt es Array of TStudents, aber weiter unten sagst du dann TStudent.Create. Copy&Paste-Fehler? |
Re: Objektarray als Rückgabewert einer Funktion
Zitat:
was ist denn Students[i]? du mußt mit result arbeiten also so, dass das in etwa so aussieht
Delphi-Quellcode:
allerdings finde ich es etwas geschickter die funktion so umzuschreiben
function TDBAccess.getAllEntries(): Students; //Students ist weiter oben als Typ deklariert
begin setlength(result, 101); for i := 0 to 100 do //bzw to length(result)-1 result[i] := TStudent.Create; //Ein paar SQL Queries, die den Array füllen end;
Delphi-Quellcode:
edit:
function TDBAccess.getAllEntries(var Output: Students): integer
begin setlength(Output, 101); .... result := length(Output); end; kein roter kasten mehr? naja... :) |
Re: Objektarray als Rückgabewert einer Funktion
Arg, natürlich muss ich result benutzen! Danke!
PS1: Danke für den Tipp, wie man die Länge von dynamischen Arrays definiert! PS2: Das Datenfeld, die Datenreihe, aber die Array? Ich weiß ja nicht... |
Re: Objektarray als Rückgabewert einer Funktion
ach so, zum artikel:
![]() |
Re: Objektarray als Rückgabewert einer Funktion
Gibt es denn eigentlich eine einfachere Möglichkeit, als alle Items durchzugehen und dann die Werte von dem Rückgabewert der Funktion in die Variable zu schreiben?
Also nich so wie hier, sondern einfacher?
Delphi-Quellcode:
Kann man vielleicht mit einer Funktion gleich das ganze Array übernehmen?
for i := 1 to MAXSIZEOFAARAY do
Students[i] := DBAccess.getAllEntries()[i]; PS: Ok, dann ist die Frage mit dem Artikel ja geklärt ;-) |
Re: Objektarray als Rückgabewert einer Funktion
Zitat:
da haste gleich alle daten in deinem array
Delphi-Quellcode:
count := DBAccess.getAllEntries(Students);
for i:=0 to count-1 do begin //irgendwas mit Students[i] machen end; |
Re: Objektarray als Rückgabewert einer Funktion
Aber ist es dann nicht so, dass ich das Array als Parmeter der Funktion mitgebe? Ich will es ja eigentlich aus der Funktion erhalten.
Außerdem meckert der Compiler bei der Zeile:
Delphi-Quellcode:
Meldung: '(' erwartet, aber ')' gefunden.
StudentCount := DBAccess.getAllEntries(Students);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02: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