Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Nur die ersten n Ergebnisse anzeigen (https://www.delphipraxis.net/16474-nur-die-ersten-n-ergebnisse-anzeigen.html)

Wegalt 17. Feb 2004 15:03


Nur die ersten n Ergebnisse anzeigen
 
Hallo,

ich hoffe ihr könnt mir helfen.
Ich möchte nur die Ersten n Ergebnisse anzeigen lassen bzw sollen nur n
Ergebnisse bei einer Abfrage rauskommen

SQL-Code:
Select Kunde, Datum
from Kunden
order by Datum
Wie kriege ich es nun hin, dass ich nur n und nicht alle Kunden geordnet
nach dem Datum als Ergebnis zurückbekomme?

P.S. Ich nutze Oracle

Danke
Wegalt

Robert_G 17. Feb 2004 15:13

Re: Nur die ersten n Ergebnisse anzeigen
 
ADOQuery:
Delphi-Quellcode:
With Query Do
Begin
  SQL.Text :=
    'SELECT Kunde,' + #10 +
    '      Datum' + #10 +
    'FROM  Kunden' + #10 +
    'WHERE RowNum <= :i_LimitRows' + #10 +
    'ORDER By Datum';
  Prepared := True;
  Parameters.ParamByName('i_LimitRows').Value := n;
  Open;
  While Not Eof Do
  Begin
    ...
    Next;
  End;
  ...
End;
Direct Oracle Access:
Delphi-Quellcode:
With Query Do
Begin
  SQL.Text :=
    'SELECT Kunde,' + #10 +
    '      Datum' + #10 +
    'FROM  Kunden' + #10 +
    'WHERE RowNum <= :i_LimitRows' + #10 +
    'ORDER By Datum';
  DeclareVariable('i_LimitRows', otInteger);
  SetVariable('i_LimitRows', n);
  Execute;
  While Not Eof Do
  Begin
    ...
    Next;
  End;
  ...
End;

Wegalt 17. Feb 2004 15:42

Re: Nur die ersten n Ergebnisse anzeigen
 
Darauf bin ich zuerst auch gekommen aber das funktioniert nicht.
Mit "Rownum" geht es nicht, da mir dann nur die Zeilen ausgewählt werden,
wo die Zeilennummer <= meines Wertes ist.

Rownum begrenzt nicht mein Ergebnis sondern die auszuwählenden Zeilen!!

Robert_G 17. Feb 2004 15:49

Re: Nur die ersten n Ergebnisse anzeigen
 
:wall:

Man muss es natürlich erst in einem Subselect sortieren und danach die Menge einschränken. die Where-Clause läuft ja auch vor Select & Order By...
Delphi-Quellcode:
  SQL.Text :=
    'SELECT v.Kunde,' + #10 +
    '      v.Datum' + #10 +
    'FROM  (SELECT Kunde,' + #10 +
    '              t.Datum' + #10 +
    '       FROM  Kunden t' + #10 +
    '       ORDER By t.Datum Desc) v' + #10 +
    'WHERE RowNum <= :i_LimitRows';
Edit: Hab' "<= 5" durch "<= :i_LimitRows" ersetzt

Leuselator 17. Feb 2004 16:17

Re: Nur die ersten n Ergebnisse anzeigen
 
Unterstützt Oracle kein Top?
SQL-Code:
SELECT TOP 10 *
  FROM Tabelle
 WHERE Bedingung
Gruß

Robert_G 17. Feb 2004 16:32

Re: Nur die ersten n Ergebnisse anzeigen
 
Ist wohl so ein SQL-Server spezifisches Ding. :wink:
Dafür haben wir Pseudo-columns wie RowNum, RowID, Level,...
p.s.: Ich wette der Optimizer würde deinen Code fast genauso umsetzen wie meinen, du sparst dir wahrscheinlich nur etwas Tipperei.

Wegalt 17. Feb 2004 17:21

Re: Nur die ersten n Ergebnisse anzeigen
 
Danke euch, leider geht geht TOP nicht aber dafür die verschachtelte Anweisung

Seven 19. Feb 2004 10:53

Re: Nur die ersten n Ergebnisse anzeigen
 
Wegalt Frage würde mich auch interessieren. Leider setze ich Informix7.2 ein, dort finde ich aber leider keine Funktion, um nur x Zeilen aus meiner Suche anzuzeigen. Weiss jemand von Euch Rat?


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:13 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