主题:文件已在另一个工作区打开
hrduan268
[专家分:0] 发布于 2009-10-09 13:40:00
修改删除表单的form1的init事件:
thisform.grid1.recordsource="客户表"
thisform.grid1.recordsourcetype=0
删除按钮事件:
delete
pack
thisform.grid1.recordsource="客户表"
thisform.refresh
thisform.grid1.refresh
运行“修改删除”表单,grid表格显示客户资料,当选定某行使其左边小格变黑时,点“删除”按钮,老是提示“文件已在另一个工作区打开”。不知如何修改,要保证删除数据时,grid1表格要实时更新数据。我试过加上close all语句还是不行。
程序在c:\kehu下。
最后更新于:2009-10-09 13:59:00
回复列表 (共10个回复)
沙发
sywzs [专家分:5650] 发布于 2009-10-09 14:57:00
在删除按钮事件的第一行加一句 "sele 客户表" 试试。
板凳
sywzs [专家分:5650] 发布于 2009-10-09 15:23:00
把表格属性 recordsourcetype 设为 1 (别名)
3 楼
hrduan268 [专家分:0] 发布于 2009-10-09 20:14:00
这样似乎可以,但在表格左边选中变成小黑格时,再点删除,会删除两条记录,不知如何:
close all
use 客户表
delete
pack
thisform.refresh
thisform.grid1.refresh
close all
thisform.grid1.recordsource="客户表"
thisform.grid1.recordsourcetype=0
4 楼
hrduan268 [专家分:0] 发布于 2009-10-09 22:14:00
试了下这样也是不行,点删除按钮,会把第一条和所选中的哪一条一起删掉,不知怎办,就差这点了。
close all
use 客户表
thisform.grid1.recordsource=null
dele
pack
close all
thisform.grid1.recordsource="客户表"
thisform.grid1.recordsourcetype=0
thisform.refresh
thisform.grid1.refresh
5 楼
dfwxj [专家分:270] 发布于 2009-10-10 23:26:00
几个问题同时存在:
1、删除珍格中的表记录,若要彻底删除,必须先把表格的数据源置空
2、尽量不要用删除标记
3、要明确指定表和记录
4、执行操作后及时写盘
6 楼
hrduan268 [专家分:0] 发布于 2009-10-11 21:39:00
没有具体方案么?
7 楼
sywzs [专家分:5650] 发布于 2009-10-12 06:31:00
建议:
1、程序的开头先设置 set dele on
2、程序运行期间不要使用 pack 命令。
3、关闭程序前再用 pack 更新数据,清除所有做了删除标记的记录。
8 楼
Ilikefox [专家分:5770] 发布于 2009-10-12 16:52:00
哇,这样用Grid,难怪问题多多,Grid可是VFP最诡异的控件,这里就事论事,说说原因:
首先你直接设置了RecordSourceType为0(表类型),设置了RecordSource为客户表。这将在Grid初始化时打开表。接着form1初始化时thisform.grid1.recordsource="客户表",这再次设置RecordSource为客户表,因为客户表已经打开,于是系统改换工作区再次打开客户表,相当于USE命令带again子句。这种情况下已经不允许pack物理删除了,会提示“已在另一个工作区打开”。有趣的是在删除命令后,又有thisform.grid1.recordsource="客户表",所以如果出错中止,实际上有两个工作区打开同一张客户表;如果忽略错误继续,Grid更怪异的行为就来了,它将再次更换工作区打开客户表。
就事论事,说说常规方式使用Grid的一种代码写法(当然还有其它的),解决你的问题
1.设置Grid的RecordSourceType为1,RecordSource为null
2.form1的init事件:
use 客户表 in 0 &&前提是之前没有打开过客户表
thisform.grid1.recordsource="客户表"
3.删除按钮事件:
IF DELETED()
thisform.grid1.recordsource=null
PACK
thisform.grid1.recordsource="客户表"
thisform.refresh
ENDIF
4.form1的unload事件:
use in 客户表
你已经设置了Grid的ColumnCount为9,请设置每个Header的Caption为对应字段的名称。
9 楼
hrduan268 [专家分:0] 发布于 2009-10-13 11:23:00
前晚奋战了一下,终于找到了解决的方法。无意看到书上insert语句,既然会连第一条删除,何不在第一条之前插入一条空记录呢,点删除就会把第一条空记录和选中的记录删除了,避免了删除原来有数据的第一条记录。我为我的想法高兴。下面是针对我在4楼的出错:
close all
use 客户表 &&打开表,指针默认在第一条记录
insert before blank &&在第一条记录前插入一条空记录
&&use 客户表
delete
pack
close all
thisform.refresh
thisform.grid1.refresh
thisform.grid1.recordsource="客户表"
在梅子论坛,有个网友想了个更简单实用的方法,即把我在4楼的delete注释悼,&&delete,完全没问题了。
delete &&这就是删除第一条记录的语句!!把这句注释掉吧。因为打开表,指针默认在第一条记录上。
用鼠标点表格左边的小格使其变黑,这就相当于执行了一次 delete 了,就不用再在“删除按钮”中delete 了。
delete pack是从书上实例借来的,它是用按钮“上一个”、“下一个”来实现删除的,怪不得会删除第一条记录。原来如此。。。
8楼说得很有道理,我要仔细揣摩一下。
10 楼
dbud [专家分:10] 发布于 2012-12-13 16:37:00
顶楼主
[url=http://www.bhlt99.com][color=#ffffff]西力士[/color][/url][color=#ffffff] www.bhlt99.com[/color]
[url=http://www.xinliangoil.com][color=#ffffff]希爱力[/color][/url][color=#ffffff]www.xinliangoil.com[/color]
[url=http://www.dl-tomorrow.com][color=#ffffff]万艾可[/color][/url][color=#ffffff]www.dl-tomorrow.com[/color]
[url=http://www.shmideakt.com][color=#ffffff]基因育根[/color][/url][color=#ffffff] www.shmideakt.com[/color]
[url=http://www.senboom.com][color=#ffffff]基因育根[/color][/url][color=#ffffff] www.senboom.com[/color]
[url=http://www.tbrenren.com][color=#ffffff]北京按摩[/color][/url][color=#ffffff] www.tbrenren.com[/color]
[url=http://www.zjjhgjg.com][color=#ffffff]电视棒[/color][/url][color=#ffffff] www.zjjhgjg.com[/color]
[url=http://www.hxww.net][color=#ffffff]超级P57[/color][/url][color=#ffffff] www.hxww.net[/color]
[url=http://www.wzeas.com][color=#ffffff]治疗白发[/color][/url][color=#ffffff]www.wzeas.com[/color]
我来回复