请问在debase for windows类型数据表中如何彻底删除记录,delphi中有类似pack的方法吗(100分)

  • 主题发起人 主题发起人 hbtim
  • 开始时间 开始时间
如保PACK一个DBF数据库呢?
function PackTable(Table: TTable): Boolean;
var
Props : CURProps;
begin
if not Table.Active then
raise EDatabaseError.Create('Table必需已经打开');
if not Table.Exclusive then
raise EDatabaseError.Create('Table必需以独占方式打开');
Check(DbiGetCursorProps(Table.Handle, Props));//检测数据库类型
if (Props.szTableType = szDBASE) then
begin
Check(DbiPackTable(Table.DBHandle, Table.Handle, nil, szDBASE,
True));
Result := True;
end
else
raise EDatabaseError.Create('Table必需是dBASE或FoxPro类型');
Table.Open;
end;


在程序中的应用方法:
......

Table1.Exclusive := True;//以独占方式打开
Table1.Open;
while not Table1.Eof do Table1.delete;//删除记录
PackTable(Table1);//PACK表
......
欢迎光临『风之纹章-Delphi编程小站』http:ph11.126.com
 
---- 值 得 注 意 的 是, 在 删 除 记 录 时, 如 果 用Table 来 实 现, 则Table 必 须 以Exclusive=True 的 方 式 打 开 . 下 面 就 是 一 个 典 型 的 例 子 .

首先,应在uses语句加上DbiTypes,DbiProcs,DbiErrs.{ Pack一个DBF数据表,DbfTable包含了数据表的信息 }
function PackDbfTable( DbfTable : TTable ) : boolean;
var
errResult : DBIResult;
begin
if not DbfTable.Exclusive then {如果不是以独占方式,操作失败 }
begin
result := false;
exit;
end;
{进行删除操作 }
errResult := DbiPackTable( DbfTable.dbHandle, DbfTable.handle, NIL, NIL, true );

{根据返回结果,返回成功与否的标志 }
if errResult = DBIERR_NONE then {没有错误,操作成功 }
result := true
else{没有错误,操作失败 }
result := false;
end;

 
还要注意要在uses中加入BDE单元.
 
后退
顶部