以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  组合多表数据  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=88752)

--  作者:fubblyc
--  发布时间:2016/8/8 23:18:00
--  组合多表数据

红袍老师还没休息啊。问一个问题:

想实现:

在一个窗口里,有两个表,如下图:


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20160808231046.png
图片点击可在新窗口打开查看
想实现右边也显示左边的同样的会员卡号的所有的行。

现在只是选中行,要显示左边同样的行。

我知道中文怎么做,就是 左边的表加载后,将左边表的 所有【会员卡号】做为右边表【会员卡号】的加载条件。

另外,就是两个表同样会员卡号行的位置要一样。即使排序之后。为了看起来就像一张表。

为什么想这样做:这样的话就可以不用组合多个表加载、统计,而是都是加载或者统计单个表,而在窗口放在了一起。这样也许能提高加载效率。


--  作者:fubblyc
--  发布时间:2016/8/8 23:18:00
--  
不知道能不能实现。。。
--  作者:Hyphen
--  发布时间:2016/8/9 8:40:00
--  
加载:
如果加载条件是通用的,这样:Tables("表B").Filter = Tables("表A").Filter
如果不通用,这样
Tables("表B").Filter = "会员卡号 in (\'" & DataTables("表A").GetComboListString("会员卡号",Tables("表A").Filter).Replace("|","\',\'") & "\')"

排序必须要有相同的排序字段,否则没有办法一样,简单就这样
Tables("表B").Sort = Tables("表A").Sort


--  作者:fubblyc
--  发布时间:2016/8/9 9:01:00
--  

谢谢 Hyphen 老师,比如左表排序之后,行的位置就改变了。想要右表也的行也随着变化。两个表都有【会员卡号】的字段。

不知道有没有

Tables("表B").col("会员卡号").Position = Tables("表A").col("会员卡号").Position
类似的功能。右表【会员卡号】字段各个行的位置= 左表【会员卡号】字段各个行的位置。
 
两个表的排序字段不一样。
[此贴子已经被作者于2016/8/9 9:03:37编辑过]

--  作者:Hyphen
--  发布时间:2016/8/9 9:26:00
--  
没有这种用法

排序字段必须一致,否则没有办法比较顺序

--  作者:fubblyc
--  发布时间:2016/8/9 9:37:00
--  

第一步按照老师的方法可以实现了:


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

[此贴子已经被作者于2016/8/9 9:42:11编辑过]

--  作者:fubblyc
--  发布时间:2016/8/9 9:41:00
--  

哦。或者说将这两个表不可见,另外做一个显示表。将这两个表的数据合并在一起。

因为已经是加载好的表了。相比用加载、统计效率是不是应该会更高一点。

这样可行吗?

[此贴子已经被作者于2016/8/9 9:41:53编辑过]

--  作者:大红袍
--  发布时间:2016/8/9 9:45:00
--  
 循环左表的每一行,去右表查询对应的行,修改sortkey值为相同的值,即可。
--  作者:fubblyc
--  发布时间:2016/8/9 9:50:00
--  

恩恩。谢谢 红袍老师,刚发现用两个表来显示不好,因为有滚动条,一个表往下拉的时候,没有代码可以让另一个表同时往下拉吧?哈哈。

所以我想另外做一个显示表,将两个表的数据都放在这个显示表。

这样就不存在排序、拖动滚动条 不同步 的问题。

FT的特色功能不熟悉。。。不知道怎么弄。。。


--  作者:大红袍
--  发布时间:2016/8/9 10:05:00
--  

AfterScroll  


If Forms("窗口1").Opened Then
   Dim tbl As Table = Tables("窗口1_Table2")
   If e.Table.TopVisibleRow <> tbl.TopVisibleRow Then
      tbl.TopVisibleRow = e.Table.TopVisibleRow
      e.Table.TopVisibleRow = e.Table.TopVisibleRow \'此行不可少,确保第一个可见行完整显示
   End If
End If