Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Maximale Anzahl von Datensätzen in einer Tabelle (https://www.delphipraxis.net/115750-maximale-anzahl-von-datensaetzen-einer-tabelle.html)

Meriones 17. Jun 2008 13:05

Datenbank: Firebird embedded • Version: 2 • Zugriff über: zeos

Maximale Anzahl von Datensätzen in einer Tabelle
 
Hallo,

ich würde gerne die maximale Anzahl an Datensätzen in einer Tabelle begrenzen (z.B. 2000 Datensätze). Dazu würde ich gerne per After-Insert-Trigger die ältesten (über Primkey?) Datensätze löschen.

Kann mir jemand helfen wie der SQL Befehl dazu aussehen müsste? Ich komme einfach nicht drauf. :gruebel:

Viele Grüsse, meriones

mkinzler 17. Jun 2008 13:11

Re: Maximale Anzahl von Datensätzen in einer Tabelle
 
Hast du ein Timestamp-Feld? Oder willst du den kleinsten Wert nehmen?

mquadrat 17. Jun 2008 13:14

Re: Maximale Anzahl von Datensätzen in einer Tabelle
 
Ein Timestamp wär wohl die beste Lösung. Außer du kannst einen Überlauf bei deinem Primärschlüssel ausschließen.

automatix 17. Jun 2008 13:17

Re: Maximale Anzahl von Datensätzen in einer Tabelle
 
Hallo!

Was ist der 'primary key'? Kannst Du den Aufbau der Tabelle noch ändern?
Eine Spalte anlegen die eine fortlaufende Nummer beinhaltet. Sollte in den meisten Fällen die ID und auch der 'primary key' sein.

Delphi-Quellcode:
delete form
  TABELLE
where
  ID < (
    select
      max(ID)
    from
      TABELLE
  ) - 2000
Grüße

hoika 18. Jun 2008 06:51

Re: Maximale Anzahl von Datensätzen in einer Tabelle
 
Hallo #

SQL-Code:
delete form
  TABELLE
where
  ID < (
    select
      max(ID)
    from
      TABELLE
  ) - 2000
Hier gehst du aber davon aus, dass die Nummern ohne Unterbrehcnung fortlaufend sind.
Wenn der Nutzer mal selber was löscht, werden mehr Daten gelöscht als gewünscht.

SQL-Code:
delete from
  Log_Table Log1
where
  Log1.ID not in (
    select
     first 2000 Log2.Id
    from
      Log_Table Log2
    Order By Log2.Id Desc
  )
Ungetestet ...


Heiko

Meriones 18. Jun 2008 11:08

Re: Maximale Anzahl von Datensätzen in einer Tabelle
 
Danke für die Antworten...

@hoika:
Sieht gut aus aber das ORDER ist nicht notwendig, oder?

Gruss, meriones

DeddyH 18. Jun 2008 11:56

Re: Maximale Anzahl von Datensätzen in einer Tabelle
 
Ohne ORDER BY wäre das Ergebnis ja unsortiert, Du wüsstest also nicht, welche Datensätze Du löschst.

mkinzler 18. Jun 2008 12:01

Re: Maximale Anzahl von Datensätzen in einer Tabelle
 
Und das könnte u.U. fatal sein.

hoika 18. Jun 2008 12:19

Re: Maximale Anzahl von Datensätzen in einer Tabelle
 
Hallo,

noch mal zum Order By.
Ohne das Order By kann Firebird selbst entscheiden,
in welcher Reihenfolge die Sätze zum Client gelangen.


Heiko

Meriones 20. Jun 2008 13:36

Re: Maximale Anzahl von Datensätzen in einer Tabelle
 
Danke erstmal an alle aber,
irgendwie hab ich noch Verständnisschwierigkeiten, ihr müsst mir nochmal helfen...

Zitat:

Ohne ORDER BY wäre das Ergebnis ja unsortiert, Du wüsstest also nicht, welche Datensätze Du löschst.
Zitat:

Und das könnte u.U. fatal sein.
Aber es kann mir doch egal sein in welcher Reihenfolge die Datensätze gelöscht werden, oder?
Firebird sollte doch den DELETE Befehl in einem abarbeiten, bevor wieder auf die Tabelle zugegriffen wird???

Zitat:

Ohne das Order By kann Firebird selbst entscheiden,
in welcher Reihenfolge die Sätze zum Client gelangen.
Wieso zum Client? Wenn ich einen DELETE Befehl mit SELECT in der WHERE clausel absetzte werden doch keine Daten zum Client übertragen??? (Zudem überlege ich das ganze im Trigger AfterInsert zu betreiben).

Grübel :gruebel: , meriones


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:15 Uhr.
Seite 1 von 2  1 2      

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