Wie kann ich gelöschte Datensätze aus einer Datenbank entfernen?


Das funktioniert mit folgender Routine aus der RxLib:

uses BDE;

procedure PackTable(Table: TTable);
var
  FCurProp: CurProps;
  TblDesc: CRTblDesc;
  hDb: hDbiDB;
  TablePath: array[0..dbiMaxPathLen] of Char;
  Exclusive: Boolean;
begin
  if not Table.Active then
    _DBError(SDataSetClosed);
  Check(DbiGetCursorProps(Table.Handle, FCurProp));
  if StrComp(FCurProp.szTableType, szParadox) = 0 then begin
    hDb := nil;
    FillChar(TblDesc, SizeOf(CRTblDesc), 0);
    with TblDesc do begin
      StrPCopy(szTblName, Table.TableName);
      StrCopy(szTblType, FCurProp.szTableType);
      bPack := True;
    end;
    Check(DbiGetDirectory(Table.DBHandle, False, TablePath));
    Table.Close;
    try
      Check(DbiOpenDatabase(nil, szCFGDBSTANDARD, dbiReadWrite, dbiOpenExcl, nil, 0, nil, nil, hDb));
      Check(DbiSetDirectory(hDb, TablePath));
      Check(DbiDoRestructure(hDb, 1, @TblDesc, nil, nil, nil, False));
      Check(DbiCloseDatabase(hDb));
    finally
      Table.Open;
    end;
  end else
    if StrComp(FCurProp.szTableType, szDBase) = 0 then begin
      Exclusive := Table.Exclusive;
      Table.Close;
      try
        Table.Exclusive := True;
        Table.Open;
        try
          Check(DbiPackTable(Table.DBHandle, Table.Handle, nil, nil,True));
        finally
          Table.Close;
        end;
      finally
        Table.Exclusive := Exclusive;
        Table.Open;
      end;
    end else
      DbiError(DBIERR_WRONGDRVTYPE);
end;
Delphi 1 Delphi 2 Delphi 3 Delphi 4
nicht getestet Version nicht betroffen getestet

siehe auch:


Delphi FAQ