Rss & SiteMap
Foxtable(狐表) http://www.foxtable.com
你有多少个关联啊?影响这么大? 可以考虑动态建立和删除关联。
也可以看看下面的,完全不用关联:
关联和性能。
Foxtable的双向关联功能,使得相关数据信手拈来,为我们查看数据带来了极大的便利。
但是关联较多的时候,对于性能是有较大影响的,会使打开项目的速度变慢,系统的反映也变得迟钝。
在批量修改数据、同步表、以及导入和合并数据时,这种影响更为明显。
我们可以关闭双向功能,减轻这种影响。
如果你追求极致的性能,或者觉得关联带来的影响已经严重拖累了系统性能,仅仅靠关闭双向关联还不足以解决这个问题,但是又离不开关联,毕竟关联是数据管理的基本功能,那么该怎么办呢?鱼和熊掌能够兼得吗?
当然可以,首先我们可以通过代码动态建立和删除关联,只有在需要的时候才建立某个关联,而在进行特定的操作之前,则删除这个关联,这样就不至于因为关联的存在而影响性能。
但是动态建立和删除关联,对于一般用户较难掌控,所以本节介绍一下如何在不建立关联的情况下,一一实现关联带来的所有功能,让我们鱼和熊掌兼得。
方案一
首先请打开CaseStudy目录下的文件:关联的替代.Table
在这个文件中,产品表和订单表没有建立关联,但是我们希望能够象已经建立关联一样,在产品表选择一个产品的时候,自动显式该产品的所有订单。
实现步骤:
1、新建一个窗口,窗口类型为停靠,停靠位置为底端。
2、插入一个Table控件,绑定到订单表
3、窗口的AfterLoad事件设为:
With
4、关闭窗口设计器,回到产品表,打开表属性设置窗口,将其CurrentChanged事件设为:
If
5、现在我们打开窗口1,可以看到在产品表选择一个产品,窗口1中的Table能够自动列出该产品的订单。
此方案实际上是直接将订单表,也就是Tables("订单")插入到产品表的窗口1中,然后在产品表中选择不同的产品时,动态修改订Tables("订单")的Filter属性,使得Tables("订单")只显示选定产品的订单。
因为直接用Tables("订单")来模拟实现关联表Tables("产品.订单"),所以我们可以直接在产品表中调用订单表的原窗口来输入数据;我们已经在订单表设计了一个窗口,名为"订单编辑",你可以在窗口1中选择一个订单,然后单击按钮“编辑订单”,即可编辑此选定的订单。
6、到目前为止,还有一个不足,就是选择窗口1的Table,然后增加一个订单,不能象关联表一样,新增行自动输入产品编号。
要做到这一点很简单,选择订单表,将其DataRowAdding事件的代码设为:
If MainTable.Name = "产品" Then
e.DataRow("产品编号") = MainTable.Current("产品编号")
End If
这样在窗口1中新增一个订单时,能够自动输入订单编号。
7、最后我们希望订单表能够自动调用产品表的单价,为此将订单表的DataColChanged事件设为:
If
经过上述设置,窗口1中的Table控件,表现得完全就像一个关联表。
这个方案有一个不足:当我们将主表切换到订单表的时候,你会发现,什么也看不到,因为Tables("订单")被挪到产品表的窗口1了。
当然我们可以通过MainTableChanged事件,实现相关窗口的自动关闭和打开,来解决这个问题。
但是这样还是有不足,至少维护起来较为苦难,而且切换主表的时候,屏幕闪烁也是一个难题,所以接下来我们看看方案二。
下载信息 [文件大小: 下载次数: ] | |
点击浏览该文件:关联的替代.table |
建议兄弟用一下 后台数据库自己的关联 ,比如SQL ACCESS 自己带的关联 比FOXTABLE的关联专业点
楼主是不是关联列比较多?
建议兄弟用一下 后台数据库自己的关联 ,比如SQL ACCESS 自己带的关联 比FOXTABLE的关联专业点
这话说得真是的,你这样很容易误导人的。
关联的替代,会不会影响做在报表和表中表达式?
举例:[@订单.订单明细,XS]. 或者 Sum(Child.金额).如不影响,我就可以将关联删除.这样打开的速度可以快一点.
可以不用表达式列,用数据列加代码解决。
也不用对这个过敏,大多数时候,这种影响并没有什么关系的。