| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 781 人关注过本帖
标题:求助,VFP表单程序试运行没问题,连编后老报错,求助大家
取消只看楼主 加入收藏
yunyka
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2020-8-3
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:11 
求助,VFP表单程序试运行没问题,连编后老报错,求助大家
写了一个小程序,想结合表单编成exe,在VFP中试运行没问题,但是运行连编后的exe就会在一个判断数据表某个字段是否没有非空记录的地方出错,显示我预置的信息(但是预留数据完全不会报错,试运行也能过)。
报错后exe还会报“文件正在使用”的错误,无法正常退出。

我的主程序:
ON KEY LABEL ALT+F4 DO quit_program
ON SHUTDOWN DO quit_program

SET SAFETY OFF
SET TALK ON

DO FORM D:\Desktop\活动排序\活动排序界面.scx
READ EVENTS

PROCEDURE quit_program
    RELEASE ALL
    CLOSE ALL
    CLEAR EVENTS
    CLEAR ALL
    DELETE FILE *.bak
    DELETE FILE *.dbf
    QUIT
ENDPROC

表单按钮点击代码:

sjk = thisform.名单地址.Value
IF NOT FILE(sjk)
    MESSAGEBOX("请先填写或选择正确名单地址!")
    CANCEL
ENDIF

wenti_gm = thisform.规模.Value
IF INT(wenti_gm)<>wenti_gm OR wenti_gm>99 OR wenti_gm<3
    MESSAGEBOX("请先填写正确的活动规模,3~99间的整数!")
    CANCEL
ENDIF

IF thisform.方法选择.枚举.Value = 1
    my_method = 1
ELSE
    my_method = 2
ENDIF
IF my_method == 1 AND wenti_gm>7
    MESSAGEBOX("活动数量较多,请选择精确计算以保证效率!")
    CANCEL
ENDIF

DO D:\Desktop\活动排序\测算主程序.prg WITH sjk,wenti_gm,my_method

测算主程序代码片段:

PARAMETERS sjk,wenti_gm,my_method
PUBLIC ARRAY cnt_arr4(1,1), cnt_arr5(1,1),ku_chk(1,1)

CREATE TABLE 活动排序.dbf ;
    ( 活动01 c(50))
FOR i = 2 TO wenti_gm
    field_name = "活动"+RIGHT("0"+ALLTRIM(STR(i)),2)
    ALTER table 活动排序 ADD &field_name c(50)
ENDFOR
SELECT 活动排序
APPEND FROM &sjk TYPE CSV
MESSAGEBOX("导入完成!")

**创建相邻两个活动的组合库,并计算两个活动的人次变动数
CLOSE DATABASES
USE 活动排序.dbf ALIAS a IN 1
field_num = AFIELDS(field_arr,"A")
FOR i = 1 TO field_num
    field_name = FIELD(i)
    SELECT COUNT(*) FROM a WHERE ALLTRIM(&field_name)<>"" INTO ARRAY ku_chk
    IF ku_chk(1,1) = 0
        CLOSE DATABASES ALL
        MESSAGEBOX(field_name+" 没有参与人员不合规,请检查提供名单是否合规!!")        &&连编的exe到这里就会出错,无论给的原始数据是什么样
        CANCEL
    ENDIF
ENDFOR

…………
烦请大家看看问题出在什么地方
搜索更多相关主题的帖子: 排序 MESSAGEBOX 活动 运行 IF 
2020-08-03 15:53
yunyka
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2020-8-3
收藏
得分:0 
在线等,
2020-08-03 16:28
yunyka
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2020-8-3
收藏
得分:0 
回复 3楼 wengjl
有道理,我一会儿试试,但是我查看了一下exe终止时的文件,活动排序.dbf这个表成功生成并导入数据了,没有空白列的存在,不知道为什么会在那出错。
还有没有其它出错的可能?
2020-08-03 16:37
yunyka
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2020-8-3
收藏
得分:0 
3楼大哥的说法我试了,依旧VFP里面试运行可以,连编的exe会出错,无语了
2020-08-03 17:31
yunyka
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2020-8-3
收藏
得分:0 
我发现问题就是这句话:
SELECT COUNT(*) FROM a WHERE ALLTRIM(&field_name)<>"" INTO ARRAY ku_chk
在exe下无论怎么查,ku_chk都是0,但是我用exe运行的过程文件自己重新用这句话查了一下是有结果数据的
不知道哪位高人能解释一下为什么么?因为我程序后面还有很多类似的语句……
2020-08-03 17:54
yunyka
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2020-8-3
收藏
得分:0 
回复 7楼 jhcwk
这句话有什么问题么?不太明白
2020-08-03 18:12
yunyka
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2020-8-3
收藏
得分:0 
回复 9楼 xuminxz
多谢指导,受教了。写prg运行的时候一直没有出现类似的问题,所以没太在意,以后多注意一下。
但是这次的问题并不是这个原因导致的
2020-08-04 10:08
yunyka
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2020-8-3
收藏
得分:0 
回复 10楼 wengjl
的确是这句话的问题,你说得方法我还没试,但是我把
SELECT COUNT(*) FROM a WHERE alltrim(&field_name)<>"" INTO ARRAY ku_chk
改成
SELECT COUNT(*) FROM a WHERE NOT EMPTY(&field_name) INTO ARRAY ku_chk
程序就执行出正确结果了……
感觉很奇怪,为什么单独执行prg时alltrim(&field_name)<>""没问题,连编成exe之后就不行?
2020-08-04 10:12
yunyka
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2020-8-3
收藏
得分:0 
回复 11楼 sdta
感谢版主的关注,我找到问题所在了,把
SELECT COUNT(*) FROM a WHERE alltrim(&field_name)<>"" INTO ARRAY ku_chk
改成
SELECT COUNT(*) FROM a WHERE NOT EMPTY(&field_name) INTO ARRAY ku_chk
程序就执行出正确结果了……
感觉很奇怪,为什么单独执行prg时alltrim(&field_name)<>""没问题,连编成exe之后就不行?
2020-08-04 10:14
yunyka
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2020-8-3
收藏
得分:0 
回复 19楼 吹水佬
版主的意思是与空字符的比对结果么?
我运行结果是


好像没问题……
附件: 游客没有浏览附件的权限,请 登录注册
2020-08-04 16:57
快速回复:求助,VFP表单程序试运行没问题,连编后老报错,求助大家
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.058815 second(s), 9 queries.
Copyright©2004-2020, BCCN.NET, All Rights Reserved