以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 如何设置datatable的load条件. (不是重新加载!!!) (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=106703) |
-- 作者:ncefans -- 发布时间:2017/9/14 11:03:00 -- 如何设置datatable的load条件. (不是重新加载!!!) 首先我快被load快搞死了. 先说下两种方式的差异. 1) 在项目外部数据源中,直接设置加载条件,加载数据后的结果有2000行左右. datatable在项目启动加载的时候,非常非常快,可能不到1秒.启动进去后,datatable完全正常.
2) 在窗口代码中,如果重新load(用如下代码),非常非常慢,要1分钟以上,同样的加载条件. DataTables("xxxxx").LoadFilter = "xxx =yyy" DataTables("xxxxx").Load() 看Foxtable里面的帮助,关于动态加载的,都是建议用第二种代码的方式,我不知道其他人有没有遇到同样问题. 现在我改成默认先不加载,后面再加载的方式. a) 在BeforeLoadOuterTable事件代码,(下面是复制帮助中的例子) if e.DataTableName = "订单" Then e.Cancel = True e.SelectString = "Selec t * F rom {订单} Wh ere [_Identify] Is Null" End If b) 在窗口按钮中的代码中需要加载,用下面代码: DataTables.Load("订单") 寻遍帮助文件找不到相关内容. 请注意DataTables.Load("订单")和DataTables("订单").Load()的差异,我问的是前一种. [此贴子已经被作者于2017/9/14 11:09:15编辑过]
|
-- 作者:有点甜 -- 发布时间:2017/9/14 11:11:00 -- 先试试这样
systemready = False
BeforeLoadOuterTable动态条件,你可以用全局代码,如
e.SelectString = "Select * From {订单} Where " & public变量
http://www.foxtable.com/webhelp/scr/1842.htm
|
-- 作者:ncefans -- 发布时间:2017/9/14 11:21:00 -- 谢谢大神回复,麻烦看下我蓝色回复字体. 1) systemready = FalseDataTables("xxxxx").LoadFilter = "xxx =yyy" DataTables("xxxxx").Load() systemready = True 我试一下有没有用. 我目前把表间关联全部删除,表的事件代码全部注释了,都没有任何改善. 2) BeforeLoadOuterTable动态条件,你可以用全局代码,如 e.SelectString = "Select * From {订单} Where " & public变量 BeforeLoadOuterTable会在AfterOpenProject事件之前就执行了. 我加载的代码在AfterOpenProject之后,改变会有效吗? 我试试看先. [此贴子已经被作者于2017/9/14 11:23:46编辑过]
|
-- 作者:有点甜 -- 发布时间:2017/9/14 11:36:00 -- 1、单独做一个项目,单独引用对应的表,然后测试加载,是否有问题?
那个表,在数据库那里设置一下索引看看。不行就做个例子发上来测试。
2、有效,public变量改变以后,再重新加载表即可。 |
-- 作者:ncefans -- 发布时间:2017/9/14 16:47:00 -- 谢谢. 第一种方式目前还没有试. 第二种,改用public变量的方式datatable能加载了,但是出错. 相关代码如下: BeforeLoadOuterTable事件代码 Select Case e.DataTableName Case "业务销售" e.Cancel = True \'打开项目的时候不加载此表 e.SelectString = "Select * Fro m {业务销售} Where " & SalesrecordFilterString \'设置加载条件 Case "出货记录" e.Cancel = True \'打开项目的时候不加载此表 e.SelectString = "Select * Fro m {出货记录} Where " & ShiprecordFilterString \'设置加载条件 End Select 用户登录窗口,登录按钮相关事件代码 If _UserGroup = "管理员" Then SalesrecordFilterString = "[归档] = 0" ShiprecordFilterString = "[归档] = 0" Else SalesrecordFilterString = "[归档] = 0 AND [录入者] = \'" & _UserName & "\'" ShiprecordFilterString = "[归档] = 0 AND [录入者] = \'" & _UserName & "\'" End If DataTables.Load("出货记录|业务销售") 恢复了数据库,检查了出货记录表,Identify列都是正常的. 而且把这部份代码注释掉,让项目正常自行加载这两个表后,不会出错. 请帮忙看看,谢谢! |
-- 作者:有点甜 -- 发布时间:2017/9/14 16:59:00 -- 测试了一下,代码没问题。
你肯定有其余的事件代码影响了。
上传具体例子测试。 |
-- 作者:ncefans -- 发布时间:2017/9/14 17:06:00 -- 现在那个确定按钮点了之后一直再出来,进入死循环,没办法看到后面的那个运行错误的详细信息.. 只有结束foxtable进程才能退出来. 检查了所有代码,没有哪里是引用_Identify列. 看起来,只能我重新做个项目,只有这些代码试一下.
|
-- 作者:有点甜 -- 发布时间:2017/9/14 17:34:00 -- 以下是引用ncefans在2017/9/14 17:06:00的发言:
现在那个确定按钮点了之后一直再出来,进入死循环,没办法看到后面的那个运行错误的详细信息.. 只有结束foxtable进程才能退出来. 检查了所有代码,没有哪里是引用_Identify列.
看起来,只能我重新做个项目,只有这些代码试一下.
你用的DataTables.Load(""),是加载表,而不是加载数据,你要慎用。加载数据,都是用 DataTables("").Load 的。 |
-- 作者:ncefans -- 发布时间:2017/9/14 18:00:00 -- 不知道是怎么搞的.重新做个项目, 用DataTables("").Load的方式完全无问题. Load多次都不会等很久. 先不加载,后面再用上面说的那些代码DataTables.Load(""),加载表,也不会出现_Identify列不存在的错误. 看起来需要把项目全部重写一遍? 这个项目之前是试用版写的,后来买了开发版之后,转换成的开发版..难道转换后会出现问题吗? |
-- 作者:ncefans -- 发布时间:2017/9/14 18:04:00 -- 初步判断不是数据库的问题,因为重新建个新项目,两种方式加载没有任何问题. |