AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Konzeptfrage Ergebnismenge einer Funktion
Thema durchsuchen
Ansicht
Themen-Optionen

Konzeptfrage Ergebnismenge einer Funktion

Ein Thema von WIng2005 · begonnen am 1. Feb 2008 · letzter Beitrag vom 7. Feb 2008
Antwort Antwort
Seite 1 von 3  1 23      
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#1

Konzeptfrage Ergebnismenge einer Funktion

  Alt 1. Feb 2008, 08:22
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
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#2

Re: Konzeptfrage Ergebnismenge einer Funktion

  Alt 1. Feb 2008, 08:25
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.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
mashutu

Registriert seit: 15. Nov 2007
195 Beiträge
 
#3

TQuery zurueckgeben

  Alt 1. Feb 2008, 08:45
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:
function getMyData(...hier die Bedingungen uebergeben..):TQuery;
var
  ...
begin
   result:=TQuery.create(NIL);
   result.sql.add(...) //SQL zusammenbasteln

   result.open;
end;
Du musst dann halt nach der Bearbeitung/Weiterverarbeitung darauf achten die Query wieder freizugeben.
Aber damit kannst Du auch die Sortierung steuern und die anzahl der Ergebnismenge laesst sich auch ermitteln.
utu

if it was hard to write it should be hard to read
  Mit Zitat antworten Zitat
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#4

Re: Konzeptfrage Ergebnismenge einer Funktion

  Alt 1. Feb 2008, 09:00
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Konzeptfrage Ergebnismenge einer Funktion

  Alt 1. Feb 2008, 09:03
Zitat von WIng2005:
muß ich nicht bei dynamischen Array die Größe vorab definieren und kann sie dann
verändern?
Jepp, siehe dazu SetLength.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
angos

Registriert seit: 26. Mai 2004
Ort: Rheine
549 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: TQuery zurueckgeben

  Alt 1. Feb 2008, 09:09
Zitat von mashutu:
So als grundsaetzliches Beispiel.

Delphi-Quellcode:
function getMyData(...hier die Bedingungen uebergeben..):TQuery;
var
  ...
begin
   result:=TQuery.create(NIL);
   result.sql.add(...) //SQL zusammenbasteln

   result.open;
end;
So sollte man das nicht machen. Wie soll die TQuery wieder freigegeben werden?

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;
Ansgar
  Mit Zitat antworten Zitat
mashutu

Registriert seit: 15. Nov 2007
195 Beiträge
 
#7

Re: TQuery zurueckgeben

  Alt 1. Feb 2008, 09:46
Zitat von angos:
Zitat von mashutu:
So als grundsaetzliches Beispiel.

Delphi-Quellcode:
function getMyData(...hier die Bedingungen uebergeben..):TQuery;
var
  ...
begin
   result:=TQuery.create(NIL);
   result.sql.add(...) //SQL zusammenbasteln

   result.open;
end;
So sollte man das nicht machen. Wie soll die TQuery wieder freigegeben werden?
Na das Aufrufende Modul.

Das machst Du in Deinem Beispiel doch auch und ich habe auch darauf hingewiesen.
utu

if it was hard to write it should be hard to read
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Konzeptfrage Ergebnismenge einer Funktion

  Alt 1. Feb 2008, 09:49
Hier gab es mal einen längeren Thread dazu: Link
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#9

Re: Konzeptfrage Ergebnismenge einer Funktion

  Alt 1. Feb 2008, 10:42
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
  Mit Zitat antworten Zitat
angos

Registriert seit: 26. Mai 2004
Ort: Rheine
549 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: TQuery zurueckgeben

  Alt 1. Feb 2008, 11:07
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 von mashutu:
Na das Aufrufende Modul.

Das machst Du in Deinem Beispiel doch auch und ich habe auch darauf hingewiesen.
hmm verstehe ich nicht ganz. Der Unterschied ist: Ich erzeuge das Objekt in der "Hauptfunktion", Übergebe dass dann an die Funktion zu FÜllen und arbeite damit dann wieder in der Hauptroutine, wo ich es anschließend freigebe.

Du erzeugst in der Unterfunktion das Objekt. würde das dann so funktionieren, oder wie meinst du das?:
Delphi-Quellcode:
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;
Gruß
Ansgar
Ansgar
  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 02:08 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