怎样用PACK命令删除记录?

yyuuu2003 2016-06-24 05:55:48
我的删除命令用了下列语言:
Select 职工档案
LOCA FOR 建档年月=thisform.pageframe1.page2.TEXT1.value AND 是否归档=.T.
IF FOUND()
=MESSAGEBOX(STR(thisform.pageframe1.page2.TEXT1.value)+'职工档案已归档不能删除',48,'警告')
RETU 0
ENDIF
canchu=MESSAGEBOX('真要将'+STR(thisform.pageframe1.page2.TEXT1.value)+'职工档案删除?',292,'警告')
if canchu=6
SELE 职工档案
DELE ALL FOR ALLTRIM(建档名称)==ALLTRIM(X2)
PACK
SELE 建档表名
DELE ALL FOR ALLTRIM(建档名称)==ALLTRIM(X2)
PACK
ENDIF
THISFORM.PAGEFRAME1.PAGE2.LIST1.REQUERY
'职工档案'表及'建档表名'均在数据环境中设成以独占方式打开,可执行时'职工档案'表的记录删除没问题,'建档表名'执行PACK命令时却显示"文件在另一工作区打开".

...全文
331 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyuuu2003 2016-06-29
  • 打赏
  • 举报
回复
老师,用你的方法已解决了,可能我的是6。0的,只是将SELE ZJK改成USE ZJK AGAIN,非常感谢你的指导。
yyuuu2003 2016-06-28
  • 打赏
  • 举报
回复
引用 5 楼 apple_8180 的回复:
If Used('建档表名')
	Use In '建档表名'
Endif
Use '建档表名' Exclusive In 0
Select 建档表名
Pack
如果用这段语言,结果是显示文件在使用
yyuuu2003 2016-06-28
  • 打赏
  • 举报
回复
老师,你这段语言是测试有多少个区打开了? 我刚检查了,我是在建档按钮中使用了SELE 0 USE *.DBF AGAIN 这样的语言,当时我使用这语言是因为我用了USE *.DBF这样的形式打开了数据表,下面是这段语言内容: Select 职工档案 COPY TO ZJK FOR 建档年月=X1 *USE ZJK sele ZJK REPL ALL 建档年月 WITH 建档年月+1 建档名称 WITH STR(thisform.pageframe1.page2.TEXT1.value)+'职工档案' 是否归档 WITH .F. * USE *Select 0 *use 职工档案 again sele 职工档案 APPE FROM ZJK DELE FILE ZJK.DBF * sele 0 * use 建档表名 again SELE 建档表名 loca for 建档名称=STR(thisform.pageframe1.page2.TEXT1.value)+'职工档案' IF NOT FOUND() INSERT INTO 建档表名(建档名称,是否归档) VALUES(STR(thisform.pageframe1.page2.TEXT1.value)+'职工档案',.F.) ENDIF 以上有星号的是我原来使用的,如果我改成SELE *.DBF形式的话,在我用SELE 打开ZJK的时候却告知找不到别名,因此我就使用了SELE 0.....的形式进行表的打开,而用这种形式打可,就会出现我的"删除"按钮中出现的我的"建档表名"在别的工作区打开,老师,你帮看我要怎样才能两全?
都市夜猫 2016-06-28
  • 打赏
  • 举报
回复
select 是选择工作区,不是打开表,打开用 use 命令 你上面这段看上去就是吧一部分记录插入到另一个表中,zjk 只是一个过渡用的临时表
Select 职工档案
COPY TO ZJK FOR 建档年月=X1

Select 0
sele ZJK
REPL ALL 建档年月 WITH 建档年月+1 建档名称 WITH STR(thisform.pageframe1.page2.TEXT1.value)+'职工档案' 是否归档 WITH .F.
Use

sele 职工档案
APPE FROM ZJK
DELE FILE ZJK.DBF

SELE 建档表名
loca for 建档名称=STR(thisform.pageframe1.page2.TEXT1.value)+'职工档案'
IF NOT FOUND()
	INSERT INTO 建档表名(建档名称,是否归档) VALUES(STR(thisform.pageframe1.page2.TEXT1.value)+'职工档案',.F.)
ENDIF
十豆三 2016-06-27
  • 打赏
  • 举报
回复
If Used('建档表名')
	Use In '建档表名'
Endif
Use '建档表名' Exclusive In 0
Select 建档表名
Pack
liups 2016-06-27
  • 打赏
  • 举报
回复
其实pack这种东东本身就不是VFP所主张的,就算要pack也是偶而为之,绝对没有删除一条记录就pack的道理。 非要pack可以考虑一个月一次或3楼那样
lygcw9602 2016-06-27
  • 打赏
  • 举报
回复
实在不行,在退出命令按钮中 SELE 职工档案 PACK SELE 建档表名 PACK
yyuuu2003 2016-06-27
  • 打赏
  • 举报
回复
已经设置成'T'了.
都市夜猫 2016-06-27
  • 打赏
  • 举报
回复
问题不是出在是否独占打开,楼主对遇到的问题,是这样描述的:
引用 楼主 yyuuu2003 的回复:
'职工档案'表的记录删除没问题,'建档表名'执行PACK命令时却显示"文件在另一工作区打开".
通常,是使用了 use 表名 again in 0 alias 其他别名 这样的形式再次打开了表 因此,最根本的问题是要知道,为何要重复打开,如果关闭掉重复打开的表,是否会造成其他的问题 先在 pack 前,加一段调试代码,显示有几处重复打开了建档名这个表,像这样:
SELE 职工档案
DELE ALL FOR ALLTRIM(建档名称)==ALLTRIM(X2)
PACK
*-----------------------------
Local aTemp[1], cc, ii

SELE 建档表名
m.cc = Dbf()
Create Cursor ttt (工作区 I, 别名 C(20), 文件 C(200))
For m.ii = 1 to AUsed(m.aTemp)
	If m.cc == Dbf(m.aTemp[m.ii,1])
		Insert into ttt (工作区, 别名, 文件) Values ( ;
			m.aTemp[m.ii,2], m.aTemp[m.ii,1], Dbf(m.aTemp[m.ii,1]))
	EndIf
EndFor
Browse
Set Step On 
*-----------------------------
SELE 建档表名
DELE ALL FOR ALLTRIM(建档名称)==ALLTRIM(X2)
PACK
browse 中应该至少显示 2 条记录,这样你就知道还有哪个工作区,用另外的别名重复打开了这个表,以此别名作为参考,查找代码中使用此别名的地方,看看是否可以在 pack 前,先执行依据 use in 其他别名 来关闭它,关闭是否会导致其他问题
lygcw9602 2016-06-24
  • 打赏
  • 举报
回复
如果表已经添加到表单的数据环境中,在表单数据中选择要进行删除记录的表,右击表,在属性框中设置EXCLUSIVE=.T.

2,723

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧