Foxtable(狐表)用户栏目专家坐堂 → 跨表引用问题


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

主题:跨表引用问题

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


加好友 发短信
等级:五尾狐 帖子:1152 积分:7712 威望:0 精华:0 注册:2019/6/13 9:57:00
跨表引用问题  发帖心情 Post By:2021/10/28 14:31:00 [只看该作者]

需求:“表A”录入完成数据,从“表B”的“货号,品名”录找相应的数据,生成“表C”数据。如下图
这个类于帮助BOM的实例,它是汇总起来,下面的需求是明细,不汇总。
下面代码只实现单条,没办法实现图,表C的结果,如何实现表C的结果?

If e.DataCol.Name = "货名" Then '如果内容发生变动的是品名列
    If e.NewValue Is Nothing Then '如果新值是空白,也就是品名列的内容为空
        e.
DataRow("
料名") = Nothing '那么清空此行单价列的内容
    
Else
        Dim
 dr As DataRow
        
'否则在产品表查找同名的产品行,将找到的行赋值给变量dr
        dr = 
DataTables("表B").Find("[货名 = '" & e.NewValue & "'")
        If
 dr IsNot Nothing Then '如果找到了同名的产品行,也就是dr不是Nothing
            e.
DataRow("料名") = dr("料名")
        End
 If
    End
 If
End
 If


图片点击可在新窗口打开查看此主题相关图片如下:多表引用.jpg
图片点击可在新窗口打开查看


 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109487 积分:557097 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/10/28 14:37:00 [只看该作者]

DataTables("表B").Find改为DataTables("表B").Select



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


加好友 发短信
等级:五尾狐 帖子:1152 积分:7712 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2021/10/28 15:43:00 [只看该作者]

老师,下面代码,不执行,无法实现上面需求,如何解决?谢谢

If e.DataCol.Name = "货名" Then '如果内容发生变动的是品名列
    If e.NewValue Is Nothing Then '如果新值是空白,也就是品名列的内容为空
        e.DataRow("料号") = Nothing '那么清空此行单价列的内容
        e.DataRow("料名") = Nothing
        e.DataRow("用量") = Nothing
        
    Else
        'Dim dr As DataRow
        ''否则在产品表查找同名的产品行,将找到的行赋值给变量dr
        'dr = DataTables("表B").Find("[货名 = '" & e.NewValue & "'")
        
        Dim Cols1() As String = {"料号","料名","用量"}
        Dim Cols2() As String = {"料号","料名","用量"}
        
       
        For Each dr1 As DataRow In DataTables("表B").Select("[货名 = '" & e.NewValue & "'")
            
            Dim dr2 As DataRow = DataTables("表C").AddNew()
            For i As Integer = 0 To Cols1.Length -1
                dr2(Cols2(i)) = dr1(Cols1(i))
            Next
        Next
        
        
    End If
    
End If

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109487 积分:557097 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/10/28 15:50:00 [只看该作者]

        Dim Cols1() As String = {"货号","品名","料号","料名","用量"}
        Dim Cols2() As String = {"货号","品名","料号","料名","用量"}
        
       
        For Each dr1 As DataRow In DataTables("表B").Select("[货名 = '" & e.NewValue & "'")
            
            Dim dr2 As DataRow = DataTables("表C").AddNew()
            For i As Integer = 0 To Cols1.Length -1
                dr2(Cols2(i)) = dr1(Cols1(i))
            Next
dr2("数量") = e.DataRow("数量")
        Next

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


加好友 发短信
等级:五尾狐 帖子:1152 积分:7712 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2021/10/28 16:34:00 [只看该作者]

老师,没报错,就是不执行


If e.DataCol.Name = "货名" Then '如果内容发生变动的是品名列
    If e.NewValue Is Nothing Then '如果新值是空白,也就是品名列的内容为空
        e.DataRow("料号") = Nothing '那么清空此行单价列的内容
        e.DataRow("料名") = Nothing
        e.DataRow("用量") = Nothing
        
    Else
        'Dim dr As DataRow
        ''否则在产品表查找同名的产品行,将找到的行赋值给变量dr
        'dr = DataTables("表B").Find("[货名 = '" & e.NewValue & "'")
        
        Dim Cols1() As String = {"货号","品名","料号","料名","用量"}
        Dim Cols2() As String = {"货号","品名","料号","料名","用量"}
               
        For Each dr1 As DataRow In DataTables("表B").Select("[货名 = '" & e.NewValue & "'")
            
            Dim dr2 As DataRow = DataTables("表C").AddNew()
            For i As Integer = 0 To Cols1.Length -1
                dr2(Cols2(i)) = dr1(Cols1(i))
            Next
            dr2("数量") = e.DataRow("数量")
        Next       
        
    End If
    
End If

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109487 积分:557097 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/10/28 16:52:00 [只看该作者]

重置一下货名列

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


加好友 发短信
等级:五尾狐 帖子:1152 积分:7712 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2021/10/28 17:18:00 [只看该作者]

重置一下货名列,也无效果

 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109487 积分:557097 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/10/28 17:19:00 [只看该作者]

列的名称是货名还是货号?

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


加好友 发短信
等级:五尾狐 帖子:1152 积分:7712 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2021/10/28 17:45:00 [只看该作者]

If e.DataCol.Name = "货号" Then '如果内容发生变动的是品名列
    If e.NewValue Is Nothing Then '如果新值是空白,也就是品名列的内容为空
        e.DataRow("料号") = Nothing '那么清空此行单价列的内容
        e.DataRow("料名") = Nothing
        e.DataRow("用量") = Nothing
        
    Else
        'Dim dr As DataRow
        ''否则在产品表查找同名的产品行,将找到的行赋值给变量dr
        'dr = DataTables("表B").Find("[货名 = '" & e.NewValue & "'")
        
        Dim Cols1() As String = {"货号","品名","料号","料名","用量"}
        Dim Cols2() As String = {"货号","品名","料号","料名","用量"}
               
        For Each dr1 As DataRow In DataTables("表B").Select("[货号= '" & e.NewValue & "'")
            
            Dim dr2 As DataRow = DataTables("表C").AddNew()
            For i As Integer = 0 To Cols1.Length -1
                dr2(Cols2(i)) = dr1(Cols1(i))
            Next
            dr2("数量") = e.DataRow("数量")
        Next       
        
    End If
    
End If

是货号,改过来,执行报错:

.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2021.5.29.1
错误所在事件:表,表C,DataColChanged
详细错误信息:
调用的目标发生了异常。
表达式包含无效名称:“[货号= 'A-01'”。

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


加好友 发短信
等级:五尾狐 帖子:1152 积分:7712 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2021/10/28 17:49:00 [只看该作者]

货号字段是字符型,不是表达式列

 回到顶部
总数 15 1 2 下一页