Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Abfrage "Die letzten 50 Datensätze" einer MSSQL DB (https://www.delphipraxis.net/99832-sql-abfrage-die-letzten-50-datensaetze-einer-mssql-db.html)

Andre.R 18. Sep 2007 15:21

Datenbank: MSSQL • Version: 2005 • Zugriff über: ADO

SQL Abfrage "Die letzten 50 Datensätze" einer MSSQ
 
Hallo,

vielleicht kann mir jemand helfen.
Damit mein Delphiprogramm nicht immer alle Datensätze aus der MSSQL Datenbank laden muss, möchte ich nur die
Letzten 50 Datensätze anzeigen.
Ich habe schon raus gefunden, dass es den Befehl "TOP" gibt, welcher mir die ersten Datensätze anzeigt...
Ich bräuchte aber die letzten.

Gruß
andre

DeddyH 18. Sep 2007 15:26

Re: SQL Abfrage "Die letzten 50 Datensätze" einer
 
Nimm TOP und sortiere absteigend ;)

tr909 18. Sep 2007 15:33

Re: SQL Abfrage "Die letzten 50 Datensätze" einer
 
Wenn du nen autoinc-Feld hast kannst du es auch darüber machen

SELECT * FROM tabelle ORDER BY autoinf_feld DESC LIMIT 1,50

Gruß
tr909

*edit* ich weiß aber nicht ober LIMIT bei MSSQL geht. Ansonsten halt wie o.a. SELECT TOP 3 * from TABELLE ORDER by pk DESC
Dies sollte klappen, falls TOP vor ORDER ausgeführt wird.

Andre.R 19. Sep 2007 11:22

Re: SQL Abfrage "Die letzten 50 Datensätze" einer
 
Hallo,

danke für die schnelle Hilfe.
Zitat:

Nimm TOP und sortiere absteigend
Leider ist die Sortierung jetzt gerade falsch herum ... gibts da auch ne Lösung ?

andre

tr909 19. Sep 2007 11:33

Re: SQL Abfrage "Die letzten 50 Datensätze" einer
 
Nochmal umdrehen evtl.
SELECT * FROM (SELECT TOP 50 * FROM tabelle ORDER BY id DESC) ORDER BY id ASC

Gruß
tr909

Andre.R 29. Sep 2007 11:13

Re: SQL Abfrage "Die letzten 50 Datensätze" einer
 
Hmmm,

ich komme nicht drauf ....
Was mache ich falsch, es kommt immer ne Fehlermeldung.

SQL-Code:

SELECT TOP 5

       [dbID]
      ,[dbDateTime]
      ,[dbinLastWritten]
      ,[inindex]
      ,[time_pre_low_plunger]
      ,[time_pre_high_plunger]
      ,[Pre_diameter_A_plunger]
      ,[pre_diameter_B_plunger]
      ,[pre_boght_out_head_plung]
      ,[respare1]
      ,[respare2]
      ,[respare3]
      ,[respare4]
      ,[respare5]
      ,[respare6]
      ,[respare7]
      ,[respare8]

 ( FROM [p123].[dbo].[Data159DB240]
    ORDER BY dbo.Data159DB240.dbID DESC)

    ORDER BY dbo.Data159DB240.dbID ASC
Meldung 156, Ebene 15, Status 1, Zeile 21
Falsche Syntax in der Nähe des 'FROM'-Schlüsselwortes.

andre

marabu 29. Sep 2007 12:40

Re: SQL Abfrage "Die letzten 50 Datensätze" einer
 
Hallo André,

probiere es so:

SQL-Code:
SELECT
  dbID, dbDateTime, dbinLastWritten, inindex, time_pre_low_plunger,
  time_pre_high_plunger, Pre_diameter_A_plunger, pre_diameter_B_plunger,
  pre_boght_out_head_plung, respare1, respare2, respare3, respare4
  respare5, respare6, respare7, respare8
FROM Data159DB240 D
WHERE dbID IN (
  SELECT TOP 5 dbID FROM Data159DB240 ORDER BY dbID DESC
)
ORDER BY dbID
Grüße vom marabu

Andre.R 29. Sep 2007 18:03

Re: SQL Abfrage "Die letzten 50 Datensätze" einer
 
Hallo marabu,


Perfekt !! Das funzt !
Danke Dir.
Aber noch ne Frage ...

Um unnötigen traffic mit dem SQL-Server zu vermeiden, habe ich mir gedacht dass ich diesen SQL Script einbaue damit nicht jedes mal die ganzen Datensätze geladen werden müssen (Da kommen einige zusammen).
Ist diese Denkweise OK? Oder ist das ein falscher Weg ?

Ich habe jetzt diesen Script in das TADOQuery.SQL eingebunden, der auch beim aktivieren (TADOQuery.Active) Funktioniert. Wenn nun aber ein neuer Datensatz hinzu kommt (Append), dann wird scheinbar dieser SQLScript nicht mehr aufgerufen.
Nur durch TADOQuery.Active = false und dann wieder TADOQuery.Active = true.
Oder gibt es ne andere Lösung ?

Danke noch mal ...

andre

marabu 29. Sep 2007 19:28

Re: SQL Abfrage "Die letzten 50 Datensätze" einer
 
Hallo André,

ich finde es gut, dass du dir Gedanken um das Datenaufkommen in einer Client-Server-Umgebung machst. Wenn dir die 50 neuesten Datensätze genügen, warum dann mehr anfragen und transportieren? Mit SQL kannst du den Datenverkehr exakt auf dein Anwendungsproblem zuschneiden. Wenn du es richtig machst, dann gibt es kaum Nachteile. Damit die Auswahl der Sätze schnell von statten geht, musst du sicher stellen, dass ein Index für das Selektionskriterium existiert.

Bei den heute verfügbaren Bandbreiten ist das Reaktionsverhalten deines Programms oft wichtiger als die zu übertragende Datenmenge. Für die Optimierung stehen dir dabei zwei Methoden zur Verfügung: Selektion (Zeilenauswahl) und Projektion (Spaltenauswahl). Bei manchen Programmen hole ich zuerst nur die Primärschlüssel und erst später die für eine Anzeige benötigten restlichen Felder vom Server.

Klar, dass bei Neuzugängen deine Query veraltet. Mit der Methode Requery() kannst du sie wieder auf den aktuellen Stand bringen.

Freundliche Grüße

Andre.R 1. Okt 2007 08:11

Re: SQL Abfrage "Die letzten 50 Datensätze" einer
 
Hallo marabu,

dann bin ich mir jetzt etwas sicherer dass ich das Richtige mache :-)
Vielen Dank für Deine Hilfe.

andre


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:08 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 by Thomas Breitkreuz