Foxtable(狐表)用户栏目专家坐堂 → 目录树双击筛选


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

主题:目录树双击筛选

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


加好友 发短信
等级:九尾狐 帖子:2649 积分:19384 威望:0 精华:1 注册:2008/9/12 9:19:00
目录树双击筛选  发帖心情 Post By:2010/12/10 20:48:00 [只看该作者]

以下是产品表目录树双击节点筛选代码,双击后约10多秒才筛选出来,而产品表只有2000条记录,如果是2万条记录,岂不更长时间,而双击筛选是经常操作。

Dim Value()As String
Value = e.Node.FullPath.Split("\")
Select Case e.Node.Level
    Case 0
        Tables("产品").Filter ="[产品分类] = '" & Value(0) & "'"
    Case 1
        Tables("产品").Filter ="[产品分类] = '" & Value(0) & "' And [型号] = '" & Value(1) & "'"
End Select


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


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/11 0:11:00 [只看该作者]

你厉害,别说是筛选2000行,就是加载2000行,也不应该超过0.3秒,你居然整出个10秒来。

这和双击还是单击,没有任何关系的,自己好好找找原因吧,搞不定就做例子传上来。
要善于运用排除法,既然你怀疑双击不行,那就将代码设置在单击事件中,如果效果一样,不就排除了双击的原因吗?

 

下面这个表就是2000行,双击目录树节点筛选,快的时候是0秒,慢的时候是0.015秒,也比你快666倍:

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目30.rar

[此贴子已经被作者于2010-12-11 1:17:49编辑过]

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


加好友 发短信
等级:九尾狐 帖子:2649 积分:19384 威望:0 精华:1 注册:2008/9/12 9:19:00
  发帖心情 Post By:2010/12/11 8:28:00 [只看该作者]

我准确计算了一下,目录树筛选要5-6秒。先说明一下,我现在是2个表:[产品]表和[用料]表,[用料]表是[产品]表的子表,目录树筛选的是[产品]表,当子表没有记录时,筛选很快,现在子表有8000条记录,所以筛选慢了,是这样吗?2表是关联表。

 

我的案例是开发版做的,需要的话我发上来。

[此贴子已经被作者于2010-12-11 8:29:22编辑过]

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


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/11 10:10:00 [只看该作者]

这个文件有关联,父表2000行,子表8000行,筛选一样很快啊: 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目31.rar

 

开发版的狗也支持商业版的foxtable,你将数据导出,用商业版做个例子吧。

既然现在排除了双击和关联的影响,你也可以继续用排除法,逐个删除可能有影响的表事件来测试,看看原因到底在哪,这通常都是因为存在不合理的代码造成的。

[此贴子已经被作者于2010-12-11 10:16:14编辑过]

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


加好友 发短信
等级:九尾狐 帖子:2649 积分:19384 威望:0 精华:1 注册:2008/9/12 9:19:00
  发帖心情 Post By:2010/12/11 10:46:00 [只看该作者]

我想代码应该不会有问题,都是按照帮助做的,而且关联数据少的时候目录树筛选也很快,问题可能出在关联,[产品]表和[用料]表的关联我是用了三个字段[产品分类]、[型号]、[规格],会不会是关联字段太多影响了筛选速度。

 

之前,我也是用主表的_Identify与子表的ID进行关联,但操作人员不愿意在子表一个一个的录入,而是希望通过复制EXCEL表的数据,这样就修改成现在的关联,实在没办法。


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


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/11 10:59:00 [只看该作者]

1、那就先改为一个字段关联,看看究竟是不是关联的原因,怀疑什么,就去验证什么,不要只停留在猜想阶段。

2、即使用主表的_Identify与子表的ID关联,子表的[产品分类]、[型号]、[规格]一样可以自动输入,甚至连代码也不用写,直接在子表加入三个表达式列,引用父表数据即可。

[此贴子已经被作者于2010-12-11 11:05:25编辑过]

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


加好友 发短信
等级:九尾狐 帖子:2649 积分:19384 威望:0 精华:1 注册:2008/9/12 9:19:00
  发帖心情 Post By:2010/12/11 11:11:00 [只看该作者]

1、我等下去验证;

2、我需要的不是[产品分类]、[型号]、[规格]的自动录入,而是大批量从EXCEL表复制,由于ID关联,所以不行。


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


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/11 11:53:00 [只看该作者]

呵呵,我用多列关联也一样啊:

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目31.rar


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


加好友 发短信
等级:九尾狐 帖子:2649 积分:19384 威望:0 精华:1 注册:2008/9/12 9:19:00
  发帖心情 Post By:2010/12/11 12:15:00 [只看该作者]

我还是传上来,请狐爸帮我看一下

窗口表:BOM窗口

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:产品用料.rar


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


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/11 13:14:00 [只看该作者]

1、这个问题和窗口、目录树已经是否双击,都没有任何关系,因为你就是在产品表直接通过菜单筛选都是很慢的。

2、将用料表的计算用料和单价两列的表达式删除,筛选即可回到正常速度。

3、你的设计不太好,就这么几个表,居然有这么多关联,而且全是多列关联。

4、意外的一个发现,用料表的PrepareEdit事件为:

 

Dim tb As New DropTreeBuilder
tb.SourceTable = DataTables("材料") '指定目录树表
tb.TreeCols = "材料分类|材料名称|型号规格" '指定用于生成目录树的列
tb.ReceiveCols = "材料分类|材料名称|型号规格" '指定数据接收列
Tables("用料").Cols("材料分类").DropTree = tb.Build() 

 

居然没有进行任何的判断,例如是否是材料分类列,是否是焦点单元格,等于每选择一个单元格就执行一次这样的代码,效率极低,这样的代码最多在MainTableChanged设置即可,而且还要判断一下主表是否是用料表,才予以执行。

[此贴子已经被作者于2010-12-11 13:16:34编辑过]

 回到顶部
总数 25 1 2 3 下一页