Foxtable(狐表)用户栏目专家坐堂 → 关联列数量太少


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

主题:关联列数量太少

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


加好友 发短信
等级:九尾狐 帖子:2649 积分:19390 威望:0 精华:1 注册:2008/9/12 9:19:00
  发帖心情 Post By:2010/12/22 13:57:00 [显示全部帖子]

以下是引用狐狸爸爸在2010-12-22 12:20:00的发言:

1、请反思自己的设计。

2、我这辈子还没见过一个系统,有达到三列以上的关联,两列都极为罕见,至于三列,则只能在那些初次编程的人做的系统中看到。

[此贴子已经被作者于2010-12-22 12:21:59编辑过]

我就是用三列(产品分类、型号、规格)来关联的,一开始我也觉得不妥,但实在没有好的办法才为之,现在运行还正常。

最初,我用主表的_Identify与子表的产品ID关联,正常的操作是:首先在主表增加记录,然后在子表增加对应的记录,产品ID与_Identify一一对应,这些是通常的设计和操作。但是,公司的同事觉得几万个产品品种一条一条的增加记录太费工费时,希望能将EXCEL表的产品数据导入或复制过来,由于产品ID的限制而难以实现。

还有一种方案,就是产品编码,这是系统设计的最佳方案,然而编码的设计却不是那么容易的,许多企业的信息化就是迈不过这个坎而被挡在门外,一些使用者强烈拒绝编码。

希望高手指点。


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


加好友 发短信
等级:九尾狐 帖子:2649 积分:19390 威望:0 精华:1 注册:2008/9/12 9:19:00
  发帖心情 Post By:2010/12/22 15:11:00 [显示全部帖子]

来个例子吧

表A与表B关联,现在想将表C的数据复制到表B,如何让这些数据与表A关联。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目11.table


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


加好友 发短信
等级:九尾狐 帖子:2649 积分:19390 威望:0 精华:1 注册:2008/9/12 9:19:00
  发帖心情 Post By:2010/12/22 15:42:00 [显示全部帖子]

ok

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


加好友 发短信
等级:九尾狐 帖子:2649 积分:19390 威望:0 精华:1 注册:2008/9/12 9:19:00
  发帖心情 Post By:2010/12/27 15:08:00 [显示全部帖子]

以下是引用lihe60在2010-12-27 14:40:00的发言:

单据编号、日期、单位名称、合同名称、币种、经办人   是父表列的内容。

关联表的子表每增加一行,自动增加上述列的内容,如何反思?

上述字段中,"单据编号"可作为关联列,其它列在增加关联表的行时通过代码加上,参考以下代码(关联表的DataColChanged事件代码)

If e.DataCol.Name = "产品ID" Then '发生变化的是产品编号吗?
    '在产品表找出该产品
    Dim dr As DataRow
    dr = DataTables("产品").Find("_Identify = " & "'" & e.DataRow("产品ID") & "'" )
    If dr IsNot Nothing '如果找到, 则设置各列内容
        e.DataRow("产品分类")= dr("产品分类")
        e.DataRow("型号")= dr("型号")
        e.DataRow("规格")= dr("规格")
    End If
End If

修改红色相应的部分就可以了


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


加好友 发短信
等级:九尾狐 帖子:2649 积分:19390 威望:0 精华:1 注册:2008/9/12 9:19:00
  发帖心情 Post By:2010/12/28 12:45:00 [显示全部帖子]

以下是引用lihe60在2010-12-28 12:31:00的发言:
贺老师,你就多增加几个关联列吧

请你认真看看13楼的代码,能满足你的要求,1个关联列,其它都是数据列。


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


加好友 发短信
等级:九尾狐 帖子:2649 积分:19390 威望:0 精华:1 注册:2008/9/12 9:19:00
  发帖心情 Post By:2010/12/28 13:37:00 [显示全部帖子]

以下是引用lihe60在2010-12-28 13:21:00的发言:
比如父表的规格或型号变了,子表的规格或型号不会跟着变的,这又需要设置代码,很麻烦。

那你就再加代码:

表A与表B已经关联,表B第2列 第3列 第4列 = 表A 第2列 第3列 第4列
一般在主表的DataColChanged事件设置代码
Select Case  e.DataCol.Name
    Case "第2列","第3列","第4列"
     Dim crs As List(of DataRow) = e.DataRow.GetChildRows("表B")  '获得子表中的所有行
     For Each cr As DataRow In crs
        cr(e.DataCol.Name) = e.DataRow(e.DataCol.Name)
     Next
End Select

 

我当初与你一样,关联字段较多(不过最多三个),当数据量大时会严重影响运行速度



 回到顶部