| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1859 人关注过本帖
标题:关于独占设置的一些困惑
取消只看楼主 加入收藏
总是出错
Rank: 2
等 级:论坛游民
威 望:1
帖 子:248
专家分:24
注 册:2012-12-24
结帖率:73.47%
收藏
已结贴  问题点数:20 回复次数:4 
关于独占设置的一些困惑
看过帮助文件,所谓独占方式打开表就是网络上其他用户不能访问。同时,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命令运行后,系统提示,无法打开表。于是就彻底糊涂。

搜索更多相关主题的帖子: 打开 编号 表单 命令 运行 
2020-08-30 22:51
总是出错
Rank: 2
等 级:论坛游民
威 望:1
帖 子:248
专家分:24
注 册:2012-12-24
收藏
得分:0 
有高手可以对独占方式详细的讲解一下吗?谢谢!
2020-08-30 22:53
总是出错
Rank: 2
等 级:论坛游民
威 望:1
帖 子:248
专家分:24
注 册:2012-12-24
收藏
得分:0 
回复 3楼 sdta
谢谢!
2020-08-31 20:26
总是出错
Rank: 2
等 级:论坛游民
威 望:1
帖 子:248
专家分:24
注 册:2012-12-24
收藏
得分:0 
回复 3楼 sdta
看了。这部分我理解。
=TABLEUPDATE(.T.) && 提交修改.
   =CURSORSETPROP('Buffering',1,ALIAS( ))&&该缓冲模式才能用pack
   PACK
   =CURSORSETPROP('Buffering',5,ALIAS( ))&&改回缓冲模式
问题是我在原来的示例表单里,没有找到表打开的方式设置。但是却可以删除记录。如果我把这个段代码应用到其它表单,又无法实现PACK.表单属性中又没有对表打开的方式的设置。再次谢谢!
2020-08-31 20:37
总是出错
Rank: 2
等 级:论坛游民
威 望:1
帖 子:248
专家分:24
注 册:2012-12-24
收藏
得分:0 
回复 3楼 sdta
基本解决了,是不是彻底的解决问题或者是不是最佳解决办法还待高手来指正。
第一,关于独占和PACK命令,关系非常清楚,如果不是独占方式打开表,PACK命令无法执行。
我是用这样的两个方法来解决PACK命令运行的。
方法一,在表单属性LOAD EVENT 里面键入 USE 表名
如果启用了缓冲模式,在PACK则按缓冲规则关闭缓冲,然后PACK ,再改会缓冲模式。运行通过。目前没有发现问题。

******************************************************************************

方法二,IF MESSAGEBOX("是否删除 "+城市表.城市名+" 的记录",4+48+0,"系统信息")=6
   DELETE RECORD RECNO()
   =TABLEUPDATE(.T.) && 提交修改.            
   =CURSORSETPROP('Buffering',1,ALIAS( ))            &&关闭行缓冲何表缓冲模式才能用pack
   CLOSE TABLES                                       &&关闭表
   USE c:\工人管理系统\工人管理系统数据文件\城市表     &&独占方式打开表
   PACK                                                &&物理删除命令
   =CURSORSETPROP('Buffering',5,ALIAS( ))               &&改回缓冲模式
   WITH THISFORM.GRDI1                                  &&重新设置表格,注意如果不重新设置,表格会呈空白状
      .RECORDSOURCE="城市表"
      .COLUMN1.WIDTH=78
      .COLUMN2.WIDTH=180
      .COLUMN3.WIDTH=180
   ENDWITH
注意此方法,表单的Destroy Event(释放对象时)不能有 如下命令
=TABLEUPDATE(.T.)
CURSORSETPROP("BUFFERING",1,"XSINFO") &&关闭缓冲
如果有,则在退出表单的时候,系统会提示工作区没有打开的表。
2020-09-01 00:50
快速回复:关于独占设置的一些困惑
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025944 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved