以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [已解决]求助多表合并方法。 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=100923) |
||||||||||||||||||||||||||||||
-- 作者:husl -- 发布时间:2017/5/21 15:28:00 -- [已解决]求助多表合并方法。 有表A 表B A表
B表
请教怎么用代码直接生成 窗口表 C
我在窗口中添加列这样写,但是数量这里咋办呢?。 With tb.DataTable.DataCols \'tb我定义的是表A .Add("数量",Gettype(Double), "") .Add("合计",Gettype(Double), "ISNULL([单价],0)*ISNULL([数量],0)") End With 求教。,。。 【解决办法】 找了半天方法,最后做了关联 只是不知道还有没有别的好办法了。类似于 left join 一样的。 Relations.Add("po",表A.DataTable.DataCols("ID"),表B.DataTable.DataCols("ID")) With tb.DataTable.DataCols \'tb我定义的是表A .Add("数量",Gettype(Double), "sum(Child(po).数量") .Add("合计",Gettype(Double), "ISNULL([单价],0)*ISNULL([数量],0)") End With Relations.Delete("po") [此贴子已经被作者于2017/5/21 16:29:46编辑过]
|
||||||||||||||||||||||||||||||
-- 作者:有点蓝 -- 发布时间:2017/5/22 8:49:00 -- 如果需要编辑数据的,只能使用关联表 不需要编辑的,可以使用sqlquery表,用sql直接 left join即可
|
||||||||||||||||||||||||||||||
-- 作者:husl -- 发布时间:2017/5/22 10:16:00 -- 老师好,。主要是我的 A,B 表是内部函数生成的,函数定义的就是个Table,满足一大串条件之后,然后再 XX.fill(select ***) 生成的一堆表中选的两个临时表,,窗口中通过Functions.Execute引用的,目前想不到别的办法,除非把函数都改掉,但是工程太大。。。另外因为 select 语言太长,。我直接在SQL server 生成视图都可以的,但是在foxtable中经常出现莫名其妙的错误。。所以有的表是 SQL语句生成的,有的是视图。 就是这样得出来的 A表和 B表。 表c不需要编辑,有没有别的啥办法呢? [此贴子已经被作者于2017/5/22 10:20:17编辑过]
|
||||||||||||||||||||||||||||||
-- 作者:有点色 -- 发布时间:2017/5/22 10:21:00 -- 你的表A和表B直接连接查询不就行了?类似
http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=100766&skin=0
|
||||||||||||||||||||||||||||||
-- 作者:husl -- 发布时间:2017/5/22 11:00:00 -- 额。这个例子。 Dim sql1 As String = "select 反馈完成日 as 日期, 样办数量 as 反馈, 0 as 计划 from (" & sql4 & ") union all select 计划完成日, 0, 样办数量 from (" & sql5 & ")"
求教。这个怎么写呢。 |
||||||||||||||||||||||||||||||
-- 作者:有点蓝 -- 发布时间:2017/5/22 11:57:00 -- Dim sql1 As String = "select 反馈完成日 as 日期, 样办数量 as 反馈, 0 as 计划 from (" & sql4 & ") union all select 计划完成日, 0, 样办数量 from (" & sql5 & ")" table.fill(sql,true)
|
||||||||||||||||||||||||||||||
-- 作者:有点色 -- 发布时间:2017/5/22 12:04:00 -- 回复5楼,你用一个变量记录对应表的sql语句吧,比如
vars("表A") = sql语句
你的问题,同样可以用代码解决。填充表内容,可以这样写
For Each r As row in Tables("表C").Rows Dim fdr As DataRow = DataTables("表B").Find("id = \'" & r("id") & "\'") If fdr isnot nothing then r("数量") = fdr("数量") End If Next |
||||||||||||||||||||||||||||||
-- 作者:husl -- 发布时间:2017/5/22 16:16:00 -- 谢谢了老师们的耐心解答 。但是貌似 不在一个频道。。。还是我没理解。。。我的表A和B 是用 这样的 内部函数 得出来的 Dim a As Table =Args(0) …………………… a.DataTable.Fill("select ************) 窗口中的表 A,和B是 Functions.Execute(“a”,A) Functions.Execute(“****”,B) 还有一个就是空的 table控件。 目的是在这个 table里面 生成 表C 上面的方法貌似不行吧?。除非修改内部函数 定义一个 String 然后 用 下面的方法。。
Dim sql1 As String = "select 反馈完成日 as 日期, 样办数量 as 反馈, 0 as 计划 from (" & sql4 & ") union all select 计划完成日, 0, 样办数量 from (" & sql5 & ")" table.fill(sql,true)
是这样吗? |
||||||||||||||||||||||||||||||
-- 作者:有点色 -- 发布时间:2017/5/22 16:52:00 -- 用两个全局变量记录生成你a表、b表的sql语句,这样你可以直接写sql语句生成表C了。
你也可以写代码处理,不就是把数量列填充过去而已嘛?类似代码
For Each r As row in Tables("表C").Rows Dim fdr As DataRow = DataTables("表B").Find("id = \'" & r("id") & "\'") If fdr isnot nothing then r("数量") = fdr("数量") End If Next |
||||||||||||||||||||||||||||||
-- 作者:husl -- 发布时间:2017/5/22 16:57:00 -- 好的,明白了。谢谢!! |