以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  查询表如何实现以下功能  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=116162)

--  作者:mxy8898
--  发布时间:2018/3/20 17:30:00
--  查询表如何实现以下功能
如图
图片点击可在新窗口打开查看此主题相关图片如下:qq截图20180320171232.jpg
图片点击可在新窗口打开查看

项目介绍:(已完成)
1、表A 第一列(第一行、第二行……)数据同步到所有表第一列(第一行、第二行……不错乱)
2、表A每一行输入的数据是原始手工输入数据
3、后面所有表如表B、表D等,是通过表A手工输入的数据,公式计算得到的数据


目的:查询表
1、我在表A的第一列查找 广东内容(广东有可能有重复),查找出很多行关于广东的数据,
2、当我选中表搜索出的数据某一行后,可以自动关联显示其他表中同步此行或通过此行数据计算得出的结果行。

比如:
1、我搜索表A中,第一列的广东
2、选中表A中第二行时候,同步显示表B、表C、表D……很多表的第二行(第二行不是查询页面第二行,是通过表A第二行同步到其他表的第二行,第二行是唯一,_IDentify里的数值一样,选中查询表第二行,他的_IDentify是10,那么表B、表C、表D……里显示此行的_IDentify也是10)

--  作者:有点甜
--  发布时间:2018/3/20 18:50:00
--  

currentChanged事件写同步代码即可

 

 

示例一
假定我正在订单表操作,我们希望在订单表中选定一行时,客户表的光标能够自动定位到该客户,这样我一旦从订单表回到客户表,即可看到刚刚所选订单的客户资料。
为此我们在CurrentChanged事件中设置如下代码: 

If e.Table.Current Is Nothing Then \'如果Current为Nothing
    Return \'则返回
End If
Dim wz As Integer
Dim dr As DataRow
dr = DataTables("客户").Find("[客户ID] = \'" & e.Table.Current("客户ID") & "\'")
If dr IsNot Nothing Then
    wz = Tables("客户").FindRow(dr)
    If wz >= 0 Then
        Tables("客户").Position = wz
    End If
End If


--  作者:ycli368
--  发布时间:2018/3/20 21:20:00
--  
Mark
--  作者:mxy8898
--  发布时间:2018/3/20 23:03:00
--  
OK了,呵呵,太神气了
--  作者:mxy8898
--  发布时间:2018/3/21 8:49:00
--  
这个代码,在家电脑上执行挺好,但是把整个文件夹和实例复制到公司电脑上,代码不执行,检查代码一点问题没有,是咋回事。

代码如下:

If e.Table.Current Is Nothing Then \'如果Current为Nothing
    Return \'则返回
End If
Dim zjzh As Integer
Dim zjzh1 As DataRow
zjzh1 = DataTables("原始数据中间转换").Find("[_IDENTIFY] = \'" & e.Table.Current("_IDENTIFY") & "\'")
If zjzh1 IsNot Nothing Then
    zjzh = Tables("原始数据中间转换").FindRow(zjzh1)
    If zjzh >= 0 Then
        Tables("原始数据中间转换").Position = zjzh
    End If
End If \'Y以上选择本表,定位到钾离子表


If e.Table.Current Is Nothing Then \'如果Current为Nothing
    Return \'则返回
End If
Dim jlz As Integer
Dim jlz1 As DataRow
jlz1 = DataTables("钾离子计算公式").Find("[_IDENTIFY] = \'" & e.Table.Current("_IDENTIFY") & "\'")
If jlz1 IsNot Nothing Then
    jlz = Tables("钾离子计算公式").FindRow(jlz1)
    If jlz >= 0 Then
        Tables("钾离子计算公式").Position = jlz
    End If
End If

If e.Table.Current Is Nothing Then \'如果Current为Nothing
    Return \'则返回
End If
Dim zyd As Integer
Dim zyd1 As DataRow
zyd1 = DataTables("总硬度计算公式").Find("[_IDENTIFY] = \'" & e.Table.Current("_IDENTIFY") & "\'")
If zyd1 IsNot Nothing Then
    zyd = Tables("总硬度计算公式").FindRow(zyd1)
    If zyd >= 0 Then
        Tables("总硬度计算公式").Position = zyd
    End If
End If
[此贴子已经被作者于2018/3/21 8:50:22编辑过]

--  作者:有点甜
--  发布时间:2018/3/21 8:58:00
--  

试试改成这样,查询条件,不能用_Identify列的,有可能_Identify的值是不匹配的(比如你删除过了行、上下移动过了行,都有可能导致其值不相同)

 

If e.Table.Current Is Nothing Then \'如果Current为Nothing
    Return \'则返回
End If
Dim zjzh As Integer
zjzh = Tables("原始数据中间转换").FindRow("[某列] = \'" & e.Table.Current("某列") & "\'")
If zjzh >= 0 Then
    Tables("原始数据中间转换").Position = zjzh
End If


 

如果每个表的位置都是一样的,可以直接这样写代码,如

 

If e.Table.Current Is Nothing Then \'如果Current为Nothing
    Return \'则返回
End If
Tables("原始数据中间转换").Position = e.Table.Position

[此贴子已经被作者于2018/3/21 8:58:24编辑过]

--  作者:mxy8898
--  发布时间:2018/3/21 9:15:00
--  
如果用某列,这一列,多数是重复值,有影响吗
而且我看数据库
所有表都有_SortKey,而其中一个表没有这个列,正常吗
[此贴子已经被作者于2018/3/21 9:32:32编辑过]

--  作者:有点甜
--  发布时间:2018/3/21 10:47:00
--  
以下是引用mxy8898在2018/3/21 9:15:00的发言:
如果用某列,这一列,多数是重复值,有影响吗
而且我看数据库
所有表都有_SortKey,而其中一个表没有这个列,正常吗
[此贴子已经被作者于2018/3/21 9:32:32编辑过]

 

1、两个表之间,根据什么逻辑同步数据?必须把唯一的条件弄出来才能写代码

 

2、如果仅仅是根据行号同步,你可以参考后一种的方式处理,如

 

If e.Table.Current Is Nothing Then \'如果Current为Nothing
    Return \'则返回
End If
Tables("原始数据中间转换").Position = e.Table.Position


--  作者:mxy8898
--  发布时间:2018/3/21 11:03:00
--  
根据关键列同步,  _IDENTIFY
新增多列,又出这种情况,每隔10行是新增的,不是按新增顺序排序

图片点击可在新窗口打开查看此主题相关图片如下:新增行奇怪,每隔10行,和其他表同步是正确的.jpg
图片点击可在新窗口打开查看


--  作者:有点甜
--  发布时间:2018/3/21 12:15:00
--  

同步的规则是什么?根据什么规则同步?没有规则就无法编写代码。