以文本方式查看主题 - 易表在线答疑 (http://egrid2000.com/dvbbs/index.asp) -- 用户社区 (http://egrid2000.com/dvbbs/list.asp?boardid=2) ---- 请教各位老师:这个按钮公式有什么问题? (http://egrid2000.com/dvbbs/dispbbs.asp?boardid=2&id=19928) |
-- 作者:szscwy1 -- 发布时间: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) 问题: 请各位老师指教!学生谢谢了! |
-- 作者:hbfnmxb -- 发布时间:2010/9/7 22:03:00 -- 能不能把文件发上来.看一下 |
-- 作者:szscwy1 -- 发布时间:2010/9/7 22:20:00 -- 谢谢hbfnmxb 老师的回复,因数据保密问题,不方便上传文件!请谅解!期待指教。。。。。。。。 |
-- 作者:Czy -- 发布时间:2010/9/7 22:32:00 -- [这个贴子最后由Czy在 2010/09/07 10:42pm 第 1 次编辑] 红色字体加删除线的公式严重嵌套。 红色字体公式严格来讲也存在嵌套。 解决方法见帮助中“函数嵌套问题”章节的“2、使用表达式变量”
|
-- 作者:Czy -- 发布时间:2010/9/7 22:39:00 -- 论坛似乎有bug,文字怎么不能着色了,看下面的图片。
|
-- 作者:Czy -- 发布时间:2010/9/7 22:40:00 -- 楼主也可以复制4楼的公式到回帖中,然后预览一下即可看到。 |
-- 作者:szscwy1 -- 发布时间:2010/9/7 22:56:00 -- 谢谢总版主!找到问题了,那就用变量来中转吧!非常感谢!! 比较两个表中的数据,表的字段结构一样,其中一个字段(“林权申请号”)的数据是唯一的,我用这个列数据与“已发证”数据表的同列数据作个数统计逐一比较(如在临时表中增加一个“对比”字段,对这个字段设计一个刷新公式:if(CountFor("已发证","林权申请号", "=" ,[林权申请号])>0,-1,0)),大于0则认为已经有记录,否则认为没有导入过。请问有什么方法比这个运算快!谢谢! |
-- 作者:Czy -- 发布时间:2010/9/7 23:02:00 -- CountFor是易表中效率最低的函数,建议改用FinRow,如: FindRow("已发证","林权申请号", "=" ,[林权申请号])>0 上面的公式加不加if判断一样的,所以这里略去了if |
-- 作者:szscwy1 -- 发布时间:2010/9/7 23:38:00 -- 谢谢总版主!改用这个函数试试!大大的收获!!!! 上面那个导入数据功能的公式,我把您划删除线的那行命令提前到if函数前面,运行就没有关闭退出了!再次感谢指教。 |