AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Objektarray als Rückgabewert einer Funktion
Thema durchsuchen
Ansicht
Themen-Optionen

Objektarray als Rückgabewert einer Funktion

Ein Thema von MarvinM · begonnen am 20. Nov 2008 · letzter Beitrag vom 23. Nov 2008
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von MarvinM
MarvinM

Registriert seit: 24. Jul 2006
94 Beiträge
 
#1

Objektarray als Rückgabewert einer Funktion

  Alt 20. Nov 2008, 17:37
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:

function getAllEntries(): array of TStudent; Ich habe auch schon versucht den Array als Typ zu deklarieren, leider aber auch erfolglos

Ich bin mir sicher, dass die Antwort auf die Frage trivial ist, trotzdem komme ich nicht drauf

Danke schoneinmal für Eure Mühe!
Mfg Marvin

Carpe Diem! - Genieße den Tag! - [gr. Horaz]
> Meine Homepage - http://www.prettyprograms.de <
  Mit Zitat antworten Zitat
nat

Registriert seit: 10. Nov 2005
216 Beiträge
 
RAD-Studio 2009 Pro
 
#2

Re: Objektarray als Rückgabewert einer Funktion

  Alt 20. Nov 2008, 18:15
Zitat von MarvinM:
Ich habe auch schon versucht den Array als Typ zu deklarieren, leider aber auch erfolglos
warum? also so sollte es gehen:

Delphi-Quellcode:
type
  TStudentArr = array of TStudent;


function getAllEntries(): TStudentArr;
  Mit Zitat antworten Zitat
Benutzerbild von MarvinM
MarvinM

Registriert seit: 24. Jul 2006
94 Beiträge
 
#3

Re: Objektarray als Rückgabewert einer Funktion

  Alt 20. Nov 2008, 21:36
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:
var
  Students: array of TStudents;
  i: Integer;
begin
  for i := 0 to 100 do
    Students[i] := DBAccess.getAllEntries()[i];
end;
Leider bekomme ich nur einen leeren Array herraus. Die Funktion getAllEntries() sieht folgendermaßen aus:

Delphi-Quellcode:
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;
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.

BTW: Der oder Das Array?
Mfg Marvin

Carpe Diem! - Genieße den Tag! - [gr. Horaz]
> Meine Homepage - http://www.prettyprograms.de <
  Mit Zitat antworten Zitat
Zwoetzen

Registriert seit: 19. Sep 2007
Ort: Ilmenau
93 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Objektarray als Rückgabewert einer Funktion

  Alt 20. Nov 2008, 21:46
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:
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;
Eventuell mal die Bereichsprüfung in den optionen aktivieren, da dürfte Delphi dann rummeckern, wenn es nicht passt

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?
  Mit Zitat antworten Zitat
nat

Registriert seit: 10. Nov 2005
216 Beiträge
 
RAD-Studio 2009 Pro
 
#5

Re: Objektarray als Rückgabewert einer Funktion

  Alt 20. Nov 2008, 21:52
Zitat von MarvinM:
Delphi-Quellcode:
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;
also wenn deine funktion so aussieht, dann is das kein wunder
was ist denn Students[i]? du mußt mit result arbeiten
also so, dass das in etwa so aussieht

Delphi-Quellcode:
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;
allerdings finde ich es etwas geschickter die funktion so umzuschreiben
Delphi-Quellcode:
function TDBAccess.getAllEntries(var Output: Students): integer
begin
setlength(Output, 101);
....

result := length(Output);
end;
edit:
kein roter kasten mehr? naja...
  Mit Zitat antworten Zitat
Benutzerbild von MarvinM
MarvinM

Registriert seit: 24. Jul 2006
94 Beiträge
 
#6

Re: Objektarray als Rückgabewert einer Funktion

  Alt 20. Nov 2008, 21:56
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...
Mfg Marvin

Carpe Diem! - Genieße den Tag! - [gr. Horaz]
> Meine Homepage - http://www.prettyprograms.de <
  Mit Zitat antworten Zitat
nat

Registriert seit: 10. Nov 2005
216 Beiträge
 
RAD-Studio 2009 Pro
 
#7

Re: Objektarray als Rückgabewert einer Funktion

  Alt 20. Nov 2008, 22:02
ach so, zum artikel: de.wiktionary.org 8)
  Mit Zitat antworten Zitat
Benutzerbild von MarvinM
MarvinM

Registriert seit: 24. Jul 2006
94 Beiträge
 
#8

Re: Objektarray als Rückgabewert einer Funktion

  Alt 21. Nov 2008, 09:51
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:
  for i := 1 to MAXSIZEOFAARAY do
    Students[i] := DBAccess.getAllEntries()[i];
Kann man vielleicht mit einer Funktion gleich das ganze Array übernehmen?

PS: Ok, dann ist die Frage mit dem Artikel ja geklärt
Mfg Marvin

Carpe Diem! - Genieße den Tag! - [gr. Horaz]
> Meine Homepage - http://www.prettyprograms.de <
  Mit Zitat antworten Zitat
nat

Registriert seit: 10. Nov 2005
216 Beiträge
 
RAD-Studio 2009 Pro
 
#9

Re: Objektarray als Rückgabewert einer Funktion

  Alt 21. Nov 2008, 14:50
Zitat von nat:
allerdings finde ich es etwas geschickter die funktion so umzuschreiben
Delphi-Quellcode:
function TDBAccess.getAllEntries(var Output: Students): integer
begin
setlength(Output, 101);
....

result := length(Output);
end;
deshalb habe ich das geschrieben!
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;
  Mit Zitat antworten Zitat
Benutzerbild von MarvinM
MarvinM

Registriert seit: 24. Jul 2006
94 Beiträge
 
#10

Re: Objektarray als Rückgabewert einer Funktion

  Alt 22. Nov 2008, 15:23
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:

StudentCount := DBAccess.getAllEntries(Students); Meldung: '(' erwartet, aber ')' gefunden.
Mfg Marvin

Carpe Diem! - Genieße den Tag! - [gr. Horaz]
> Meine Homepage - http://www.prettyprograms.de <
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz