主题:PACK出错的问题?
pengwei0417
[专家分:0] 发布于 2008-07-11 00:47:00
当发出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个回复)
沙发
0901chang [专家分:10660] 发布于 2008-07-11 07:49:00
解决问题的方法很简单:找到在另一个打开family表的工作区,关闭它再Pack,问题就解决了。
板凳
pengwei0417 [专家分:0] 发布于 2008-07-11 08:34:00
如何找到他在哪个工作区已打开.
3 楼
时光倒流 [专家分:660] 发布于 2008-07-11 09:18:00
不知道你的是不是一个按钮,如果是,可以这样:
clos all
select family
.....
4 楼
cqf8340 [专家分:1810] 发布于 2008-07-11 09:27:00
前面加上:
use in family
select 1
use family EXCLUSIVE
试试
5 楼
0901chang [专家分:10660] 发布于 2008-07-11 11:50:00
* 我用笨办法,从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 楼
0901chang [专家分:10660] 发布于 2008-07-11 11:54:00
最简单的方法
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 楼
cbl518 [专家分:57140] 发布于 2008-07-11 14:21:00
FOR I=1 TO ALEN(DBF_LPBBH)
DELETE FOR 人员编号=DBF_LPBBH(I,1) IN family
ENDFOR
CLOSE TABLES ALL
PACK "路径\family.dbf"
8 楼
cbl518 [专家分:57140] 发布于 2008-07-11 14:28:00
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 楼
pengwei0417 [专家分:0] 发布于 2008-07-12 10:56:00
感谢感谢,应该差不多了,通过老师们的帮助,这个问题应该没啥问题了?
10 楼
qd163 [专家分:230] 发布于 2008-07-16 17:55:00
我也经常遇到这样的问题,后来在一本书中看到是这样处理的:
在表单的unload事件中输入下面的代码
close all
use 路径\family
pack
close all
这样就不会再出现这类问题了。
我来回复