讨论:关于VFP物理删除记录问的的讨论

spker 2005-06-04 09:47:44
请用VFP的人来讨论一下,关于VFP记录逻辑删除和物理删除区分是好还是不好呢?
我个人认为这个功能实在是太烂了,delete后还得用pack来物理删除,在访问多表的表单中问题很多,不是文件正在使用,就是不能访问指定表,为了解决这个问题不得不编写大段的代码来处理工作区的问题,有时还不能正常工作,有时正常了,下次打开又有问题了,真是让人头大,不知微软为什么要这样搞出个这样麻烦的东东来。
请大家发表一下意见,这是好还是不好呢?有没有人可以给出个完美的解决方法来。
...全文
648 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
spker 2005-06-08
  • 打赏
  • 举报
回复
JohnShen(因果网)的方法果然好,小弟学艺不精,忽视了用Filter,感谢大家在此的讨论。
fj_jiangqi 2005-06-08
  • 打赏
  • 举报
回复
远程服务型数据库的pack是由服务端软件自动完成的。我猜的。
LAIYANGPJ 2005-06-08
  • 打赏
  • 举报
回复
对于远程根本就不用PACK了。
rayhua 2005-06-08
  • 打赏
  • 举报
回复
学习中……
十豆三 2005-06-08
  • 打赏
  • 举报
回复
fj_jiangqi(强盗)
说的非常有道理,对于一个数据量非常大的数据表,如果执行PACK,这样速度会非常慢。

所以建议用SET DELETE ON

而且对一个数据量非常大的数据表进行添加数据,如果把逻辑删除的记录替换为要加入的数据,这个方法要大大快于appned blank.
十豆三 2005-06-07
  • 打赏
  • 举报
回复
对于帖主的开发习惯,可能有些不方便。

个人感觉微软这么做,还是有必要的。虽然麻烦点,可是是出于安全性考虑的。
而且在很多情况下还可以利用这种麻烦特点。

所以主要问题在于需求,只有需求定了,才能决定用:
SET DELET ON

PACK

只有需求定了,才知道PACK是有必要还是多余的。
xclzteb 2005-06-07
  • 打赏
  • 举报
回复
其实只要活学活用就可以解决问题了。
JohnShen 2005-06-07
  • 打赏
  • 举报
回复
对于唯一索引问题,我曾经是这样解决的,在索引的Filter选项处加上条件:
.NOT. DELETED()
这样索引将只判断未删除记录的唯一性了。
fj_jiangqi 2005-06-07
  • 打赏
  • 举报
回复
pack只能在独占下运行,共享数据尽量不要使用。
添加记录前可把一些已经逻辑删除的记录拿来用一用,这是我常用的方法,参考。
xuzuning 2005-06-07
  • 打赏
  • 举报
回复
关于VFP记录逻辑删除和物理删除区分是好还是不好呢?
这个问题要这样看
1、vfp沿用了dbase的这种方式,并非微软的首创。起码得照顾一下老程序员吧?
2、存在逻辑删除和物理删除至少可以使你有反悔的机会,也可减少误删除的概率
3、由此带来的DELETED()函数可以使你有更多的展现技巧的手段
4、其实这只是早期为解决计算机速度慢的手段。“逻辑删除”只是在记录中设一标志,而“物理删除”是要重写整个文件的
cxmcxm 2005-06-06
  • 打赏
  • 举报
回复
数据既然是等着恢复,索引当然要算上删除的记录,相当于你的电话报停后,别人装新电话不能使用你的号码,但如果你将电话取消,电信局将物理删除你的电话号码.
定期pack数据是数据维护的好方法.
guywei 2005-06-06
  • 打赏
  • 举报
回复
我也是经常遇到spker(spker)所说的问题, 我觉得如果不会引起索引唯一性问题的话, 一切问题都解决了
VFoxPro 2005-06-06
  • 打赏
  • 举报
回复
Set Delete On

Open Database DbName Shared

Close Database All

从不使用 Pack, 仅在系统维护里面,可能有一个“数据整理”或者“数据压缩”功能,是依次 Exclusive 打开每一个表,并 PACK 的。

这样,在万一需要改为 F/S 多用户版时,完成不需要改动代码。
cpuzky 2005-06-06
  • 打赏
  • 举报
回复
上面的说得很有道理
LuckyNT 2005-06-05
  • 打赏
  • 举报
回复
我感觉
用在sum,average命令时筛选纪录用for语句表示太冗长就可以用到逻辑删除了
spker 2005-06-05
  • 打赏
  • 举报
回复
问题在于,如果用了set delete on,但在插入记录的时候,会造成索引的重复问题,似乎set delete on 忽视了索引重复的问题,是不是也有相关的命令也可以解决索引重复的问题而我不知道。
cxmcxm 2005-06-05
  • 打赏
  • 举报
回复
正常情况下应设为
set delete on

set delete off 只用于数据恢复,
如果一直用set delete off,删除与不删除的记录都可见,哪创建vfp的人不成了大SB
cxmcxm 2005-06-05
  • 打赏
  • 举报
回复
其实,搞出逻辑删除与物理删除的初衷,主要是为了数据安全.
对pack不建议经常使用,最好由系统管理员管理数据.
一般的数据操作,用不用pack无所谓
cdbqss1 2005-06-05
  • 打赏
  • 举报
回复
如果无需理会已经逻辑删除的记录,可以用set dele on 或set filter to not dele()来过滤.

2,748

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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