以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 关于动态添加关联的问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=14724) |
-- 作者:布莱克朱 -- 发布时间:2011/11/29 22:47:00 -- 关于动态添加关联的问题 老大,因为我的项目关联比较多,影响到打开速度问题,所以我想改用动态关联.一下代码是我放在窗口事件里面执行,代码写的对不对?我执行好像有一些问题.
If Relations.Contains("A") Then
还有就是我窗口有个窗口表本来是绑定这个关联表的,现在动态了以后,这个表的绑定是怎样的?
另外,还有这样的做法,对原来关联的加载,关联的锁定,关联的删除,同步的效果是不是一样的?请回复,我如果测试可行,我就用代码来做关联了,不然速度有问题. |
-- 作者:狐狸爸爸 -- 发布时间:2011/11/29 23:02:00 -- 呵呵,你还是要确认到底是不是关联的原因吧。
如果是的:
1、正常建立关联,设计表的时候,将Table绑定到关联表。 2、删除关联,需要的时候,先创建关联:
Relations.Add("A",DataTables("办公用品领用单").DataCols("系统单号"),DataTables("办公用品领用单明细").DataCols("系统单号"))
这样窗口打开的时候,关联表已经存在,就自动绑定了。
3、至于同步锁定,同步更新,同步删除,这些不需要关联一样可以做到。 例如在没有建立关联的时候要同步删除,只需将父表的BeforeDeleteDataRow事件代码设置为: Datatables("子表名称").DeleteFor("子表关联列 = \'" & e.DataRow("父表关联列") & "\'")
一行代码就实现了同步关联删除的功能。同步锁定和同步更新也一样简单。 |
-- 作者:狐狸爸爸 -- 发布时间:2011/11/29 23:49:00 -- 实际上窗口设计也一样,我可以加载表B,在表A设计表B的窗口,绑定到表B各列,然后删除表B. 需要使用表B的时候,再动态加载表B,打开之前在表A中设计的表B的窗口即可。 |
-- 作者:blackzhu -- 发布时间:2011/11/30 7:55:00 -- 以下是引用狐狸爸爸在2011-11-29 23:49:00的发言:
实际上窗口设计也一样,我可以加载表B,在表A设计表B的窗口,绑定到表B各列,然后删除表B. 需要使用表B的时候,再动态加载表B,打开之前在表A中设计的表B的窗口即可。 老大,这个我明白.今后的思路之一. 但是表B如果有表事件代码咋办?还是要加载的,没有代码到是可以的. |
-- 作者:blackzhu -- 发布时间:2011/11/30 7:56:00 -- 因为除了表,还有窗口,代码没有多少,就是关联多一点,所以应该是关联的问题. |
-- 作者:blackzhu -- 发布时间:2011/11/30 7:59:00 -- 3、至于同步锁定,同步更新,同步删除,这些不需要关联一样可以做到。 例如在没有建立关联的时候要同步删除,只需将父表的BeforeDeleteDataRow事件代码设置为: Datatables("子表名称").DeleteFor("子表关联列 = \'" & e.DataRow("父表关联列") & "\'")
也就是说锁定等同步的工作的代码现在已经做的不能用了,要写条件的代码.明白了,和我现在用的虚拟关联一个道理. |
-- 作者:blackzhu -- 发布时间:2011/11/30 8:02:00 -- 、正常建立关联,设计表的时候,将Table绑定到关联表。 2、删除关联,需要的时候,先创建关联:
Relations.Add("A",DataTables("办公用品领用单").DataCols("系统单号"),DataTables("办公用品领用单明细").DataCols("系统单号"))
这个不明白,程序是不是这样的,第一步先建立一个关联,然后是在窗口建立一个表,然后将关联绑定,然后在删除那个关联.
Relations.Add("A",DataTables("办公用品领用单").DataCols("系统单号"),DataTables("办公用品领用单明细").DataCols("系统单号")) |
-- 作者:狐狸爸爸 -- 发布时间:2011/11/30 8:26:00 -- 既然窗口中的Table绑定到了这个关联表,那么肯定要在打开窗口前建立关联,具体在哪里,取决于设计需求。
对于一个超大型的系统,一般是两个思路:
1、分成不同的项目,例如销售、生产、财务、人士、仓管,共享一个数据库,各项目只加载自己的表,但是菜单中会有切换到其他项目的按钮,这是常规的设计方式,难度低。 2、如果要整合成一个项目,可以做一两个内部表,所有窗口都可以设计在内部表中,真实数据全部采用外部表,外部表本身、关联、表达式列都可以在运行过程中动态生成,这是非常规的设计,对于开发者要求高。
Foxtable是灵活的,不单单是窗口中的Table控件可以动态生成,可以根据需要随意加载不同表的数据,主表一样可以随意生成或卸载,随意加载不同表的数据,甚至数据源都可以动态切换。
http://www.foxtable.com/help/topics/1929.htm http://www.foxtable.com/help/topics/1930.htm http://www.foxtable.com/help/topics/1279.htm http://www.foxtable.com/help/topics/2335.htm http://www.foxtable.com/help/topics/2335.htm http://www.foxtable.com/help/topics/0695.htm http://www.foxtable.com/help/topics/1907.htm http://www.foxtable.com/help/topics/1919.htm
目前看来: 1、为了方便所有窗口集中在一个内部表设计,以前否决的窗口管理器加上分类的建议应该采纳。 2、应该加一个可以动态绑定到关联表的方法。
|
-- 作者:blackzhu -- 发布时间:2011/11/30 8:32:00 -- 目前看来: 1、为了方便所有窗口集中在一个内部表设计,以前否决的窗口管理器加上分类的建议应该采纳。 2、应该加一个可以动态绑定到关联表的方法。
这个好! |
-- 作者:blackzhu -- 发布时间:2011/11/30 8:36:00 -- 1、分成不同的项目,例如销售、生产、财务、人士、仓管,共享一个数据库,各项目只加载自己的表,但是菜单中会有切换到其他项目的按钮,这是常规的设计方式,难度低。 我自己的就是采取的这个办法.但是现在这个是人家要求的.唉! 动态数据的加载这个我都懂. |