白菜求助 !

pig_bird 2001-02-06 09:45:00
各位同志前辈,本人原与Foxpro交好,初学Delphi未久,一日用Delhpi删除表中记录时,发现未能尽果,只标记于前,后查帮助,少一函数,用之,依然如故,代码如下,请赐教 !


procedure TForm1.deleteClick(Sender: TObject);
begin
with table1 do
begin
delete;
close;
exclusive:=true;
dbipacktable(table1.dbhandle,table1.handle,nil,nil,true);
exclusive:=false;
open;
end;
end;

能否给我一个测试通过的例子 ?

...全文
410 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
pig_bird 2001-02-11
  • 打赏
  • 举报
回复
To jingpingyi :
对于兄台的帮助,小弟非常非常感激,谢谢 !
pig_bird 2001-02-09
  • 打赏
  • 举报
回复
用 SQL 一样无法彻底删除表中记录 !
pig_bird 2001-02-09
  • 打赏
  • 举报
回复
to getit911:
请问英雄能否给小弟一个简单地例子,谢谢啦 !!!
jingpingyi 2001-02-09
  • 打赏
  • 举报
回复
你建立一个简单的数据表,比如 test.dbf(id char(2), name char(10))
然后,添加几条记录。
编写程序时,把TTable的exclusive设为true(不要动态设置)
再后,用我上面的函数及调用方法,试着删除看。

--------------------

我想,你一定在其他地方打开了表,又没有关闭。
你在设计的时候把TTable的exclusive设为true,然后设Active为true,
看看是否出现busy,不出,说明在程序运行中,打开了表,没有关闭,
然后就做了你上面的操作。

如果您确认程序没有问题,试着编译完程序后,关机->开机->运行您的程序
->删除记录->关闭退出您的程序->看看是否真的删除。

------------------

cooer 2001-02-09
  • 打赏
  • 举报
回复
?
cooer 2001-02-09
  • 打赏
  • 举报
回复
!
pig_bird 2001-02-09
  • 打赏
  • 举报
回复
还有没有别的办法啊 ?
pig_bird 2001-02-08
  • 打赏
  • 举报
回复
哪位高人给看看,问题究竟出在哪里 ?
pig_bird 2001-02-08
  • 打赏
  • 举报
回复
to bcb:
procedure TForm1.deleteClick(Sender: TObject);
begin
with table1 do
begin
delete;
close;
exclusive:=true; // 独占
** dbipacktable(table1.dbhandle,table1.handle,nil,nil,true);
exclusive:=false;
open;
end;
end;

如果将带**的代码改为check(dbipacktable(table1.dbhandle,table1.handle,nil,nil,true));
出现错误提示:Invalid Handle !

请问是什么原因,问题是否出在 table 呢 ??
pig_bird 2001-02-08
  • 打赏
  • 举报
回复
我无法给更多的分,以后补上,请帮帮忙 !
getit911 2001-02-08
  • 打赏
  • 举报
回复
删除记录可以用Sql中的 Delete命令
pig_bird 2001-02-08
  • 打赏
  • 举报
回复
怎么没人回应 ?
pig_bird 2001-02-08
  • 打赏
  • 举报
回复
怎么没人回应 ?
pig_bird 2001-02-08
  • 打赏
  • 举报
回复
哪路英雄能帮小弟一把,感激不尽 !!!
pig_bird 2001-02-07
  • 打赏
  • 举报
回复
注明一下:

通过单步跟踪发现,前面的代码均已通过,出现的 “ False ” 是第二个False,也就是在执行if errResult=dbierr_none then 时出现的,请帮助分析一下 !
pig_bird 2001-02-07
  • 打赏
  • 举报
回复
to jingpingyi:

非常感谢你的帮助,可是问题依旧,Delphi的帮助我也看了,我简化了一下,麻烦给看看问题出在哪里,代码如下:

Function Packdbftable(table1:TTable):boolean;
var
errResult: DBIResult;
begin
if not table1.Exclusive then
begin
result:=false;
showmessage('false !');
exit;
end;
errResult:=DbiPackTable(Table1.DBHandle, Table1.Handle, nil, szdbase, True);
if errResult=dbierr_none then
begin
result:=true;
showmessage('ok !');
end
else
begin
result:=false;
showmessage('false !');
end;

end;

procedure TForm1.dClick(Sender: TObject);
begin
Table1.Delete;
Table1.Close;
Table1.Exclusive := true;
PackdbfTable(Table1);
Table1.Exclusive := false;
table1.open;
end;

结果是:False !
pig_bird 2001-02-07
  • 打赏
  • 举报
回复
to jingpingyi:

我已经试过了,如果在 PackdbfTable(Table1); 前面加上 Table1.open; 出现错误提示:

Table is busy ! (此时并没有其他程序访问该表)。
jingpingyi 2001-02-07
  • 打赏
  • 举报
回复
//修改
procedure TForm1.dClick(Sender: TObject);
begin
Table1.Delete;
Table1.Close;
Table1.Exclusive := true;
Table1.open; //添加
PackdbfTable(Table1);
Table1.Close; //添加
Table1.Exclusive := false;
table1.open;
end;

//Table应该在open状态,函数才起作用。

要不,您在packdbftable()中添加:
//最前面
if not table.Active then
try
table.open;
except
result := false;
end;

...

//最后面
table.Close;

========================
试试,祝好运!
pig_bird 2001-02-07
  • 打赏
  • 举报
回复
哪位高人给看看,问题究竟出在哪里 ?
pig_bird 2001-02-07
  • 打赏
  • 举报
回复
to bcb:
将“open;”去掉后不再出现 busy 的提示,但是最后用Foxpro打开表看,还是只加了个删除记录而已,依然没有彻底删除记录,是不是对Ttable控件的属性有什么要求,你能给我一个你测试通过例子吗,谢谢了 !
加载更多回复(6)

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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