Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datensatz aus DBase endgültig löschen (https://www.delphipraxis.net/23099-datensatz-aus-dbase-endgueltig-loeschen.html)

ak1 28. Mai 2004 18:05


Datensatz aus DBase endgültig löschen
 
Hallo Leute,

wenn ich über eine TQuery-Komponente in einer DBase-Tabelle mit einer "delete from table1 where nummer=0" -Anweisung mehrere Datensätze lösche, dann sind diese in der DBase Oberfläche immer noch zu sehen aber als gelöscht markiert. Wenn ich diese DBase-Datei in EXCel oder der BDE-Oberfläche öffne, dann sind diese Datensätze nicht zu sehen. DBase scheint diese Datensätze aber noch zu speichern, da sich die Größe (bytegröße) der Tabelle auch nicht ändert.

Lange Rede kurzer Sinn: Wie kann ich mit einer TQuery-Komponente diese Datensätze endgültig löschen?


Gruß AK

Gollum 28. Mai 2004 18:33

Re: Datensatz aus DBase endgültig löschen
 
Hallo,

Delphi-Quellcode:
uses
  BDE, DB, DBTables, DBITypes;

function PackDBFTabelle(aTable:TTable):Bool;
var excl:Bool;
begin
  Result:=True;
  with aTable do
  begin
    excl:=Exclusive;
    try
      DisableControls;
      Close;
      if not excl then Exclusive:=True;
      try
        Open;
        Check(DBIPackTable(DbHandle, Handle, PChar(TableName), szDBASE, TRUE));
      except
        on E:EDBEngineError do
        begin
          ShowMessage(E.Message);
          Result:=False;
        end; // on
      end; // try
    finally
       Close;
      Exclusive:=excl;
      Open;
      EnableControls;
    end; // try
  end; // with aTable
end; // PackDBFTabelle

ak1 28. Mai 2004 18:44

Re: Datensatz aus DBase endgültig löschen
 
Damit wird sie dann kompriert und verliert ihre "alten" Datensätze?
Werde es mal demnächst ausprobieren.
Gruß

kiar 28. Mai 2004 19:24

Re: Datensatz aus DBase endgültig löschen
 
hallo gollum,

erwartet die check funktion nicht einen rückgabewert als dbiresult?

Gollum 29. Mai 2004 08:25

Re: Datensatz aus DBase endgültig löschen
 
Hallo,

@kiar:

Check ist in der Unit DBTables folgendermassen deklariert:
Delphi-Quellcode:
procedure Check(Status: DBIResult);
begin
  if Status <> 0 then DbiError(Status);
end;
Ich denke, das beantwortet Deine Frage.

ak1 1. Jun 2004 08:55

Re: Datensatz aus DBase endgültig löschen
 
Klappt übrigens sehr gut. :thuimb:


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