回 帖 发 新 帖 刷新版面

主题:文件已在另一个工作区打开

修改删除表单的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下。

回复列表 (共10个回复)

沙发

在删除按钮事件的第一行加一句 "sele 客户表" 试试。

板凳

把表格属性 recordsourcetype 设为 1 (别名)

3 楼

这样似乎可以,但在表格左边选中变成小黑格时,再点删除,会删除两条记录,不知如何:
close all
use 客户表
delete
pack
thisform.refresh
thisform.grid1.refresh
close all
thisform.grid1.recordsource="客户表"
thisform.grid1.recordsourcetype=0

4 楼

试了下这样也是不行,点删除按钮,会把第一条和所选中的哪一条一起删掉,不知怎办,就差这点了。
close all

use 客户表
thisform.grid1.recordsource=null
dele
pack


close all
thisform.grid1.recordsource="客户表"
thisform.grid1.recordsourcetype=0

thisform.refresh
thisform.grid1.refresh

5 楼

几个问题同时存在:
1、删除珍格中的表记录,若要彻底删除,必须先把表格的数据源置空
2、尽量不要用删除标记
3、要明确指定表和记录
4、执行操作后及时写盘

6 楼

没有具体方案么?

7 楼

建议:
1、程序的开头先设置 set dele on
2、程序运行期间不要使用 pack 命令。
3、关闭程序前再用 pack 更新数据,清除所有做了删除标记的记录。

8 楼

哇,这样用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 楼

前晚奋战了一下,终于找到了解决的方法。无意看到书上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 楼

顶楼主
[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]


我来回复

您尚未登录,请登录后再回复。点此登录或注册