以文本方式查看主题 - 易表在线答疑 (http://egrid2000.com/dvbbs/index.asp) -- 应用技巧 (http://egrid2000.com/dvbbs/list.asp?boardid=3) ---- 关于程序和数据分离方案之易行天下版 (http://egrid2000.com/dvbbs/dispbbs.asp?boardid=3&id=172) |
-- 作者:易行天下 -- 发布时间:2007/1/18 10:29:00 -- 关于程序和数据分离方案之易行天下版 首先感谢昨天大家对关于程序和数据分离的预想草案的关注,综合大家的回复易行天下于昨晚重新设计测试,现将通过测试的可行草案罗列如下,在此也感谢各位热心的斑竹尤其是czy斑竹对易行天下每次提问的热忱回答! 此次测试的平台是电脑报1407版本,(下周我就可以拿到从国内寄来日本的2006电脑报版本的光盘了,加上论坛的改进主程序就完美无缺了,高兴啊~~) 假设有3个主表,以下是方案的步骤: 1. 在易表制作的系统文件夹中放置一个创建D:\\backup的Creat.bat命令,此举在于让系统自动创建数据导出备份的专用文件夹,不让用户手动创建;相关说明见备注1; 2. 在文件验证公式中使用Sendkeys使关闭的叉叉失效,此举在于不出现询问用户是否保存文件的对话框和不给用户存盘的机会(需要变量支持),相关说明见备注2; 3. 在文件预处理公式中使用If和Exist对D:\\backup中backup.dll文件是否存在进行判断,如果不存在则立即执行Openlink(”\\Creat.bat”)创建D:\\backup文件夹,并用Msgbox提示用户系统已经在D:\\backup创建了备份文件夹,请勿删除或修改,用户点击确认后,立即执行:Backupfile(”D:\\backup\\backup.dll”),这是重要的步骤,相关说明见备注3; 4. 制作专用的用户菜单,其中设置一个假保存按钮,按钮的公式为ExportDBFile("D:\\backup.xls”,6,"表1") and ExportDBFile("D:\\backup.xls”,6,"表2") and ExportDBFile("D:\\backup.xls”,6,"表3"),这里有蹊跷,因为导出数据的时候主表的视图决定了生成的excel文件的数据内容,因此有必要的话在导出前执行openview命令,显示所有列,完成后再改回当前视图!否则数据将丢失!!相关说明见备注4; 5. 制作专用的退出按钮,按钮公式为Resect和Setvariable以及exit,此举在于让易表不出现对话框不保存文件就立即关闭; 6. 在文件预处理公式中再增加以下内容,ImportDBFile("D:\\backup.xls”,6,"表1") and ImportDBFile("D:\\backup.xls”,6,"表2") and ImportDBFile("D:\\backup.xls”,6,"表3"),这需要几秒钟时间,最好是在打开的菜单方案里的设置一个状态栏显示“正在加载数据…”,不要让用户发觉易表在干什么;数据加载完毕后有必要的话执行一次全部刷新!相关说明见备注5; 以下是备注: 最后是易行天下对以上做法利弊的自我评价,也请斑竹们斧正: 缺点 1. 这个方法对数据量超级大的用户不适用,看过一个论坛的文件,加载需要15分钟,这是不行的; 附加一个测试的方法建议:我前段时间上传了一个“公式超长巨无霸”,作用在于用基准数据对数据库的数据进行验证,大家可以制作具有用某一个基准表的来窗口验证数据是否正确,最好再作一个统计表,分别在导出前和加载后对数据库进行统计测试看结果是否相同。 |
-- 作者:易行天下 -- 发布时间:2007/1/18 11:22:00 -- 以上是单机环境的方案,网络环境能否导出数据到服务器我没有条件测试,请斑竹看看? |
-- 作者:xj22710 -- 发布时间:2007/1/19 11:46:00 -- 网络环境同样可以自己测试,指定一个本地IP,如192.168.0.5,将公式中的相对路径改为这个IP下的相对路径,自己就能测试了 |
-- 作者:candy -- 发布时间:2007/1/20 23:39:00 -- 如果是网络版系统,多用户操作,可能楼主的方法有问题。 假设如下: 不知道楼主明白我的意思没有,由于A、B用户无法同步更新数据,而数据导出又不能判断哪次操作是更新了数据,只是最简单的覆盖数据操作,那样是不行的。 |
-- 作者:易行天下 -- 发布时间:2007/1/22 11:42:00 -- 在这里说明一下,敝人使用易表感觉一直不错,除了运行速度和网络功能都满意,在这里我就不说网络功能的缺陷了,出于对数据安全的考虑所以我制作的系统虽然放在服务器中供大家使用但是没有让多个用户同时登陆,所以以上程序数据分离的方案建立在杜绝多用户访问的基础之上。关于杜绝多用户同时访问系统即防止文件被重复打开的方法,我会发帖和大家分享的!在此谢谢您的回复,希望以后多多进行易表使用经验的交流! |
-- 作者:蒋正清 -- 发布时间:2007/3/29 11:09:00 -- 非常好! |
-- 作者:卡得儿 -- 发布时间:2007/4/3 19:38:00 -- 内容有些深了,看起来吃力。 |
-- 作者:CXHWA -- 发布时间:2007/7/6 17:03:00 -- 关于杜绝多用户同时访问系统即防止文件被重复打开的方法:可以用文件预处理公式和文件验证公式配合Exist函数和ExportTextFile函数来实现,以下是举例公式: 1、文件验证公式: If(usertype = 1,If(Exist(docdir+"X.txt") ,DelFile(docdir+"X.txt"),If(Exist(docdir+"X.txt.bak") ,DelFile(docdir+"X.txt.bak"), True)),If(Exist(docdir+"Y.txt") ,DelFile(docdir+"Y.txt"),If(Exist(docdir+"Y.txt.bak") ,DelFile(docdir+"Y.txt.bak"), True))) 2、文件预处理公式: If(usertype = 1,OpenMenu("admin") And OpenGrid("account") And If(Exist(docdir+"Y.txt") or Exist(docdir+"Y.txt.bak"),MsgBox("系统正在被其他用户使用,请不要进行保存操作!",0,4) And ExportTextFile(docdir+"X.txt" ,"," , Char(13),"account","流水号", "=" ,"000000001"),ExportTextFile(docdir+"X.txt" ,"," , Char(13),"account","流水号", "=" ,"000000001")),OpenMenu("ibmis") And OpenGrid("account") And If(Exist(docdir+"Y.txt") or Exist(docdir+"Y.txt.bak"),MsgBox("系统正在被其他用户使用,您不能打开,请与其他用户联系!",0,4) And ExportTextFile(docdir+"Y.txt" ,"," , Char(13),"account","流水号", "=" ,"000000001") and reset() and Exit(),If(Exist(docdir+"X.txt") or Exist(docdir+"X.txt.bak"),MsgBox("系统正在被管理员使用,请联系系统管理员!",0,4) And ExportTextFile(docdir+"Y.txt" ,"," , Char(13),"account","流水号", "=" ,"000000001") and reset() and Exit(),ExportTextFile(docdir+"Y.txt" ,"," , Char(13),"account","流水号", "=" ,"000000001")))) And CloseRGrid("subsidiary") |
-- 作者:表之狂 -- 发布时间:2007/7/8 23:34:00 -- 很有研究的地方. |
-- 作者:紫莲花 -- 发布时间:2007/7/10 20:47:00 -- 下面引用由candy在 2007/01/20 11:39pm 发表的内容: 如果是网络版系统,多用户操作,可能楼主的方法有问题。 假设如下: 不知道楼主明白我的意思没有,由于A、B用户无法同步更新数据,而数据导出又不能判断哪次操作是更新了数据,只是最简单的覆盖数据操作,那样是不行的。 我现在遇到与这位朋友同样的问题,不知道楼主有没有好的办法。 |