Rss & SiteMap
Foxtable(狐表) http://www.foxtable.com
以下是产品表目录树双击节点筛选代码,双击后约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
你厉害,别说是筛选2000行,就是加载2000行,也不应该超过0.3秒,你居然整出个10秒来。
这和双击还是单击,没有任何关系的,自己好好找找原因吧,搞不定就做例子传上来。
要善于运用排除法,既然你怀疑双击不行,那就将代码设置在单击事件中,如果效果一样,不就排除了双击的原因吗?
下面这个表就是2000行,双击目录树节点筛选,快的时候是0秒,慢的时候是0.015秒,也比你快666倍:
下载信息 [文件大小:34.9 KB 下载次数:14] | |
![]() |
我准确计算了一下,目录树筛选要5-6秒。先说明一下,我现在是2个表:[产品]表和[用料]表,[用料]表是[产品]表的子表,目录树筛选的是[产品]表,当子表没有记录时,筛选很快,现在子表有8000条记录,所以筛选慢了,是这样吗?2表是关联表。
我的案例是开发版做的,需要的话我发上来。
这个文件有关联,父表2000行,子表8000行,筛选一样很快啊:
下载信息 [文件大小:203.3 KB 下载次数:14] | |
![]() |
开发版的狗也支持商业版的foxtable,你将数据导出,用商业版做个例子吧。
既然现在排除了双击和关联的影响,你也可以继续用排除法,逐个删除可能有影响的表事件来测试,看看原因到底在哪,这通常都是因为存在不合理的代码造成的。
我想代码应该不会有问题,都是按照帮助做的,而且关联数据少的时候目录树筛选也很快,问题可能出在关联,[产品]表和[用料]表的关联我是用了三个字段[产品分类]、[型号]、[规格],会不会是关联字段太多影响了筛选速度。
之前,我也是用主表的_Identify与子表的ID进行关联,但操作人员不愿意在子表一个一个的录入,而是希望通过复制EXCEL表的数据,这样就修改成现在的关联,实在没办法。
1、那就先改为一个字段关联,看看究竟是不是关联的原因,怀疑什么,就去验证什么,不要只停留在猜想阶段。
2、即使用主表的_Identify与子表的ID关联,子表的[产品分类]、[型号]、[规格]一样可以自动输入,甚至连代码也不用写,直接在子表加入三个表达式列,引用父表数据即可。
1、我等下去验证;
2、我需要的不是[产品分类]、[型号]、[规格]的自动录入,而是大批量从EXCEL表复制,由于ID关联,所以不行。
1、这个问题和窗口、目录树已经是否双击,都没有任何关系,因为你就是在产品表直接通过菜单筛选都是很慢的。
2、将用料表的计算用料和单价两列的表达式删除,筛选即可回到正常速度。
3、你的设计不太好,就这么几个表,居然有这么多关联,而且全是多列关联。
4、意外的一个发现,用料表的PrepareEdit事件为:
Dim tb As New DropTreeBuilder
tb.SourceTable = DataTables("材料") '指定目录树表
tb.TreeCols = "材料分类|材料名称|型号规格" '指定用于生成目录树的列
tb.ReceiveCols = "材料分类|材料名称|型号规格" '指定数据接收列
Tables("用料").Cols("材料分类").DropTree = tb.Build()
居然没有进行任何的判断,例如是否是材料分类列,是否是焦点单元格,等于每选择一个单元格就执行一次这样的代码,效率极低,这样的代码最多在MainTableChanged设置即可,而且还要判断一下主表是否是用料表,才予以执行。