Foxtable(狐表)用户栏目专家坐堂 → [求助]关联表的子表,同步表时特别慢


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

主题:[求助]关联表的子表,同步表时特别慢

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


加好友 发短信
等级:超级版主 帖子:109489 积分:557107 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/13 13:59:00 [显示全部帖子]

开发者密码给一下

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


加好友 发短信
等级:超级版主 帖子:109489 积分:557107 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/13 14:30:00 [显示全部帖子]

如果是指【打印明细】表加载慢 ,是因为【华晨生产计划】的表达式计算造成的,【打印明细】表加载后会导致【华晨生产计划】7000多行数据的表达式列重新计算。加载的数据越多肯定就越慢。建议改为数据列,然后在表事件里实时计算:http://www.foxtable.com/webhelp/topics/1472.htm



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


加好友 发短信
等级:超级版主 帖子:109489 积分:557107 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/13 15:24:00 [显示全部帖子]

有多少个列就加多少个添加咯

首先将统计表的DataColChanged事件代码设置为:

If e.DataCol.Name = "产品" orelse e.DataCol.Name = "列2" orelse e.DataCol.Name = "列3" Then

    Dim Filter As String = "[产品] = '" & e.DataRow("产品") & "' and [列2] = '" & e.DataRow("列2") & "' and [列3] = '" & e.DataRow("列3") & "'"

    e.DataRow("数量") = DataTables("订单").Compute("Sum(数量)", Filter)
    e.
DataRow("金额") = DataTables("订单").Compute("Sum(金额)", Filter)
End
 If

同样在统计表设置好上述代码后,请重置一次该表的产品列。

订单表的金额列是一个表达式列,其表达式为:[数量] * [单价] * (1 - [折扣])
我们知道表达式列有一个特性,就是其值发生变化后,并不会触发DataColChanged事件,此特性导致我们无法简单地用前面介绍的方法来自动更新统计表中的销售金额。
所以有必要考虑用另一重算方法,将订单表的DataColChanged事件代码设置为:

Select Case e.DataCol.Name
    Case
 "数量","单价","折扣"
        
Dim pr As DataRow
        pr = 
DataTables("统计").Find("产品 = '" & e.DataRow("产品") & "'
 and [列2] = '" & e.DataRow("列2") & "' and [列3] = '" & e.DataRow("列3") & "'")

        If pr IsNot Nothing Then
            DataTables
("统计").DataCols("产品").RaiseDataColChanged(pr)
        End
 If
End
 Select


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


加好友 发短信
等级:超级版主 帖子:109489 积分:557107 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/13 15:44:00 [显示全部帖子]

去掉条件里的逗号。

另外建议使用帮助里的【另一种自动更新方式】,不要使用第一种+ e.NewValue - e.OldValue的方法

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


加好友 发短信
等级:超级版主 帖子:109489 积分:557107 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/13 15:57:00 [显示全部帖子]


Dim Filter As String = "[登记日期] = #" & e.DataRow("登记日期") & "# and [客户] = '" & e.DataRow("客户") & "' and [花号] = '" & e.DataRow("花号") & "' and [色位] = '" & e.DataRow("色位") & "' and [面料] = '" & e.DataRow("面料") & "' and [下单米数] = " & e.DataRow("米数") & " and [打印机台] = '" & e.DataRow("打印机台") & "'"

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


加好友 发短信
等级:超级版主 帖子:109489 积分:557107 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/13 16:12:00 [显示全部帖子]

看11楼,测试有什么问题?

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


加好友 发短信
等级:超级版主 帖子:109489 积分:557107 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/13 17:06:00 [显示全部帖子]

选择"登记日期"列,重置一下列

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


加好友 发短信
等级:超级版主 帖子:109489 积分:557107 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/13 17:36:00 [显示全部帖子]

没有符合条件的数据。也就是这2个表上面这些列不存在数据完全相同的行。

去掉[登记日期]条件就可以了,也就是[登记日期]数据对应不上。

建议建一个专门的编号列对应,不要使用这么多列对应,特别是日期列和数值列。日期列有时分秒的,赋值的时候使用的是date.now的 ,基本都不可能对应上

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


加好友 发短信
等级:超级版主 帖子:109489 积分:557107 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/13 20:24:00 [显示全部帖子]

两表是关联表,不代表数据就一定是一样的。如果要一样应该在关联表里新增,而不是在子表上新增。点击父表,在下面关联表里根本就看不到有数据这就是证明


图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看



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


加好友 发短信
等级:超级版主 帖子:109489 积分:557107 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/14 10:54:00 [显示全部帖子]

是一样的

只要点击华晨生产计划的行,下面关联表有对应数据的。重置列后,华晨生产计划这些行是有统计数据的。没有数据的都是没有对应关联数据的行。

打印明细没有关联到父表的这些行应该不是提过关联表新增的。或者是事后更改了关联列的数据
[此贴子已经被作者于2021/5/14 10:54:17编辑过]

 回到顶部
总数 11 1 2 下一页