回 帖 发 新 帖 刷新版面

主题:PACK出错的问题?

当发出PACK时,提示文件已在另一个工作区打开时该如何处理?

select family 
FOR I=1 TO ALEN(DBF_LPBBH) 
    LOCATE FOR 人员编号=DBF_LPBBH(I,1) 
    DO WHILE FOUND() 
    DELETE 
    CONTINUE 
    ENDDO 
ENDFOR 
      
PACK 


有时出现以上错误提示,有时第一次删除可以,再执行出错.表单上FAMILY表的EXCLUSIVE设为.T.

回复列表 (共10个回复)

沙发

解决问题的方法很简单:找到在另一个打开family表的工作区,关闭它再Pack,问题就解决了。

板凳

如何找到他在哪个工作区已打开.

3 楼

不知道你的是不是一个按钮,如果是,可以这样:
clos all
select family
.....

4 楼

前面加上:
use in family
select 1
use family EXCLUSIVE
试试

5 楼

* 我用笨办法,从1-254工作区去找,若找到重复打开的,就关闭它
select family 
FOR I=1 TO ALEN(DBF_LPBBH) 
    LOCATE FOR 人员编号=DBF_LPBBH(I,1) 
    DO WHILE FOUND() 
    DELETE 
    CONTINUE 
    ENDDO 
ENDFOR 
      
m_现在工作区=sele()
for i=1 to 254
 if i=m_现在工作区
  loop
 endi
 m_打开的表=upper(dbf(i))
 if 'FAMILY.DBF'$m_打开的表
  use
 endi
endf
sele(m_现在工作区)
use FAMILY excl
PACK 

6 楼

最简单的方法
clos all
use FAMILY excl
* select family 
FOR I=1 TO ALEN(DBF_LPBBH) 
    LOCATE FOR 人员编号=DBF_LPBBH(I,1) 
    DO WHILE FOUND() 
    DELETE 
    CONTINUE 
    ENDDO 
ENDFOR 
PACK 

7 楼

FOR I=1 TO ALEN(DBF_LPBBH) 
    DELETE FOR 人员编号=DBF_LPBBH(I,1) IN family 
ENDFOR 
CLOSE TABLES ALL 
PACK "路径\family.dbf" 

8 楼

FOR I=1 TO ALEN(DBF_LPBBH) 
    DELETE FOR 人员编号=DBF_LPBBH(I,1) IN family 
ENDFOR 
FOR I=1 TO AUSED(ArrayName)
    IF JUSTSTEM(DBF(ArrayName[I,1]))="family"
        USE IN (ArrayName[I,1])
    ENDIF
ENDFOR

PACK "路径\family.dbf"

9 楼

感谢感谢,应该差不多了,通过老师们的帮助,这个问题应该没啥问题了?

10 楼

我也经常遇到这样的问题,后来在一本书中看到是这样处理的:
在表单的unload事件中输入下面的代码
close all
use 路径\family
pack
close all
这样就不会再出现这类问题了。

我来回复

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