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 2 von 3     12 3      
mashutu

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

OT: Re: TQuery zurueckgeben

  Alt 1. Feb 2008, 11:24
So war das gemeint:

[Edit: ganz sauber]
Delphi-Quellcode:
function myData: TQuery;
begin
...try
     result:=TQuery.create(NIL);
   except
     if assigned(result) then
        FreeAndNil(result);
   end
end;

procedure Hauptroutine;
var
  qry : TQuery;
begin
  qry:=myData;
  if qry <> NIL then
  with qry do
  begin
    try
      // Mach was
    finally
      Free;
    end;
  end;
end;
Die query wird in der Hauptroutine als Variable deklariert, das Erstellen mit schnickschnack passiert woanders und die Query wird da freigegeben wo sie auch deklariert ist. Das gibt keine Probleme.
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
 
#12

Re: Konzeptfrage Ergebnismenge einer Funktion

  Alt 1. Feb 2008, 11:32
kann ich nem Query mehrere Selects vergeben, wobei das jeweils nachfolgende
Select die Ergebnismenge des Vorgängers nutzt?

Quasi so:
Select x1,x2 INTO temp_1 From Tabelle_1
Select x1,x2 From Temp_1 Where x1= Bed1


MFG
Steffen
  Mit Zitat antworten Zitat
angos

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

Re: Konzeptfrage Ergebnismenge einer Funktion

  Alt 1. Feb 2008, 12:10
Zitat von WIng2005:
kann ich nem Query mehrere Selects vergeben, wobei das jeweils nachfolgende
Select die Ergebnismenge des Vorgängers nutzt?

Quasi so:
Select x1,x2 INTO temp_1 From Tabelle_1
Select x1,x2 From Temp_1 Where x1= Bed1


MFG
Steffen
ja das geht. Hier ein kleines beispiel

SQL-Code:

Select x1, x2 from
(Select x1, x2 from Tabelle_1 where x1 = Bed1)
Ansgar
  Mit Zitat antworten Zitat
WIng2005

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

Re: Konzeptfrage Ergebnismenge einer Funktion

  Alt 2. Feb 2008, 07:20
Vielen Dank, werde ich Montag gleich mal ausprobieren.....
Wie ich nun die Übergabemenge löse, ist mir nur irgendwie immernoch nicht ganz klar.
Bisher bin ich, wie gesagt, ein wenig auf ner Datei (ini) hängengeblieben, finde dies aber ein wenig unsauber....


MFG
Steffen
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#15

Re: Konzeptfrage Ergebnismenge einer Funktion

  Alt 2. Feb 2008, 07:26
aber sag mal, weshalb willste denn so viele datensätze zurückliefern?

das einzige wo das sinn machen könnte, wäre beim ausdruck... und da wäre es sinnvoll die daten vom server abzuholen und gleich zu drucken...

grüsse und noch einen schönen samstag
GG
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#16

Re: OT: Re: TQuery zurueckgeben

  Alt 2. Feb 2008, 09:39
Zitat von mashutu:
So war das gemeint:

[Edit: ganz sauber]
Was Du da machst ist schon sehr merkwürdig. In der Funktion erzeugst Du eine Query und zerstörst sie dann. Ergo liefert 'MyData' immer nil.
So würde ich das machen:
Delphi-Quellcode:
Procedure Hauptroutine;
Var
  qMyQuery : TQuery; // riecht nach BDE, lieber nicht verwenden

Begin
  qMyQuery := TQuery.Create (nil);
  Try // --- dieses Try kapselt die Instantiierung der TQuery-Komponente
    // qMyQuery mit der Datenbank verbinden
    qMyQuery.SQL.Text := 'Select * from View_VerdammtKomplexeAbfrage';
    qMyQuery.Open;
    Try // --- dieses Try kapselt das Öffnen der Query
      qMyQuery.First; // Nicht nötig, aber illustriert, das man vom ANFANG anfangen will.
      While Not qMyQuery.Eof Do Begin
        DoSomething (qMyQuery);
        qMyQuery.Next;
      End;
    Finally
      qMyQuery.Close;
    End;
  Finally
    qMyQuery.Nil; // FreeAndNil ist überflüssig, da qMyQuery lokal ist und nicht weiter verwendet wird.
  End
End;
Wieso schreibe ich die Instantiierung VOR das Try? Weil laut Guidelines ein Konstruktor keine logischen Prüfungen vornimmt und insofern (außer bei Speichermangel oder anderen fatalen Fehlern) nicht abschmiert. Und fatale Fehler muss man nicht abfangen, weil das eben fatal sein kann. Einen Speichermangel abzufangen, um eine Messagebox anzuzeigen, führt nämlich zu -jupp- einer Exception wegen Speichermangel...
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
WIng2005

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

Re: Konzeptfrage Ergebnismenge einer Funktion

  Alt 3. Feb 2008, 09:35
Prinzipiell soll die Funktion für verschiedene Einsatzzwecke flexibel nutzbar sein.
Zum eine für die Darstellung in Grids, zum anderen für Berechnungen.

MFG
Steffen
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#18

Re: Konzeptfrage Ergebnismenge einer Funktion

  Alt 3. Feb 2008, 10:31
Ich würde die Daten in eine Objektstruktur laden, dort mit ihnen arbeiten, um sie dann wieder abzuspeichern.

Da dies eine Standardanforderung ist, gibt es natürlich schon Lösung für das Laden und Speichern der Daten in ein Objekt. Du kannst Dir mal die InstantObjects von Sourceforge runterladen. Das ist eine sehr gelungene Umsetzung. Du definierst nur deine Objekte und das Laden/Speichern/Anzeigen in Grids/Bearbeiten in Feldern etc. bzw. die Vorbereitung und Bereitstellung geschieht vollautomatisch. So kannst du dich auf die Modellierung deiner Objekte kümmern.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
mashutu

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

Re: OT: Re: TQuery zurueckgeben

  Alt 4. Feb 2008, 09:31
Zitat von alzaimar:
Was Du da machst ist schon sehr merkwürdig. In der Funktion erzeugst Du eine Query und zerstörst sie dann. Ergo liefert 'MyData' immer nil.
Quatsch, im Except Fall liefert die Funktion NIL, ansonsten ein gueltiges Objekt - in dem Fall eine TQuery.
Okay, das mir in dem Beispiel das create vor das try gerutscht ist, mag unschoen sein, aber es ist ja nur ein Beispiel.
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
 
#20

Re: Konzeptfrage Ergebnismenge einer Funktion

  Alt 6. Feb 2008, 05:47
So..... habe es nun in einer csv abgelegt. So kann ich es an beliebiger Stelle neu laden.

Vielen Dank für eure Anregungen....

MFG
Steffen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 05:16 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