Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datenbanken packen (https://www.delphipraxis.net/12136-datenbanken-packen.html)

SilverMoonGirl 21. Nov 2003 11:50


Datenbanken packen
 
Hallo@all


Ich möchte gerne das meine Datenbank kleiner wird, wenn ich einen Eintrag lösche.

Kann mir jemand erklären wie man das macht?

Vielen Dank

Sharky 21. Nov 2003 11:57

Re: Datenbanken packen
 
Hai SilverMoonGirl,

was für eine Datenbank hast Du denn?

SilverMoonGirl 21. Nov 2003 12:00

Re: Datenbanken packen
 
eine im Paradox Format

Memo 21. Nov 2003 12:09

Re: Datenbanken packen
 
So gehts.

r_kerber 21. Nov 2003 12:18

Re: Datenbanken packen
 
Hallo Silvermoongirl,

dafür gibt es in der BDE-API die Funktion DbiPackTable.
Beispiel aus der OH:
Delphi-Quellcode:
// Pack a Paradox or dBASE table
// The table must be opened exclusively before calling this function...
procedure PackTable(Table: TTable);
var
  Props: CURProps;
  hDb: hDBIDb;
  TableDesc: CRTblDesc;
begin
  // Make sure the table is open exclusively so we can get the db handle...
  if not Table.Active then
    raise EDatabaseError.Create('Table must be opened to pack');
  if not Table.Exclusive then

    raise EDatabaseError.Create('Table must be opened exclusively to pack');

  // Get the table properties to determine table type...
  Check(DbiGetCursorProps(Table.Handle, Props));

  // If the table is a Paradox table, you must call DbiDoRestructure...
  if Props.szTableType = szPARADOX then begin
    // Blank out the structure...
    FillChar(TableDesc, sizeof(TableDesc), 0);
    // Get the database handle from the table's cursor handle...

    Check(DbiGetObjFromObj(hDBIObj(Table.Handle), objDATABASE, hDBIObj(hDb)));
    // Put the table name in the table descriptor...
    StrPCopy(TableDesc.szTblName, Table.TableName);
    // Put the table type in the table descriptor...
    StrPCopy(TableDesc.szTblType, Props.szTableType);
    // Set the Pack option in the table descriptor to TRUE...
    TableDesc.bPack := True;
    // Close the table so the restructure can complete...
    Table.Close;
    // Call DbiDoRestructure...

    Check(DbiDoRestructure(hDb, 1, @TableDesc, nil, nil, nil, False));
  end
  else
    // If the table is a dBASE table, simply call DbiPackTable...
    if (Props.szTableType = szDBASE) then
      Check(DbiPackTable(Table.DBHandle, Table.Handle, nil, szDBASE, True))
    else
      // Pack only works on PAradox or dBASE; nothing else...
      raise EDatabaseError.Create('Table must be either of Paradox or dBASE ' +

        'type to pack');

  Table.Open;

end;

SilverMoonGirl 21. Nov 2003 14:59

Re: Datenbanken packen
 
Super,
vielen Dank ihr zwei.
:)


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz