Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Alle Datensätze mit veraltetem Datum löschen (https://www.delphipraxis.net/137891-alle-datensaetze-mit-veraltetem-datum-loeschen.html)

SoD 30. Jul 2009 14:17

Datenbank: Paradox • Version: 7 • Zugriff über: BDE

Alle Datensätze mit veraltetem Datum löschen
 
Hallo DPler,

ich hatte die Idee einen TV Show Reminder in Delphi zu schreiben, der auf eine simple Datenbank zugreift. Mir ist bewusst, dass Paradox verrufen ist, aber das ist nun mal Vorgabe.

Laut dem Delphi-Treff kann man einen Datensatz aus der Table einfach mit .Delete löschen. Soweit so gut, nur jetzt bekomm ich ständig Exceptions "Bei leerer Datenmenge nicht möglich". Ich hab versucht das mit If-Abfragen abzufangen, was folgendermaßen aussieht:

Delphi-Quellcode:
if not Table1.Eof = true then begin
    if Table1.FieldByName('Datum').AsDateTime < Now then //Abgelaufene Daten automatisch löschen
  begin
    if MessageDlg('Veraltete Datensätze gefunden. Löschen?',mtConfirmation,mbYesNo,0,mbYes) = mrYes then
      for I := 0 to Table1.Fields.Count - 1 do
        Table1.Delete;
  end;
  end;
Chaotisch, ich weiß, aber ich arbeite dran. Wird beim Fragedialog Nein Gedrückt passiert nichts: Gut! Aber sobald die Table Datensätze enthält und mit einem Klick auf Ja die veralteten Datensätze entfernt werden, kommt genannter Fehler, falls dadurch jeder Datensatz entfernt wird. Ich vermute mal, da steckt wieder irgendwo der Wurm in der Schleife, nur find ich ihn nicht wirklich.

Über Tipps wär ich sehr dankbar!

MfG,
SoD

mkinzler 30. Jul 2009 14:20

Re: Alle Datensätze mit veraltetem Datum löschen
 
Delphi-Quellcode:
While not Table.Eof do
begin
    if Table1.FieldByName('Datum').Value < Now then Table1.Delete else Table.Next;
end;

DeddyH 30. Jul 2009 14:22

Re: Alle Datensätze mit veraltetem Datum löschen
 
Wieso das Next im else-Zweig? Das müsste doch eine Endlosschleife produzieren, oder täusche ich mich?

[edit] Achnee, der nächste Datensatz wird ja dann zum aktiven, sry [/edit]

SoD 30. Jul 2009 14:59

Re: Alle Datensätze mit veraltetem Datum löschen
 
Vielen Dank für die schnelle Antwort, hat geklappt! :D

omata 30. Jul 2009 16:07

Re: Alle Datensätze mit veraltetem Datum löschen
 
Warum wird hier nicht einfach ein SQL-Statement abgesetzt?
Delphi-Quellcode:
Query.SQL.Text:='DELETE FROM tabelle WHERE datum < :datum';
Query.ParamByName('datum').asDateTime:=Now;
Query.ExecSQL;

mkinzler 30. Jul 2009 16:28

Re: Alle Datensätze mit veraltetem Datum löschen
 
Würde ich grundsätzlich auch so machen, bei der BDE ist es aber eh egal


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