关于独占设置的一些困惑
看过帮助文件,所谓独占方式打开表就是网络上其他用户不能访问。同时,VFP中有些命令必须再独占方式下才能运行。如INSERT,INSERT BLANK,MODIFY STRUCTURE,PACK,REINDEX 和 ZAP。我的理解,用USE命令打开的表,此时的就是独占状况。同时,按帮助文件说明,独占命令的设置(set exclusive ),不影响已经打开了的表.
我的问题是,表单运行时候,按表单设计时候的加入的表,在表单运行时候就自动随表单运行打开,不需要用户再次打开。用户若要对某个表操作的时候,只需要用SELE 命令指定当前表就可以了。
此时,表的打开方式肯定不是独占,因为,此时运行PACK命令的时候,系统会提示,需要独占方式打开表。
但是我在这里抄的一段代码,却可以直接PACK.代码如下:
(在此前,已经详细检查过表单属性,没没有发现独占命令的设置(set exclusive )
IF MESSAGEBOX("是否删除编号 "+XSINFO.编号+" 的记录",4+48+0,"系统信息")=6
DELETE RECORD RECNO()
=TABLEUPDATE(.T.) && 提交修改.
=CURSORSETPROP('Buffering',1,ALIAS( ))&&该缓冲模式才能用pack
PACK
=CURSORSETPROP('Buffering',5,ALIAS( ))&&改回缓冲模式
IF !EOF()
SKIP
ELSE
IF RECNO()>1
SKIP -1
ENDIF
ENDIF
WITH THISFORM.GRID1
.RECORDSOURCE="XSINFO"
FOR I=1 TO .COLUMNCOUNT
.COLUMNS(I).WIDTH=62
.COLUMNS(I).RESIZABLE=.F.
ENDFOR
ENDWITH
WITH THISFORM
IF RECCOUNT()<=0
.TEXT1.BACKCOLOR=RGB(236,233,216)
.
.
.IMAGE1.PICTURE=SYS(5)+SYS(2003)+"\PICT\HUA.ICO"
ELSE
GO TOP
.GRID1.SETFOCUS
.IMAGE1.PICTURE=SYS(5)+SYS(2003)+"\PICT\"+XSINFO.编号+".ICO"
ENDIF
ENDWITH
ENDIF
THISFORM.REFRESH
还有有一个无法理解的是,我按照这段代码中的思路,应用到其其它表单却无法PACK
IF MESSAGEBOX("是否删除编号 "+XSINFO.编号+" 的记录",4+48+0,"系统信息")=6
DELETE RECORD RECNO()
=TABLEUPDATE(.T.) && 提交修改.
=CURSORSETPROP('Buffering',1,ALIAS( ))&&该缓冲模式才能用pack
PACK
=CURSORSETPROP('Buffering',5,ALIAS( ))&&改回缓冲模式
后来在本论坛找了一下,把本段代码改为:
IF MESSAGEBOX("是否删除编号 "+XSINFO.编号+" 的记录",4+48+0,"系统信息")=6
DELETE RECORD RECNO()
=TABLEUPDATE(.T.) && 提交修改.
=CURSORSETPROP('Buffering',1,ALIAS( ))&&该缓冲模式才能用pack
close tables
use 表名
PACK
=CURSORSETPROP('Buffering',5,ALIAS( ))&&改回缓冲模式
PACK命令可以运行,运行后对应的表格空白。再再代码中加入表格重新设置,表格可以正常显示了。似乎问题可以解决。但是如果换一个表单写入本段代码,在pack命令运行后,系统提示,无法打开表。于是就彻底糊涂。