以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]已知关联表,如果用代码找出该关联表对应的子表  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=168966)

--  作者:昱飞哥
--  发布时间:2021/5/28 18:14:00
--  [求助]已知关联表,如果用代码找出该关联表对应的子表
首先,因为我每个主表都保存了视图,视图的名称就是表的名称。
我想一键让所有的关联表都按照对应的视图打开。比如Tables(“客户信息表.客户联系人信息表”)按照视图“客户联系人信息表”打开。
于是我有了下面的代码:

For Each t As Table In Tables
    If t.IsRelation Then  \'如果是关联表
        Dim s As String = t.       \'关联表的子表的名称           这行代码不会写
        t.OpenView(s)
    End If
Next

--  作者:有点蓝
--  发布时间:2021/5/29 8:46:00
--  
参考:http://www.foxtable.com/webhelp/topics/1941.htm

For Each re As Relation In Relations
tables(Re.ChildTable.Name).OpenView(Re.ParentTable.Name)
Next

--  作者:昱飞哥
--  发布时间:2021/5/29 12:45:00
--  
感谢老师,已经成功。贴出代码分享给狐友们:

For Each t As Table In Tables
    If t.IsRelation Then  \'如果是关联表
        For Each re As Relation In Relations
            t.OpenView(Re.ChildTable.Name)   \'打开视图名称是表t的子表名称的视图
        Next
    Else  \'如果不是关联表
        t.OpenView(t.Name) \'则打开视图名称是表t的名称的视图
    End If
Next


提示:
1、首先我是每个建每个主表的时候都保存了表视图,表视图的名称填写的是该主表的名字;
2、因为当主表的列的排列顺序发生改变之后,如果窗口中有该主表的副本表,那么当窗口运行的时候,副本表的列的排列顺序就跟主表不一样了
3、为了解决该问题,实现当窗口运行的时候,副本表的列的排列顺序始终和主表一样。于是有了上述代码。
4、将上述代码写进每个含有副本表的窗口的AfterLoad事件。免去了需要给各个副本表写.openview代码的繁琐。
5、这个方法有2件麻烦事:一是每个主表都有保存表视图,且每次调整列顺序都要手动保存表视图;二是要在每个含有副本表的窗口的AfterLoad事件都写入上述代码。
6、如果有狐友有更好的办法,麻烦赐教,谢谢。