易表在线答疑技术与交流用户社区 → 请教各位老师:这个按钮公式有什么问题?


  共有6092人关注过本帖树形打印复制链接

主题:请教各位老师:这个按钮公式有什么问题?

帅哥哟,离线,有人找我吗?
szscwy1
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:89 积分:298 威望:0 精华:0 注册:2008/7/4 20:12:00
请教各位老师:这个按钮公式有什么问题?  发帖心情 Post By:2010/9/7 21:39:00 [只看该作者]

设计思路:
我的数据库中数据有2万多条了,并且经常不断追加,增加新数据的方法是使用EXCEL数据表导入(因为是从网络数据中导出来的)的,有些记录是录入过的,因此,导入时先在一个临时表(表名“追加”)中先导入,再与现有数据库表(表名“已发证”)中的数据进行比较(比较公式设在“追加”表的“对比”字段中),如果已经导入过,就标记不追加并删除该重复记录,如果没有导入过,则把“追加”表中的新数据导入到“已发证”表中,并进行相关列的刷新计算,同时标记“追加批次、追加文件名”等内容便于查对。为此设计一导入功能按键,公式为:
Do(112) And if(msgbox("导入前请确认已对EXCEL文件进行了必要处理!",2)= True , if(msgbox("本功能只导入数据库中没有的记录,确定吗?",2)= True ,OpenGrid("追加") And delfor(GridName) And SetVariable("%文件名%",GetFileName("Excel文件|*.xls","从EXCEL文件中导入发证数据" ,0)) And ImportDBFile([%文件名%],6, Substitute(Split([%文件名%],"\",[%\号数%]),".xls","")) And DelFor(GridName,"林权申请号", "=","") And RecalcCol("追加","对比") And DelFor("追加","对比", "=" , -1) And Copyrows("已发证") And OpenGrid("已发证") And SetVariable("%文件名%",Substitute(Split([%文件名%],"\",[%\号数%]),".xls","")) And RecalcColfor("已发证","座落","追加批次", "=" ,"") And RecalcColfor("已发证",34,"追加批次", "=" ,"") And RecalcColfor("已发证",35,"追加批次", "=" ,"") And RecalcColfor("已发证",36,"追加批次", "=" ,"") And RecalcColfor("已发证",37,"追加批次", "=" ,"") And RecalcColfor("已发证",38,"追加批次", "=" ,""),""),"") And Setvariable("%批次%",maxfor("已发证","追加批次")+1) And ReplaceFor("已发证","追加文件名",[%文件名%],"追加批次", "=" ,"") And ReplaceFor("已发证","追加批次",[%批次%],"追加批次", "=" ,"") And MsgBox("本次追加"+Text([追加!Rows])+"条记录!",1,4)

问题:
   1、点击按钮功能时:有时程序直接退出;有时运行其他程序功能后,再点击运行这一按钮功能,又能正常运行,完成预期功能。请教:为什么有时会不运行而关闭程序退出?(注:系统为正式注册版)
   2、随着数据不断追加,发现运行速度越来越慢。请教:可以怎样优化公式提高运行速度?同时,怎样增加一个提示性的功能,提示进行到了哪一步?

请各位老师指教!学生谢谢了!


 回到顶部
帅哥哟,离线,有人找我吗?
hbfnmxb
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:黑侠 帖子:731 积分:4099 威望:0 精华:0 注册:2006/8/29 23:00:00
  发帖心情 Post By:2010/9/7 22:03:00 [只看该作者]

能不能把文件发上来.看一下

 回到顶部
帅哥哟,离线,有人找我吗?
szscwy1
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:89 积分:298 威望:0 精华:0 注册:2008/7/4 20:12:00
  发帖心情 Post By:2010/9/7 22:20:00 [只看该作者]

谢谢hbfnmxb 老师的回复,因数据保密问题,不方便上传文件!请谅解!期待指教。。。。。。。。

 回到顶部
帅哥哟,离线,有人找我吗?
Czy
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13147 积分:-89 威望:0 精华:0 注册:2006/8/11 11:14:00
  发帖心情 Post By:2010/9/7 22:32:00 [只看该作者]

[这个贴子最后由Czy在 2010/09/07 10:42pm 第 1 次编辑]

红色字体加删除线的公式严重嵌套。
红色字体公式严格来讲也存在嵌套。
解决方法见帮助中“函数嵌套问题”章节的“2、使用表达式变量”


if(msgbox("导入前请确认已对EXCEL文件进行了必要处理!",2)= True ,
if(msgbox("本功能只导入数据库中没有的记录,确定吗?",2)= True ,
OpenGrid("追加") And
delfor(GridName) And
[s]SetVariable("%文件名%",GetFileName("Excel文件|*.xls","从EXCEL文件中导入发证数据" ,0))[/s]  And
ImportDBFile([%文件名%],6, Substitute(Split([%文件名%],"\",[%\号数%]),".xls",""))  And
DelFor(GridName,"林权申请号", "=","") And
RecalcCol("追加","对比") And
DelFor("追加","对比", "=" , -1) And
Copyrows("已发证") And
OpenGrid("已发证") And
SetVariable("%文件名%",Substitute(Split([%文件名%],"\",[%\号数%]),".xls",""))  And
RecalcColfor("已发证","座落","追加批次", "=" ,"") And
RecalcColfor("已发证",34,"追加批次", "=" ,"") And
RecalcColfor("已发证",35,"追加批次", "=" ,"") And
RecalcColfor("已发证",36,"追加批次", "=" ,"") And
RecalcColfor("已发证",37,"追加批次", "=" ,"") And
RecalcColfor("已发证",38,"追加批次", "=" ,""),""),"") And
Setvariable("%批次%",maxfor("已发证","追加批次")+1) And
ReplaceFor("已发证","追加文件名",[%文件名%],"追加批次", "=" ,"") And
ReplaceFor("已发证","追加批次",[%批次%],"追加批次", "=" ,"") And
MsgBox("本次追加"+Text([追加!Rows])+"条记录!",1,4)


 回到顶部
帅哥哟,离线,有人找我吗?
Czy
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13147 积分:-89 威望:0 精华:0 注册:2006/8/11 11:14:00
  发帖心情 Post By:2010/9/7 22:39:00 [只看该作者]

论坛似乎有bug,文字怎么不能着色了,看下面的图片。


 回到顶部
帅哥哟,离线,有人找我吗?
Czy
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13147 积分:-89 威望:0 精华:0 注册:2006/8/11 11:14:00
  发帖心情 Post By:2010/9/7 22:40:00 [只看该作者]

楼主也可以复制4楼的公式到回帖中,然后预览一下即可看到。

 回到顶部
帅哥哟,离线,有人找我吗?
szscwy1
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:89 积分:298 威望:0 精华:0 注册:2008/7/4 20:12:00
  发帖心情 Post By:2010/9/7 22:56:00 [只看该作者]

谢谢总版主!找到问题了,那就用变量来中转吧!非常感谢!!

比较两个表中的数据,表的字段结构一样,其中一个字段(“林权申请号”)的数据是唯一的,我用这个列数据与“已发证”数据表的同列数据作个数统计逐一比较(如在临时表中增加一个“对比”字段,对这个字段设计一个刷新公式:if(CountFor("已发证","林权申请号", "=" ,[林权申请号])>0,-1,0)),大于0则认为已经有记录,否则认为没有导入过。请问有什么方法比这个运算快!谢谢!


 回到顶部
帅哥哟,离线,有人找我吗?
Czy
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13147 积分:-89 威望:0 精华:0 注册:2006/8/11 11:14:00
  发帖心情 Post By:2010/9/7 23:02:00 [只看该作者]

CountFor是易表中效率最低的函数,建议改用FinRow,如:

FindRow("已发证","林权申请号", "=" ,[林权申请号])>0

上面的公式加不加if判断一样的,所以这里略去了if


 回到顶部
帅哥哟,离线,有人找我吗?
szscwy1
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:89 积分:298 威望:0 精华:0 注册:2008/7/4 20:12:00
  发帖心情 Post By:2010/9/7 23:38:00 [只看该作者]

谢谢总版主!改用这个函数试试!大大的收获!!!!

上面那个导入数据功能的公式,我把您划删除线的那行命令提前到if函数前面,运行就没有关闭退出了!再次感谢指教。


 回到顶部