若用Ttable元件的Delete 方法删除一条记录,则Delphi 在该条记录的物理位置的首部用“*”打上
标记(正如用Foxpro或Dbase的Del命令一样),TTable中删除记录后,没有真正删除.
用DbiPackTable 进行彻底地物理删除,
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids, DBGrids, Db, DBTables,dbitypes;
//首先应在USES语句中加上DBITYPES
type
TForm1 = class(TForm)
Table1: TTable;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
table1.tablename:='c:2/8/sbk2.dbf';
table1.open;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
dbipacktable(table1.dbhandle,table1.handle,nil,nil,true);
//在OBJECT INSPECTOR中EXCLUSIVE属性为TRUE
end;
end.
注意: 若在DELPHI IDE中, TABLE1的ACTIVE应为FALSE;
在程序中执行table1.open,来打开数据库, 否则在执行程序是会提示TABLE IS BUSY.
原因是在IDE中已经打开的TABLE, 无法的独占地打开TABLE.