![]() |
Konzeptfrage Ergebnismenge einer Funktion
Hallo,
ich habe folgendes vor: eine Prozedur ruft eine Funktion auf, in welcher durch div. DB-Abfragen eine Ergebnismenge folgender Struktur: Baugruppe Einzelteil Wert 1 ... Wert n ------------------------------------------------- 1-----------A------------23-----------34 1-----------B 1-----------C 1-----------A------------usw. 1-----------C 1-----------F zusammen gebastelt wird. Diese Menge wird von der Prozedur verarbeitet und abgelegt. Wie würdet ihr die Übergabe der Ergebnismenge (kann sehr groß werden) lösen(Array,Stringliste...)? Die Daten sollten sortiert und (am Bsp. A) zusammengefaßt werden können. Mein Problem mit nem Array ist, dass ich die größe der Ergebnismenge nich in der Prozedure kenne und somit das Array nicht definieren kann. MFG Steffen |
Re: Konzeptfrage Ergebnismenge einer Funktion
Bau dir doch ein Record, in das du die ermittelten Werte schreiben kannst.
Dann mache dir ein Array auf genau diesem Typ und arbeite damit. Dass du die Arraygröße nicht kennst, ist nicht so wichtig, da genau für diesen Fall die dynamischen Arrays eingebaut wurden. |
TQuery zurueckgeben
du schreibst sehr wenig, ueber das, was da zusammengestellt wird, aber u.U. kann es angemessen sein eine Query zurueckzugeben.
So als grundsaetzliches Beispiel.
Delphi-Quellcode:
Du musst dann halt nach der Bearbeitung/Weiterverarbeitung darauf achten die Query wieder freizugeben.
function getMyData(...hier die Bedingungen uebergeben..):TQuery;
var ... begin result:=TQuery.create(NIL); result.sql.add(...) //SQL zusammenbasteln result.open; end; Aber damit kannst Du auch die Sortierung steuern und die anzahl der Ergebnismenge laesst sich auch ermitteln. |
Re: Konzeptfrage Ergebnismenge einer Funktion
Die Ergebnismenge ist eine Auflistung aller Einzelteile eines Gerätes. Da dieses jedoch weitere
Unterbaugruppen enthalten kann (bis 5 Strukturstufen) sind mehrere Einzelabfragen an die gleiche DB-Tabelle nötig. Bin fast dran, die Ergebnismenge in eine Datei zu schreiben und dann wieder auszulesen. @Nikolas: muß ich nicht bei dynamischen Array die Größe vorab definieren und kann sie dann verändern? Da die Funktion ja aber nur die Menge selbst zurückgibt, stelle ich mir die Zuweisung der Ergebnismenge in der Prozedur schwierig vor. MFG Steffen |
Re: Konzeptfrage Ergebnismenge einer Funktion
Zitat:
|
Re: TQuery zurueckgeben
Zitat:
Besser ist es, die TQuery als var-Parameter zu übergeben.
Delphi-Quellcode:
function getMyData(..., aQuery: TQuery): Boolean;
var ... begin Result := True; Result.sql.add(...) //SQL zusammenbasteln try result.open; except; Result := False; end; end; procedure machwas; var aQuery: TQuery; begin aQuery := TQuery.Create(NIL); try if getMyData(..., aQuery) = True then begin // Machwas end; finally aQuery.Close; aQuery.Free; end; end; |
Re: TQuery zurueckgeben
Zitat:
Das machst Du in Deinem Beispiel doch auch und ich habe auch darauf hingewiesen. |
Re: Konzeptfrage Ergebnismenge einer Funktion
Hier gab es mal einen längeren Thread dazu:
![]() |
Re: Konzeptfrage Ergebnismenge einer Funktion
Habe leider noch keine Erfahrungen mit TQuery. Bin auch nicht ganz sicher,
ob hier schon die Tatsächliche Ergebnismenge, oder nur die fertige Abfrage- syntax erstellt wird. Die Abfragen sind zu komplex, als dass sie mit einer Abfrage gelöst werden kann. MFG Steffen |
Re: TQuery zurueckgeben
Wenn du das nicht mit einer SQL-Abfrage realisieren kannst, wird dir die Query wohl nicht weiterhelfen, aber normalerweise bekommt man durch ne SQL-Abfrage schon gut alle infos die man braucht (die Abfrgae kann natürlich lang und mit diversen Unterabfragen ausgestattet sein ;) )
OT: Zitat:
Du erzeugst in der Unterfunktion das Objekt. würde das dann so funktionieren, oder wie meinst du das?:
Delphi-Quellcode:
Gruß
function myData: TQuery;
begin ... end; procdure Hauptroutine; begin with myData do begin try // Mach was finally Free; // Wird jetzt hierdurch das in der funktion myData erzeugte Obejkt wieder freigeben?? end; end; end; Ansgar |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:12 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