如何物理删除(即彻底删除)VFoxpro库中的记录?(100分)

  • 主题发起人 主题发起人 何冲
  • 开始时间 开始时间

何冲

Unregistered / Unconfirmed
GUEST, unregistred user!
在Delphi4 或C++ Builder4中如何物理删除(即彻底删除)VFoxpro库中的记录?
 
纯Dbase库好办,BDE帮助里有例子.
VFP库可能需要ODBC API来办了.查一查.
 
请看
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=107330
 
太简单了,你的E_Mail是什么?我E_mail给你一个Demos。
我的是fstao@126.com
 
请注意查收邮箱
 
在Delphi程序中,用TTable或TQuery构件的方法Delete执行删除记录的操作时,
执行的是软删除,即相当于Foxpro中的"Set Delete Off"的效果,仅将记录用星号"*"标记为删除,实际并没有数据库中进行物理上的删除.要进行真正的删除,需要进行Pack Table的操作.
  在Delphi程序中真正删除记录,需要调用BDE函数,函数名为DbiPackTable,函数原型为:
function DbiPackTable ( hDb : hDBIDb;hCursor : hDBICur; pszTableName : PChar; pszDriverType : PChar; bRegenIdxs : Bool ): DBIResult;
其中,hDb为数据库TDatabse的句柄,hCursor为数据表TTable的句柄,pszTableName为要删除记录的数据表的名称,pszDriverType为要删除记录的数据表的类型,bRegenIdxs表示是否在删除记录后自动更新索引文件.
  在上面前四个参数中,hDb不能为NULL.hCursor、pszTableName、pszDriverType可以为NULL,但必须提供足够的信息来标识数据表的文件名称和类型,当hCursor不为空时,pszTableName和pszDriverType可以为NULL;当pszTableName为数据表的路径和文件名时,hCursor和pszDriverType可以为NULL
 
另外还应该值得注意的是,在用Table来实删除记录时,则Table必须以Exclusive=True的方式打开.
 
以C++Builder代码能清除当前数据库中以打上删除符号的纪录。

void _fastcall TForm1::Button1Click(TObject *Sender)
{
Table1->Active=false;
Table1->Exclusive=true;
Table1->Active=true;
if(DbiPackTable(Table1->DBHandle,Table1->Handle,
NULL,szDBASE,true)!=DBIERR_NONE
ShowMessage("Delete ERROR!");
}
请你转化为Delphi即可
 
1.在uses 中加入DBITYPES,DBIPROCS,DBIERRS
2.物理删除
Table1.close;
dbipacktable(Table1.dbHandle,Table1.Handle,'TableName.dbf',xzDBASE,TRUE);
Table1.open;
 
接受答案了.
 

Similar threads

回复
0
查看
978
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部