Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Anzahl Datensätze einer Tabelle beschränken (https://www.delphipraxis.net/141358-anzahl-datensaetze-einer-tabelle-beschraenken.html)

Jens Hartmann 7. Okt 2009 18:31

Datenbank: Firebird • Version: V2.1 • Zugriff über: ZEOS

Anzahl Datensätze einer Tabelle beschränken
 
Hallo,

hab mal eine Frage zum beschränken von Datensätzen einer Tabelle. Ich habe vor über die Anzahl der Datensätze, die ich in eine Tabelle schreiben kann, einen Ringspeicher zu erstellen, um das Datenaufkommen zu minimieren.

Soll heißen, ich möchte die Anzahl der Datensätze einer Tabelle auf 500000 beschränken.

Die Tabelle soll aber nicht voll werden, sondern nach dem 500000 Datensatz soll der älteste Überschrieben werden. (Ringspeicher).

Muss ich diese Funktion mit INSERT und DELETE selber schreiben, oder kann ich das mit Firebird automatisch realisieren.

Danke schon mal

Gruß Jens

mkinzler 7. Okt 2009 18:56

Re: Anzahl Datensätze einer Tabelle beschränken
 
Man könnte versuchen, dies im After-Insert-Trigger zu bewerkstelligen

Jens Hartmann 7. Okt 2009 19:40

Re: Anzahl Datensätze einer Tabelle beschränken
 
Alles klar,

danke werde ich mal versuchen.

Gruß Jens

Namenloser 7. Okt 2009 20:01

Re: Anzahl Datensätze einer Tabelle beschränken
 
Ich wollte auch mal sowas machen, allerdings mit MySQL. Hier ist der Thread
Mit Events ist es aber natürlich eleganter.

Hansa 7. Okt 2009 20:10

Re: Anzahl Datensätze einer Tabelle beschränken
 
Trigger ? :shock: Immer dieses DB-Gefummele. :mrgreen:

Delphi-Quellcode:
procedure TForm1.btn1Click(Sender: TObject);
var Anz : Integer;
begin
  DS1.Close;
  DS1.SelectSQL.Text := 'SELECT COUNT (*) AS ANZ FROM TESTTABLE';
  DS1.Open;            // ^^ momentane Anzahl ermitteln
  Anz := DS1.FieldByName ('ANZ').AsInteger;
  lbl1.Caption := IntToStr(Anz);
  if Anz > 3 then begin
    DS1.Close;
    DS1.SelectSQL.Text := 'SELECT * FROM TESTTABLE'; // alle lesen
    DS1.Open;
    DS1.First;
    DS1.Delete;  // ältesten DS löschen
    DS1.Last;
    DS1.Insert;  // hinter neuestem DS komplett neuen einfügen
    DS1.FieldByName('CITYNO').AsInteger := Anz;
    DS1.Post;
    Transaction1.Commit;
    DB1.Close;
    Close;       // Form schliessen
  end;
end;
Schönes Beispiel wofür die ganzen Dataset-Methoden da sind. :zwinker:

P.S.: elegant ist eher, die DB in Ruhe zu lassen und die dafür gedachten Methoden auch zu benutzen.

DeddyH 7. Okt 2009 20:19

Re: Anzahl Datensätze einer Tabelle beschränken
 
Woher willst Du bei Deiner Methode denn wissen, dass Du den ältesten DS erwischst? Und wieso fragst Du alle ab? Ich verstehe die Logik dahinter nicht, ehrlich gesagt.

Namenloser 7. Okt 2009 20:29

Re: Anzahl Datensätze einer Tabelle beschränken
 
Zitat:

Zitat von Hansa
P.S.: elegant ist eher, die DB in Ruhe zu lassen und die dafür gedachten Methoden auch zu benutzen.

Ich finde es eleganter, so viel wie möglich von der DB selbst regeln zu lassen.

mkinzler 7. Okt 2009 20:33

Re: Anzahl Datensätze einer Tabelle beschränken
 
Zitat:

Ich finde es eleganter, so viel wie möglich von der DB selbst regeln zu lassen.
Ich auch. Deshalb habe ich auch einen Trigger vorgeschlagen

Jens Hartmann 7. Okt 2009 21:31

Re: Anzahl Datensätze einer Tabelle beschränken
 
Also ich denke das ich es auch mit einem Trigger versuchen werde.
Ich sehe allein den Vorteil darin, das ich jederzeit den Trigger der Datenbank anpassen kann, ohne mein Programm anpacken zu müssen.

Gruß Jens

mkinzler 7. Okt 2009 21:35

Re: Anzahl Datensätze einer Tabelle beschränken
 
Zudem würde das auch unabhängig vom Programm funktionieren


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:27 Uhr.
Seite 1 von 3  1 23      

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