Foxtable(狐表)用户栏目专家坐堂 → 再次讨教:三表汇总-已解决


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

主题:再次讨教:三表汇总-已解决

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


加好友 发短信
等级:七尾狐 帖子:1732 积分:11266 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2013/5/29 20:42:00 [显示全部帖子]

建立一个时间表只需要包含三表中的不重复时间列

 

以这个表为主表,关联其他三个表,就可以拼凑成你想要的表了


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


加好友 发短信
等级:七尾狐 帖子:1732 积分:11266 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2013/5/30 10:44:00 [显示全部帖子]

这样不知道能不能满足要求

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:三表汇总 (2).table

增加一个时间表,增加一个函数。直接在窗口1中的,更新按钮可以查看效果

[此贴子已经被作者于2013-5-30 10:45:37编辑过]

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


加好友 发短信
等级:七尾狐 帖子:1732 积分:11266 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2013/5/30 13:32:00 [显示全部帖子]

以下是引用泡泡在2013-5-30 13:18:00的发言:

感谢你的回复

我测试了,若删除某一行数据后,该天的日期在综合表里还是有的,只是没有单号、数量等信息了

这个确实是问题,但是很简单,查询表是一个视图,你只需要加载的时候,加些判断条件就可以了,

毛坯入库编号 is not null or xx is not null 等 (这个条件你直接加到查询表本身就可以了)

 

所有的步骤汇总的结果就是,只剩下select * from {三表汇总} 一句话而已。

如果加载某个时间段,只需要加上时间

 

如果你是外部数据源(Access或MSSQL),把这个直接做成视图,效果一模一样


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


加好友 发短信
等级:七尾狐 帖子:1732 积分:11266 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2013/5/30 14:28:00 [显示全部帖子]

以下是引用don在2013-5-30 14:21:00的发言:
验证是下面这句起作用,不解?
t.DataTable.Load

没有赋值,只是把时间从三个表中提取出来,加入到时间表中。(这个是过渡表,连接三个表的关键)

 

再通过三表汇总视图(SQL查询表)自动进行汇总的

 

sql比较半调子,忘记了还可以用union,这样就不用循环了。

 

那句话只是重新执行了三表汇总的SQL查询语句,这样就把新添加的数据加载到这个汇总表中了

[此贴子已经被作者于2013-5-30 14:29:53编辑过]

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


加好友 发短信
等级:七尾狐 帖子:1732 积分:11266 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2013/6/1 12:29:00 [显示全部帖子]

去掉编号才能汇总成一条,否则没有办法。

如果你硬要编号,还不如直接筛选三张表格进行查看那

[此贴子已经被作者于2013-6-1 12:29:36编辑过]

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


加好友 发短信
等级:七尾狐 帖子:1732 积分:11266 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2013/6/1 14:53:00 [显示全部帖子]

你这张表想全自动完成比较复杂,设计不合理。

1.编号之间没有什么关联,仅靠时间。

如果某天多次的毛胚入库,多次的电镀入库,多次的出库,导致每张表间行数不一致(比较复杂)

2.你还要去按照顺序进行升序

这意味着每次添加新数据都可能造成计算一次,万一哪天某张表漏记录,进行补充,这样全表全部都要进行重算。为什么?

就是因为你还要算每笔过后的库存,库存是根据你排序结果进行计算的(这个导致整个编码陷入了极大排序困扰)

 

单纯编码很复杂,如果你是SQL2005的数据库,那么我想办法再帮你解决下。

 

 

 


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


加好友 发短信
等级:七尾狐 帖子:1732 积分:11266 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2013/6/2 10:39:00 [显示全部帖子]

这个编码还是有BUG,请查看毛胚表部分,汇总时候被覆盖掉了。

应该是插入的先后顺序问题。

这个编码的让我想起了一起写的VBA,字典+数组+SQL,呵呵

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:三表汇总 .table
[此贴子已经被作者于2013-6-2 10:39:59编辑过]

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


加好友 发短信
等级:七尾狐 帖子:1732 积分:11266 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2013/6/2 11:21:00 [显示全部帖子]

以下是引用fjlclxj在2013-6-2 11:13:00的发言:
请教哪段代码有问题?怎么解决的

没有仔细查看代码部分,你下载我的附件,汇总的时候,丢失了毛胚表的5-2号的部分项(应该是覆盖掉了)


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


加好友 发短信
等级:七尾狐 帖子:1732 积分:11266 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2013/6/3 14:41:00 [显示全部帖子]

以下是引用don在2013-6-3 13:47:00的发言:
套用灰太狼經典台詞:我一定會回來的!

樓主標題註明已解決,我看未必:
因現在代碼中沒有加入時段限制,為合併三表所有數據!
日後數據庫累積了許多年月的數據,難道每次都要查看或列印全部數據?

同意don兄的,所以我一直没有动手去编写代码。不过只要对三表进行加载限制,也可以做到。

这样总觉得不方便,而且必须是三表都载入都foxtable中才行。

 

如果泡泡的数据库有几十万行的话,ACCESS可能会拖累性能的


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


加好友 发短信
等级:七尾狐 帖子:1732 积分:11266 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2013/6/4 13:25:00 [显示全部帖子]

既然参与了,我也来凑凑热闹

应该比较完美了,完美排序,日期调用,只需要增加一表作为临时存储即可

如果泡泡能把字段弄的有规律的话,代码应该可以很简洁

 

主要循环代码:

For Each str As String In lstdate
    Dim lstMP As List(of DataRow) = dt.Select("日期 = #" & str & "# and 单号 like 'MP%'","单号")
    Dim lstRK As List(of DataRow) = dt.Select("日期 = #" & str & "# and 单号 like 'RK%'","单号")
    Dim lstCK As List(of DataRow) = dt.Select("日期 = #" & str & "# and 单号 like 'CK%'","单号")
    Dim Max As Integer = math.Max(math.Max(lstMP.Count,lstRK.Count),lstCK.Count)
    t.AddNew(max)
    For IntA As Integer = 0 To Max - 1
        Dim r As Row = t.Rows(IntA + Int)
        r("日期") = cdate(str)
        If lstMP.Count - 1 >= IntA Then
            r("毛胚入库单号") = lstMP(IntA)("单号")
            r("毛胚入库数量") = lstMP(IntA)("数量")
            r("毛胚单价") = lstMP(IntA)("单价")
            IntMP = IntMP  + r("毛胚入库数量")
        End If
        If lstRK.Count - 1 >= IntA Then
            r("电镀入库单号") = lstRK(IntA)("单号")
            r("电镀入库数量") = lstRK(IntA)("数量")
            r("电镀单价") = lstRK(IntA)("单价")
            IntMP = IntMP - r("电镀入库数量")
            IntRK = IntRK + r("电镀入库数量")
        End If
        r("毛胚库存") = intMP  ''若每行显示,移到条件外
        If lstCK.Count - 1 >= IntA Then
            r("出库单号") = lstCK(IntA)("单号")
            r("出库数量") = lstCK(IntA)("数量")
            r("出库单价") = lstCK(IntA)("单价")
            IntRK = IntRK - r("出库数量")
        End If
        r("电镀库存") = intRK  '若每行显示,移到条件外
    Next IntA
    Int = Int + max
Next

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:三表汇总.rar


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