以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  动态加载的困惑(狐爸请看一下)?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=32186)

--  作者:zpx_2012
--  发布时间:2013/4/27 9:37:00
--  动态加载的困惑(狐爸请看一下)?

帮助中讲的动态加载多数是指动态加载数据,如果在增加外部表时用条件Identify is Null限制了打开项目时不加载

数据,速度会快些,但空表即表结构每个表也需要全部加载,表多了速度一样很慢。

 

现在改成在项目的外部数据表设计好后,在项目事件BeforeLoadOuterTable中用如下代码

Select Case e.DataTableName
    Case "用户"  
       e.Cancel = False
    Case Else
       e.Cancel = True
End Select

 

目的是打开项目时只加载“用户”这个表的结构及数据,速度真的很快,但打开项目后想要根据需要再加载其他数据表时要用什么代码或者怎么才能实现?如下图。


图片点击可在新窗口打开查看此主题相关图片如下:360截图20130506104544794.jpg
图片点击可在新窗口打开查看

 

谢谢!


 

[此贴子已经被作者于2013-5-6 10:47:44编辑过]

--  作者:Bin
--  发布时间:2013/4/27 9:39:00
--  
比较简单的做法就是,常用的表就不要使用动态加载  不是常用的表使用动态加载
--  作者:不倒的翁
--  发布时间:2013/4/27 9:52:00
--  

常用的,信息量少的,用WIN的ACC数据库代替,存放在本地,比对远程数据库中有无修改,修改则更新本机上的ACC数据库,未修改则使用本地的ACC数据库。

经验比较少。个人看法。勿拍。

图片点击可在新窗口打开查看


--  作者:zpx_2012
--  发布时间:2013/4/27 10:23:00
--  

谢谢!

那看来就把授权表,用户,流程设置之类的基础表都全部加载(数据量不大,就几百行内),但这样内存小的电脑是否受不了啊,原来以为全部动态加载好,把datatabel的代码都改为SQLCommand从后台加载的,看来又要改回来了。好多啊,

还有没有其他好办法?

 


--  作者:zpx_2012
--  发布时间:2013/4/27 10:50:00
--  

追加一个问题,打开项目初始化时打开很多事件开关,因为都是用全局事件,这个是否会影响打开的速度或运行中的速度?

For Each dt As DataTable In DataTables
    dt.GlobalHandler.AfterLoad = True
    dt.GlobalHandler.PrepareEdit = True
    dt.GlobalHandler.StartEdit = True
    dt.GlobalHandler.DataColChanged = True
    dt.GlobalHandler.DataColChanging = True
    dt.GlobalHandler.BeforeDeleteDataRow = True
    dt.GlobalHandler.BeforeSaveDataRow = True
    dt.GlobalHandler.BeforeSelChange = True
    dt.GlobalHandler.DataRowDeleting = True
    dt.GlobalHandler.DataRowDeleted = True
    dt.GlobalHandler.DataRowAdding = True
    dt.GlobalHandler.DataRowLockedChanged = True
Next


--  作者:不倒的翁
--  发布时间:2013/4/27 11:06:00
--  
以下是引用zpx_2012在2013-4-27 10:23:00的发言:

谢谢!

那看来就把授权表,用户,流程设置之类的基础表都全部加载(数据量不大,就几百行内),但这样内存小的电脑是否受不了啊,原来以为全部动态加载好,把datatabel的代码都改为SQLCommand从后台加载的,看来又要改回来了。好多啊,

还有没有其他好办法?

 

和你的项目设计框架也有一定的关系。

进入某模块再进行数据加载。

不进入就不加载。

不要一打开项目就把所有的数据都加载到本地。。


--  作者:不倒的翁
--  发布时间:2013/4/27 11:09:00
--  
以下是引用zpx_2012在2013-4-27 10:50:00的发言:

追加一个问题,打开项目初始化时打开很多事件开关,因为都是用全局事件,这个是否会影响打开的速度或运行中的速度?

For Each dt As DataTable In DataTables
    dt.GlobalHandler.AfterLoad = True
    dt.GlobalHandler.PrepareEdit = True
    dt.GlobalHandler.StartEdit = True
    dt.GlobalHandler.DataColChanged = True
    dt.GlobalHandler.DataColChanging = True
    dt.GlobalHandler.BeforeDeleteDataRow = True
    dt.GlobalHandler.BeforeSaveDataRow = True
    dt.GlobalHandler.BeforeSelChange = True
    dt.GlobalHandler.DataRowDeleting = True
    dt.GlobalHandler.DataRowDeleted = True
    dt.GlobalHandler.DataRowAdding = True
    dt.GlobalHandler.DataRowLockedChanged = True
Next

看你写的代码估计你就是打开项目后加载所有的表了。

FT默认表全局事件里面大部分都是关闭的,为了性能提升。

你动态加载某模块并加载数据表,同时在加载时代码打开相应的表全局事件,这样比你用遍历批量打开事件有效的多,也容易控制。

 


--  作者:zpx_2012
--  发布时间:2013/4/27 11:25:00
--  
刚好相反,我是打开项目时一个表都没有加载,全部都在外部表设置不加载了。只是在打开项目时打开全部全局事件代码的开关而已。因为我基本上都是用全局代码,不知道速度慢是不是这个原因。但现在也无法考量运行全局代码效率到底会差多少?但如果不用全局代码,不可能在每个表中都去重复的使用相同的代码吧。
--  作者:jspta
--  发布时间:2013/4/27 11:39:00
--  
以下是引用zpx_2012在2013-4-27 11:25:00的发言:
刚好相反,我是打开项目时一个表都没有加载,全部都在外部表设置不加载了。只是在打开项目时打开全部全局事件代码的开关而已。因为我基本上都是用全局代码,不知道速度慢是不是这个原因。但现在也无法考量运行全局代码效率到底会差多少?但如果不用全局代码,不可能在每个表中都去重复的使用相同的代码吧。

表没有加载如何设置开启?

你说的加载是没有加载数据吧,我们说的是表一开始就不存在,也就是说项目打开后只有一个表。表都是使用的时候动态从后台把表加载过来。


--  作者:zpx_2012
--  发布时间:2013/4/27 12:02:00
--  
是的,我是没加载数据,但空表是加载了的,如果不加载空表要怎么设置啊,这个没弄过,那不是要把外部数据表中的表全部删除了。然后再用OuterTableBuilder动态加载进来?这样速度会快很多吗?