高分求教!!如何PACK数据库?

hb9191 2002-12-17 12:09:29
环境:BCB6,ODBC,FOXPRO表Table1,要实现FOXPRO里的PACK功能。
在资料上看到以下调用BDE API方式:

Table1->Active=false;
Table1->Exclusive=true;
Table1->Active=true;
if (DbiPackTable(Table1->DBHandle,Table1->Handle,NULL,szDBASE,true)!=DBIERR_NONE)
ShowMessage("删除失败");
Table1->Active=true;

但实现后,不能清除数据库表。请问如何能够?
...全文
24 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
iris_zhu 2002-12-18
  • 打赏
  • 举报
回复
你说的SQL 可能是指T-SQL吧
hb9191 2002-12-18
  • 打赏
  • 举报
回复
ps: 在 SQL 中好象没有 PACK 这个命令,是我不知道,还是可以用FOXPRO的命令?
hb9191 2002-12-18
  • 打赏
  • 举报
回复
iris_zhu(个个):你的方法可行!!感谢!!这方法不算笨,不一定要随时PACK,
可以过一段时间成批PACK。
DbiPackTable就是不行!谁也没说到底怎么回事。
你的分加定了!我再看看还有什么方法,少后结帐。
every_one 2002-12-18
  • 打赏
  • 举报
回复
mark
iris_zhu 2002-12-18
  • 打赏
  • 举报
回复
原来如此,我一直用的是ODBC,学习

耙子 2002-12-18
  • 打赏
  • 举报
回复
才看到你的 问题 “BCB6,ODBC,FOXPRO”
不要使用ODBC,直接用BDE连接DBF,否则不行。
耙子 2002-12-18
  • 打赏
  • 举报
回复
SQL 肯定是不行的。

DbiPackTable 我很早以前用过,的确可以,当时当时怎么写的的确忘了,只要是独占模式,应该没问题。

12289 3001 Capability not supported.
iris_zhu 2002-12-17
  • 打赏
  • 举报
回复
请问楼上的各位大侠,你们谁真正用过DbiPackTable这个函数真正的删除了数据??
反正我是用这个函数没有成功过,就是按照你们说的办法,但是我使用pack 命令是可以点,不知道为啥?
iris_zhu 2002-12-17
  • 打赏
  • 举报
回复
我的是笨办法连一次断一次执行pack命令,这样可以
TDatabase *dbmiddlegsm;
TQuery *Query_middle;
dbmiddlegsm=new TDatabase(this);
Query_middle=new TQuery(this);
dbmiddlegsm- >DatabaseName= "middlegsm ";
dbmiddlegsm- >Params- >Add( "USER NAME=sa ");
dbmiddlegsm- >Params- >Add( "PASSWORD=sa ");
dbmiddlegsm- >LoginPrompt=false;
dbmiddlegsm- >Open();

Query_middle- >DatabaseName= "middlegsm ";
Query_middle- >SQL- >Text= "delete from biaoma ";
Query_middle- >ExecSQL();
Query_middle- >Close();
dbmiddlegsm- >Close();

Query_middle- >SQL- >Text= "pack biaoma ";
Query_middle- >ExecSQL();
delete Query_middle;
delete dbmiddlegsm;
我曾经也想用那个DbiPackTable,可是怎么都不会呀
hb9191 2002-12-17
  • 打赏
  • 举报
回复
还是不行!我把代码改为:

DBIResult rs;
Table1->Close();
Table1->Exclusive=true;
Table1->Open();
rs = DbiPackTable(Table1->DBHandle,Table1->Handle,NULL,NULL,true);
if (rs==DBIERR_NONE)
ShowMessage("OK");
else
ShowMessage(rs);
Table1->Close();
Table1->Exclusive=false;

执行显示 “12289” 表还是没有被PACK!
rs的值为12289,代表哪个错误码?
都说这么做,可无效!哪位大侠解决了,分数再多多的给!!!
warton 2002-12-17
  • 打赏
  • 举报
回复
楼上说的好,试试看!!
耙子 2002-12-17
  • 打赏
  • 举报
回复
if DbfTable.Exclusive then //如果不是以独占方式,操作失败
begin
   errResult := DbiPackTable( DbfTable.dbHandle, DbfTable.handle, NIL, NIL, true );
   if errResult = DBIERR_NONE then   //没有错误,操作成功
     // success
end;
hb9191 2002-12-17
  • 打赏
  • 举报
回复
SQL的delete只能打上删除标记,不能彻底删除。
Taiji02 2002-12-17
  • 打赏
  • 举报
回复
用TQuery+SQL语句
delete ...

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧