注册 登录
编程论坛 VFP论坛

关于删除命令的一点心得

总是出错 发布于 2020-08-31 21:38, 2882 次点击
VFP中,删除分为物理删除和标记删除 。物理删除的命令为PACK和ZAP.PACK命令是在标记删除的基础上进行的,是对部分记录进行物理删除。PACK命令运行后。被删除的记录无法恢复。ZAP 则是把整个表的记录全部物理删除,不需要先进行标记删除。
值得注意的是,这两个命令的运行前提是:表需要独占打开。而且PACK命令是在标记删除(delete)命令的基础上进行的。
而标记删除则是对部分记录打上一个删除标记,生效否需要用SET DELETE对表进行设置。.当设置为ON时,又删除标记的记录就不会显示,也不会被其它命令访问,操作上等同于删除了。删除标记可以取消,取消后表记录等同于正常记录。但是如果用PACK命令的时候,不管SET DELETE 的设置如何,又删除标记的记录均会被物理删除,而且无法恢复。
说真心话,我对独占方式打开表的问题一直没有搞得太清楚。所以对用PACK命令一直时心存畏惧。只有用笨办法,在表单操作的时候,只用DELETE命令。补救办法是在程序打开或者运行后,再用独占方式打开表进行物理删除。再表单中用PACK命令,表格会呈空白状,当然也可以恢复,但是如果此时是在缓冲得条件下,马上就会面临无法找到表的囧况。(表已经被独占了,SELE命令无法把表装入当前工作区)
5 回复
#2
wengjl2020-09-01 08:36
PACK为什么要独占,因为PACK后,表中的记录的物理次序从被彻底删除的第一条记录开始,后面的记录的物理序号均被重新排列了,所以必须要独占。标记删除,表中的记录物理排序是没有任何变化的。
#3
wengjl2020-09-01 09:03
如果不是独占,就可以PACK的话,举个例子,一个表中有1000条记录,那系统内部(或表的内部)有一个ID号(这个ID是人们看不见)是1-1000的。当第5、6二条记录被你PACK了,表内的ID号变成了1-998了,1-4号的记录系统的记忆不变,7--1000号的记录系统的记忆变都变了,但系统中需要数据时(别的用户),还是按7--1000来查找的,结果是第999号、1000号的数据找不到会出错,其他数据虽能找到,但也是出错了--张冠李戴了。所以美国佬设计时规定要独占是必须的。
换一角度来理解:就是你家中的物品有序地放着,用时很易找,某一天,你老婆把物品的摆放打乱了一下,没诉你,当你某刻急需时,是无法在短时找到。如果你老婆把重新放置的规则告诉你,你就易找到了。表独占后再打开,等于是告知物品存放位置变过了……
#4
总是出错2020-09-02 03:44
回复 3楼 wengjl
谢谢告知
#5
gs25367856782020-10-10 14:49
这位朋友可能是不清楚什么是独占,什么是共享?
VF程序应用在单机工作方式,就应当设置成独占
独占的含意就是你一个人使用。
VF程序应用在网络工作方式,就应当设置成共享
共享的含意就是许多人都可以使用。
如何设置成独占与共享?有二个办法
代码方式与菜单方式
代码方式
SET EXCLUSIVE ON&&&&独占
SET EXCLUSIVE OFF&&&&共享
菜单方式
只有本站会员才能查看附件,请 登录
#6
schtg2020-10-10 18:41
学习啦,谢谢!
1