我使用query3.Delete ;来输出记录,结果只是逻辑删除 ( 积分: 100 )

  • 主题发起人 主题发起人 wp231957
  • 开始时间 开始时间
W

wp231957

Unregistered / Unconfirmed
GUEST, unregistred user!
我是用BDE QUERY 链接 DBF数据库
使用query3.Delete ;删除以后,在vfp中打开该表,发现该记录只是加了一个删除标记而已
并没有彻底的删除
该如何解决
 
BDE一向如此,论坛中以前的代码,重新给你发遍。

uses
SysUtils, Windows, Classes, DBTables, DbiTypes, DbiProcs, DbiErrs;

function PackDbfTable(DbfTable: TTable): Boolean;
var
errResult: DBIResult;
begin
try
{ 如果不是以独占方式,操作失败 }
if (not DbfTable.Exclusive) or (not DbfTable.Active) then
begin
Result := False;
exit;
end;
{ 进行删除操作 }
errResult := DbiPackTable(DbfTable.dbHandle, DbfTable.handle, nil, nil, True);
{ 根据返回结果,返回成功与否的标志 }
Result := errResult = DBIERR_NONE;
except
Result := False;
end;
end;
 
不是 BDE 的问题,这是 xBase 数据库(dBase、FoxBase、FoxPro) 的固有特性,目的是为了在必要的时候“反删除”。要彻底删除,必须对数据库进行 pack 操作。
 
function PackDbfTable(DbfTable: TTable): Boolean;
var
errResult: DBIResult;
begin
try
{ 如果不是以独占方式,操作失败 }
if (not DbfTable.Exclusive) or (not DbfTable.Active) then
begin
Result := False;
exit;
end;
{ 进行删除操作 }
errResult := DbiPackTable(DbfTable.dbHandle, DbfTable.handle, nil, nil, True);
{ 根据返回结果,返回成功与否的标志 }
Result := errResult = DBIERR_NONE;
except
Result := False;
end;
end;
////////////////////////////////////////////////////////
我如下代码怎么不成功 呢
//清理数据库----对DELE 进行PACK操作
procedure TSDIAppForm.N18Click(Sender: TObject);
var
ttb:ttable;
begin
ttb:=ttable.Create(self);
ttb.TableName:='base.dbf';
ttb.Exclusive:=true;
if PackDbfTable(ttb) then showmessage('清理数据库成功......');
end;
 
if (not DbfTable.Exclusive) or (not DbfTable.Active) then
...


你的ttb好像没有open吧?
 
汗,果然如此

派分
 
后退
顶部