执行了这句语后(Query1.SQL.Add('delete from "e:\stockacc.dbf"'Query1.ExecSQL;);,如何才能真正删除FOX数据库中的记录。而不仅仅是做 执行了这句语后(Query1.SQL.Add('delete from "e:\stockacc.dbf"'Query1.ExecSQL;);,如何才能真正删除FOX数据库中的记录。而不仅仅是做个删除标记?谢谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你再看下列代码,或看一下:http://www.codelphi.com/hanyi/jiqiao/112.htmlunit Unit1;interfaceusesbde,typeprocedure PackTable(FTable:TTable);//数据库彻底删除=========================procedure Tform1.PackTable(FTable:TTable);varProps: CURProps;hDb: hDBIDb;TableDesc: CRTblDesc;beginFTable.Active := False;{当数据库打开失败时,这个循环语句能够让用户重试}repeattryftable.Exclusive := True;ftable.Active := True;{如果正常打开数据库,则退出循环}Break;excepton EDatabaseError doif Application.MessageBox('以独占方式打开数据库时,出现错误---重试否?','数据库错误',MB_OKCANCEL + MB_DEFBUTTON1) <> IDOK thenExit;end;until False;try{Check()用于校正和报告DBI底层错误;DbiGetCursorProps()用于取表光标属性}Check(DbiGetCursorProps(FTable.Handle, Props));// 获得表的属性已得到表的类型{如果是Paradox 表, 必须调用 DbiDoRestructure,重建数据库结构}if (Props.szTableType = szPARADOX) thenbeginFillChar(TableDesc, sizeof(TableDesc), 0);{从数据表光标获取数据库句柄}Check(DbiGetObjFromObj(hDBIObj(FTable.Handle), objDATABASE, hDBIObj(hDb)));{设置表的描述结构的Name/Type/bPack属性}StrPCopy(TableDesc.szTblName, FTable.TableName);StrPCopy(TableDesc.szTblType, Props.szTableType);TableDesc.bPack := True;{关闭表并调用api}FTable.Close;Application.ProcessMessages;Check(DbiDoRestructure(hDb, 1, @TableDesc, nil, nil, nil, False));Application.ProcessMessages;FTable.Open;end{ 如果是 dBASE 表, 只需要调用DbiPackTable...}elseif (Props.szTableType = szDBASE) thenbeginApplication.ProcessMessages;check(DbiPackTable(FTable.DBHandle, FTable.Handle, nil, szDBASE, True));Application.ProcessMessages;end{不是dBase和Paradox表}elseraise EDatabaseError.Create('数据库必须是 Paradox 或者 dBASE 类型,才能进行物理删除操作!!');finallyFTable.Active := False;FTable.Exclusive := False;FTable.Active := True;end;end; 关于连接access的若干问题。。。。。 ★Socket通信如何发送字符串?? 关于WIN2000 professional与SQL Server2000的问题 如果隐藏程序进程 怎样用delphi调出IE? 怎样知道要发布什么包? 为何把文本导入access数据库时很慢?在线等待!!!!!! 控件问题 在delphi6下用com+开发的应用程序的问题 delphi TCp向netty发送数据 请问一个DLL的问题? 有哪位用DELPHI的朋友,把DELHPI自带的一个图标库(ICO和BMP)打包一下,有急用.!!先谢了
bde,type
procedure PackTable(FTable:TTable);//数据库彻底删除=========================
procedure Tform1.PackTable(FTable:TTable);
var
Props: CURProps;
hDb: hDBIDb;
TableDesc: CRTblDesc;
begin
FTable.Active := False;
{当数据库打开失败时,这个循环语句能够让用户重试}
repeat
try
ftable.Exclusive := True;
ftable.Active := True;
{如果正常打开数据库,则退出循环}
Break;
except
on EDatabaseError do
if Application.MessageBox('以独占方式打开数据库时,出现错误---重试否?','数据库错误',MB_OKCANCEL + MB_DEFBUTTON1) <> IDOK then
Exit;
end;
until False;
try
{Check()用于校正和报告DBI底层错误;DbiGetCursorProps()用于取表光标属性}
Check(DbiGetCursorProps(FTable.Handle, Props));// 获得表的属性已得到表的类型
{如果是Paradox 表, 必须调用 DbiDoRestructure,重建数据库结构}
if (Props.szTableType = szPARADOX) then
begin
FillChar(TableDesc, sizeof(TableDesc), 0);
{从数据表光标获取数据库句柄}
Check(DbiGetObjFromObj(hDBIObj(FTable.Handle), objDATABASE, hDBIObj(hDb)));
{设置表的描述结构的Name/Type/bPack属性}
StrPCopy(TableDesc.szTblName, FTable.TableName);
StrPCopy(TableDesc.szTblType, Props.szTableType);
TableDesc.bPack := True;
{关闭表并调用api}
FTable.Close;
Application.ProcessMessages;
Check(DbiDoRestructure(hDb, 1, @TableDesc, nil, nil, nil, False));
Application.ProcessMessages;
FTable.Open;
end
{ 如果是 dBASE 表, 只需要调用DbiPackTable...}
else
if (Props.szTableType = szDBASE) then
begin
Application.ProcessMessages;
check(DbiPackTable(FTable.DBHandle, FTable.Handle, nil, szDBASE, True));
Application.ProcessMessages;
end
{不是dBase和Paradox表}
else
raise EDatabaseError.Create('数据库必须是 Paradox 或者 dBASE 类型,才能进行物理删除操作!!');
finally
FTable.Active := False;
FTable.Exclusive := False;
FTable.Active := True;
end;
end;