注册 登录
编程论坛 VFP论坛

如何关闭已打开的数据表

chychychy 发布于 2024-06-11 20:01, 373 次点击
只有本站会员才能查看附件,请 登录

在表单中运行一段程序
点击红框1后,再点击红框2
THISFORM.Label2.CAPTION=" "
SET SAFE OFF
SELECT 0
fn1=GETFILE('DBF','打开报名库')
USE (fn1) ALIAS gkbmk
UPDA jian SET jian.axm=gkbmk.xm FROM gkbmk WHERE jian.sfzh=gkbmk.sfzh    &&&&按sfzh导入姓名axm
UPDA jian SET jian.aksh=gkbmk.ksh FROM gkbmk WHERE jian.sfzh=gkbmk.sfzh  &&&&按sfzh导入考生号aksh
SELECT jian
REPLACE ALL j3 WITH  '姓名不一致' FOR xm<>axm
REPLACE ALL j4 WITH  '考生号无法导入' FOR aksh=' '
COUNT FOR j1<>' ' OR j2<>"  " OR j3<>" "OR j4<>" "OR j5<>" " TO nn3
THISFORM.Label2.CAPTION="检查各类错误数: "+ALLTRIM(STR(nn3))+" 人"
IF nn3<1
    RETURN
ELSE
    ask=MESSAGEBOX('是否浏览并导出',1+32+0,'返回')
    IF ask=1
        BROWSE FOR j1<>' ' OR j2<>"  " OR j3<>" "OR j4<>" "OR j5<>" "
        wjm="导出4检查出各类错误数-"+TRANSFORM(nn3)+"条数据"
        COPY TO &wjm FOR  j1<>' ' OR j2<>"  " OR j3<>" "OR j4<>" "OR j5<>" "
        COPY TO &wjm FOR  j1<>' ' OR j2<>"  " OR j3<>" "OR j4<>" "OR j5<>" " TYPE XL5
    ELSE
        RETURN
    ENDIF
ENDIF

if used (fn1)
   use in (fn1)
endif
没起到关闭数据的作用,用sele gkbmk;use gkbmk也不可以
在不退出这个表单程序的情况下再次运行红框2,总是弹窗提示“文件正在使用”,卡在fn1=GETFILE('DBF','打开报名库')处,如果放在SELECT 0的前面,则提示文件不存在,问题出在哪里了?

[此贴子已经被作者于2024-6-11 20:12编辑过]

8 回复
#2
吹水佬2024-06-11 21:15
sele gkbmk
use

use in "gkbmk"
#3
chychychy2024-06-11 21:27
回复 2楼 吹水佬
两句都测试还是提示“文件正在使用”
只有本站会员才能查看附件,请 登录
#4
吹水佬2024-06-11 21:43

先用used()检测一下再分别处理
#5
laowan0012024-06-11 22:13
回复 楼主 chychychy
IF nn3<1
    RETURN
ELSE
    ask=MESSAGEBOX('是否浏览并导出',1+32+0,'返回')
    IF ask=1
        ...
    ELSE
        RETURN
    ENDIF
ENDIF

if used (fn1)
   use in (fn1)
endif

这两个RETURN直接就跑了,打开的表也不管了,下次回来肯定说是“文件正在使用”啊
要养成谁打开的表谁关闭的习惯,就不会出现这种情况了

#6
chychychy2024-06-11 22:36
回复 4楼 吹水佬
方框2按钮中的命令改成下列内容测试
程序代码:
THISFORM.Label2.CAPTION=" "
Select 0
fn1=Getfile('DBF','打开报名库')
Use (fn1) Alias gkbmk
*Browse

*?Used(gkmbk)

If Used("gkbmk") && 测试是否用gkbmk别名打开表
    Select gkbmk && 选择以gkbmk别名打开表的工作区
    ?Alias() &&返回当前工作区的别名,结果为gkbmk
    *BROWSE
    THISFORM.Label2.CAPTION=" 关闭了"
    *List && 显示xs.dbf表内容
ENDIF
SELECT gkbmk
USE


If Used("gkbmk") && 测试是否用gkbmk别名打开表
    Select gkbmk && 选择以gkbmk别名打开表的工作区
    ?Alias() &&返回当前工作区的别名,结果为gkbmk
    THISFORM.Label2.CAPTION=" 打开了"
    *List && 显示xs.dbf表内容
ENDIF

这样测试标签只显示“打开了几个字”,也能反复运行方框2按钮。但是用原来的还是错误提示

[此贴子已经被作者于2024-6-12 07:45编辑过]

#7
chychychy2024-06-11 22:37
回复 5楼 laowan001
谢谢,原来如此,调整语句SELECT gkbmk;use这两句位置,问题解决了。
程序代码:
CLEAR
THISFORM.Label2.CAPTION=" "
SET SAFE OFF

SELECT 0
fn1=GETFILE('DBF','打开报名库')
USE (fn1) ALIAS gkbmk
UPDA jian SET jian.axm=gkbmk.xm FROM gkbmk WHERE jian.sfzh=gkbmk.sfzh    &&&&按sfzh导入姓名axm
UPDA jian SET jian.aksh=gkbmk.ksh FROM gkbmk WHERE jian.sfzh=gkbmk.sfzh  &&&&按sfzh导入考生号aksh

SELECT gkbmk&&&关闭打开的报名库方便下一次导入数据,否则提示文件已打开
&&&要养成谁打开的表谁关闭的习惯,就不会出现这种情况了,之前错误是因为下面有两个RETURN直接就跑了,打开的表也不管了,下次回来肯定说是“文件正在使用”啊
USE

SELECT jian
REPLACE ALL j3 WITH  '姓名不一致' FOR xm<>axm
REPLACE ALL j4 WITH  '考生号无法导入' FOR aksh=' '
&&&REPLACE ALL j5 WITH  '性别不一致' FOR xb<>axb
COUNT FOR j1<>' ' OR j2<>"  " OR j3<>" "OR j4<>" "OR j5<>" " TO nn3
THISFORM.Label2.CAPTION="检查各类错误数: "+ALLTRIM(STR(nn3))+" 人"

IF nn3<1
    RETURN
ELSE
    ask=MESSAGEBOX('是否浏览并导出',1+32+0,'返回')
    IF ask=1
        BROWSE FOR j1<>' ' OR j2<>"  " OR j3<>" "OR j4<>" "OR j5<>" "
        wjm="导出4检查出各类错误数-"+TRANSFORM(nn3)+"条数据"
        COPY TO &wjm FOR  j1<>' ' OR j2<>"  " OR j3<>" "OR j4<>" "OR j5<>" "
        COPY TO &wjm FOR  j1<>' ' OR j2<>"  " OR j3<>" "OR j4<>" "OR j5<>" " TYPE XL5
    ELSE
        RETURN
    ENDIF
ENDIF


再请教一下
那这两句return应该如何表达,才不出现这样错误



[此贴子已经被作者于2024-6-12 14:30编辑过]

#8
laowan0012024-06-12 10:52
以下是引用chychychy在2024-6-11 22:37:28的发言:
那这两句return应该如何表达,才不出现这样错误

return之前把该关闭的文件都关了就行
#9
chychychy2024-06-12 14:30
回复 8楼 laowan001
好的,谢谢
1