Foxtable(狐表)用户栏目专家坐堂 → [求助]代码问题


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

主题:[求助]代码问题

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


加好友 发短信
等级:幼狐 帖子:126 积分:813 威望:0 精华:0 注册:2015/10/22 10:35:00
[求助]代码问题  发帖心情 Post By:2016/7/5 9:30:00 [显示全部帖子]

专家您好,我有3个表:当前表、能力表、生产表,分别如下:
当前表
图片点击可在新窗口打开查看此主题相关图片如下:当前表.bmp
图片点击可在新窗口打开查看
能力表
图片点击可在新窗口打开查看此主题相关图片如下:能力表.bmp
图片点击可在新窗口打开查看
生产表
图片点击可在新窗口打开查看此主题相关图片如下:生产表.bmp
图片点击可在新窗口打开查看
在当前表的DataColChanged事件中编写代码如下:
Select Case e.DataCol.Name
    Case "杆径","长度","编号"
        Dim dc As DataRow = e.DataRow
        Dim qc As DataRow
        Dim pc As DataRow
        Dim filter1 As String
        Dim filter2 As String
        filter1 = "杆径 = '" & dc("杆径") & "' And 长度 = '" & dc("长度") & "'"
        filter2 = "编号 = '" & dc("编号") & "'"
        pc = DataTables("能力表").Find(filter1)
        If pc IsNot Nothing Then
            qc = DataTables("生产表").Find(filter2)
            If qc IsNot Nothing Then
                If qc("工位") = "平锻机1"
                    dc("平锻机1") = pc("能力_350t")
                End If
                If qc("工位") = "平锻机2"
                    dc("平锻机2") = pc("能力_450t")
                End If
                If qc("工位") = "平锻机3"
                    dc("平锻机3") = pc("能力_500t")
                End If
                If qc("工位") = "平锻机4"
                    dc("平锻机4") = pc("能力_800t")
                End If
            End If
        End If
End Select
目的是当生产表中在不同的合同中安排设备生产时,当前表可以将设备能力显示出来,但以上代码只显示“平锻机1”的能力,其他设备不显示,问题出在哪里?

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


加好友 发短信
等级:幼狐 帖子:126 积分:813 威望:0 精华:0 注册:2015/10/22 10:35:00
  发帖心情 Post By:2016/7/5 9:41:00 [显示全部帖子]

还是只在“平锻机1”列有数据,其他没有数据

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


加好友 发短信
等级:幼狐 帖子:126 积分:813 威望:0 精华:0 注册:2015/10/22 10:35:00
  发帖心情 Post By:2016/7/5 9:51:00 [显示全部帖子]

谢谢专家!


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


加好友 发短信
等级:幼狐 帖子:126 积分:813 威望:0 精华:0 注册:2015/10/22 10:35:00
  发帖心情 Post By:2016/7/5 10:58:00 [显示全部帖子]

Select Case e.DataCol.Name
    Case "杆径","长度","编号"
        Dim dc As DataRow = e.DataRow
        Dim pc As DataRow
        Dim filter1 As String
        Dim filter2 As String
        
        filter2 = "编号 = '" & dc("编号") & "'"
        For Each gw As String In DataTables("生产表").GetValues("工位", filter2)
            If e.DataTable.DataCols.contains(gw) Then
                Dim nl As String = ""
                If gw = "平锻机1"
                    nl = "能力_350t"
                ElseIf gw = "平锻机2"
                    nl = "能力_450t"
                ElseIf gw = "平锻机3"
                    nl = "能力_500t"
                ElseIf gw = "平锻机4"
                    nl = "能力_800t"
                End If
                filter1 = "杆径 = '" & dc("杆径") & "' And 长度 = '" & dc("长度") & "' and " & nl & " is not Null"
                pc = DataTables("能力表").Find(filter1)
                If pc IsNot Nothing Then
                    dc(gw) = pc(nl)      在“当前表”中,实际列的名称与“生产表”不一致。在实际案例中为“本工序_日生产能力_平锻机1”、“本工序_日生产能力_平锻机2”......“本工序_日生产能力_平锻机6”.不能直接用 dc(gw) = pc(nl),怎么改?
                Else,
                    dc(gw) = Nothing
                End If
                
            End If
        Next
        
End Select

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


加好友 发短信
等级:幼狐 帖子:126 积分:813 威望:0 精华:0 注册:2015/10/22 10:35:00
  发帖心情 Post By:2016/7/5 11:14:00 [显示全部帖子]

这是我的实际代码
 Case "品种_杆径","品种_长度","合同编号"
        Dim dc As DataRow = e.DataRow
        Dim pc As DataRow
        
        Dim filter1 As String
        Dim filter2 As String
        
        filter2 = "执行合同编号 = '" & dc("合同编号") & "'"
        For Each gw As String In DataTables("生产安排表").GetValues("工位", filter2)
            gw = "本工序_日生产能力_" & gw
            If e.DataTable.DataCols.contains(gw) Then
                Dim nl As String = ""
                If gw = "平锻机1"
                    nl = "日生产能力_锻造_350t"
                ElseIf gw = "平锻机2"
                    nl = "日生产能力_锻造_450t"
                ElseIf gw = "平锻机3"
                    nl = "日生产能力_锻造_350t"
                ElseIf gw = "平锻机4"
                    nl = "日生产能力_锻造_450t"
                ElseIf gw = "平锻机5"
                    nl = "日生产能力_锻造_500t"
                ElseIf gw = "平锻机6"
                    nl = "日生产能力_锻造_800t"
                End If
                
                filter1 = "品种_杆径 = '" & dc("品种_杆径") & "' And 品种_长度 = '" & dc("品种_长度") & "'and " & nl & " is not Null"
                pc = DataTables("工序能力表").Find(filter1)
                If pc IsNot Nothing Then
                    dc(gw) = pc(nl)
                Else
                    dc(gw) = Nothing
                End If
            End If
        Next
错误信息为:调用的目标发生了异常,详细信息如下:
.NET Framework 版本:2.0.50727.3655
Foxtable 版本:2016.6.14.1
错误所在事件:表,拉动排产计划_锻造, DataColChanged
详细错误信息:
调用的目标发生了异常。
语法错误:“Is”运算符前缺少操作数

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


加好友 发短信
等级:幼狐 帖子:126 积分:813 威望:0 精华:0 注册:2015/10/22 10:35:00
  发帖心情 Post By:2016/7/5 11:48:00 [显示全部帖子]

谢谢专家!问题解决了

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


加好友 发短信
等级:幼狐 帖子:126 积分:813 威望:0 精华:0 注册:2015/10/22 10:35:00
  发帖心情 Post By:2016/7/5 17:09:00 [显示全部帖子]

请教专家,还是前面的问题,我将10楼代码进行了改动,红色部分,目的是使得“工序能力表”中“nl”列为空值的行,在当前表中的 dc(gw) = 0,但结果只有一个应该为0的值是0,其他仍为空值。
Case "品种_杆径","品种_长度","合同编号"
        Dim dc As DataRow = e.DataRow
        Dim pc As DataRow
        Dim filter1 As String
        Dim filter2 As String
        filter2 = "执行合同编号 = '" & dc("合同编号") & "'"
        For Each gw As String In DataTables("生产安排表").GetValues("工位", filter2)
            Dim nl As String = ""
            If gw = "平锻机1"
                nl = "日生产能力_锻造_350t"
            ElseIf gw = "平锻机2"
                nl = "日生产能力_锻造_450t"
            ElseIf gw = "平锻机3"
                nl = "日生产能力_锻造_350t"
            ElseIf gw = "平锻机4"
                nl = "日生产能力_锻造_450t"
            ElseIf gw = "平锻机5"
                nl = "日生产能力_锻造_500t"
            ElseIf gw = "平锻机6"
                nl = "日生产能力_锻造_800t"
            End If
            gw = "本工序_日生产能力_" & gw
            If e.DataTable.DataCols.contains(gw) Then
                    If nl > "" Then
                        filter1 = "品种_杆径 = '" & dc("品种_杆径") & "' And 品种_长度 = '" & dc("品种_长度") & "' and " & nl & " is not Null"
                        pc = DataTables("工序能力表").Find(filter1)
                        If pc Is Nothing Then
                            dc(gw) = 0
                        Else
                            dc(gw) = pc(nl)
                        
                    End If
                End If
            End If           
        Next        

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


加好友 发短信
等级:幼狐 帖子:126 积分:813 威望:0 精华:0 注册:2015/10/22 10:35:00
  发帖心情 Post By:2016/7/5 17:21:00 [显示全部帖子]

看不懂?哪里来的
dc("第一列") = 0
dc("第二列") = 0
dc("第三列") = 0
dc("第四列") = 0


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


加好友 发短信
等级:幼狐 帖子:126 积分:813 威望:0 精华:0 注册:2015/10/22 10:35:00
  发帖心情 Post By:2016/7/5 17:25:00 [显示全部帖子]

ok,谢谢!

 回到顶部